Получение значений счетчиков производительности (value_api.h)

API определен в заголовочном файле sysroot-*-kos/include/coresrv/stat/value_api.h из состава KasperskyOS SDK.

API позволяет получать значения счетчиков производительности, таких как счетчики времени, размеров памяти, объектов.

Сведения о функциях API приведены в таблице ниже.

Использование API

Чтобы получать значения счетчиков производительности, нужно использовать следующие функции:

Функции KnStatGetValueAsInt64() и KnStatGetValueAsUInt64() через параметр name принимают имя счетчика производительности. Функции KnStatGetValues() и KnStatGetObjectValues() через параметр names принимают массив с именами счетчиков производительности. Имя счетчика производительности представляет собой строку, состоящую из одного или нескольких сегментов, разделенных точкой (см. таблицы ниже с именами и значениями счетчиков производительности).

Через опциональный параметр prefix функции KnStatGetValueAsInt64() и KnStatGetValueAsUInt64() принимают префикс для имени счетчика производительности, заданного через параметр name, а функция KnStatGetValues() принимает префикс для имен счетчиков производительности, заданных через параметр names. Этот префикс является начальной частью имени счетчика производительности, которая состоит из одной или нескольких сегментов, разделенных точкой, и заканчивается точкой. Параметр prefix удобно использовать, когда требуется получить значения нескольких счетчиков производительности с именами, которые имеют одинаковую начальную или конечную часть. При этом префикс может содержать одинаковую либо отличающуюся начальную часть.

С использованием функции KnStatGetObjectValues() можно получить значения только тех счетчиков производительности, которые связаны с процессом или потоком исполнения, заданным через параметр handle. При этом имена счетчиков производительности, связанных с процессом, нужно указать без начальной части task.<PID>., а имена счетчиков производительности, связанных с потоком исполнения, нужно указать без начальной части task.<PID>.thread.<TID>..

Сведения о функциях API

Функции value_api.h

Функция

Сведения о функции

KnStatGetValueAsInt64()

Назначение

Позволяет получить значение счетчика производительности в формате 64-битного знакового целого числа.

Параметры

  • [in,optional] prefix – указатель на префикс для имени счетчика производительности или RTL_NULL, если не требуется использовать префикс.
  • [in] name – указатель на имя счетчика производительности.
  • [out] value – указатель на значение счетчика производительности.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnStatGetValueAsUInt64()

Назначение

Позволяет получить значение счетчика производительности в формате 64-битного беззнакового целого числа.

Параметры

  • [in,optional] prefix – указатель на префикс для имени счетчика производительности или RTL_NULL, если не требуется использовать префикс.
  • [in] name – указатель на имя счетчика производительности.
  • [out] value – указатель на значение счетчика производительности.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnStatGetValues()

Назначение

Позволяет получить значения счетчиков производительности.

Параметры

  • [in,optional] prefix – указатель на префикс для имен счетчиков производительности или RTL_NULL, если не требуется использовать префикс.
  • [in] names – указатель на массив с именами счетчиков производительности.
  • [in] count – число счетчиков производительности.
  • [out] values – указатель на массив структур, содержащих значения счетчиков производительности.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KnStatGetObjectValues()

Назначение

Позволяет получить значения счетчиков производительности, связанных с системным ресурсом (процессом или потоком исполнения).

Параметры

  • [in] handle – дескриптор системного ресурса.
  • [in] names – указатель на массив с именами счетчиков производительности.
  • [in] count – число счетчиков производительности.
  • [out] values – указатель на массив структур, содержащих значения счетчиков производительности.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

Имена и значения счетчиков производительности

Счетчики времени имеют значения в наносекундах. Время отсчитывается с момента запуска ядра KasperskyOS. Большинство счетчиков размера памяти имеет значения в страницах памяти. Размер страницы памяти составляет 4 КБ для всех аппаратных платформ, поддерживаемых KasperskyOS. Имена счетчиков производительности, связанных с процессом, содержат идентификатор процесса (PID). Имена счетчиков производительности, связанных с потоком исполнения, содержат идентификатор процесса (PID) и идентификатор потока исполнения (TID). Квалифицированные имена служб ядра см. в "Методы служб ядра KasperskyOS".

Общесистемные счетчики производительности

Имя счетчика

Значение счетчика

tasks

Число процессов (без учета процесса ядра)

threads

Число потоков исполнения (включая потоки ядра)

time.user

Суммарное время работы всех процессоров в пользовательском режиме

time.kernel

Суммарное время работы всех процессоров в режиме ядра

time.idle

Суммарное время работы всех процессоров в режиме бездействия

time.sleep.ipc

Суммарное время блокировки всех потоков исполнения в ожидании IPC

time.sleep.futex

Суммарное время блокировки всех потоков исполнения в результате использования фьютексов

time.sleep.voluntary

Суммарное время блокировки всех потоков исполнения в результате вызовов функций KosThreadSleep() и KnSleep()

time.sleep.other

Суммарное время блокировки всех потоков исполнения по причинам, не связанным с ожиданием IPC, использованием фьютексов и вызовами функций KosThreadSleep() и KnSleep()

mem.total

Размер установленной физической памяти, в страницах памяти

mem.free

Размер свободной физической памяти, в страницах памяти

mem.shmem

Размер физической памяти, используемой в качестве разделяемой, в страницах памяти

mem.exsize

Размер физической памяти с атрибутом "доступ на исполнение", в страницах памяти

mem.kmalloc.total

Размер физической памяти, зарезервированной для распределения аллокатором ядра, в страницах памяти

mem.kmalloc.free

Размер свободной физической памяти, зарезервированной для распределения аллокатором ядра, в страницах памяти

mem.kmalloc.count

Число регионов физической памяти, распределенных аллокатором ядра

mem.kmalloc.size

Размер физической памяти, распределенной аллокатором ядра, в байтах

mem.kmalloc.cached

Размер свободной физической памяти, которая зарезервирована для распределения аллокатором ядра и недоступна на любом процессоре (вычислительном ядре), а только отдельно на каждом процессоре, в байтах

dma.count

Число буферов DMA

dma.allocated

Суммарный размер всех буферов DMA, в страницах памяти

romfs.is_initial

Признак наличия образа ROMFS в памяти ядра (rtl_true или 1 – да, rtl_false или 0 – нет)

romfs.files.count

Число файлов в образе ROMFS

romfs.size

Размер образа ROMFS, в страницах памяти

objects.total

Число объектов ядра

handles.total

Число дескрипторов (handles)

handles.tables.size

Суммарный размер таблиц дескрипторов (handles), включающих использованные и неиспользованные идентификаторы, в байтах

sid.used

Число идентификаторов безопасности (SIDs)

sid.capacity

Максимально возможное число идентификаторов безопасности (SIDs)

ipc.recv

Число системных вызовов Recv(), выполненных всеми потоками исполнения

ipc.reply

Число системных вызовов Reply(), выполненных всеми потоками исполнения

ipc.call

Число системных вызовов Call(), выполненных всеми потоками исполнения

Счетчики производительности, связанные с процессором (вычислительным ядром)

Имя счетчика

Значение счетчика

cpu.<индекс процессора>.time.user

Время работы процессора в пользовательском режиме

cpu.<индекс процессора>.time.kernel

Время работы процессора в режиме ядра

cpu.<индекс процессора>.time.idle

Время работы процессора в режиме бездействия

cpu.<индекс процессора>.conswitches

Число переключений контекстов потоков исполнения на процессоре

cpu.<индекс процессора>.irqs

Число прерываний, обработанных на процессоре

cpu.<индекс процессора>.irq.clock

Число прерываний таймера, обработанных на процессоре

cpu.<индекс процессора>.irq.dsptch

Число прерываний на перепланирование потоков исполнения, обработанных на процессоре

Счетчики производительности, связанные с прерываниями

Имя счетчика

Значение счетчика

irqs.count

Максимальное число аппаратных прерываний, которые могут быть зарегистрированы, включая прерывания MSI и прерывания, возникающие при обращении устройств к контроллеру прерываний через линии аппаратных прерываний

irq.<номер прерывания>.cpu.<индекс процессора>

Число прерываний, полученных процессором (вычислительным ядром)

irq.<номер прерывания>.ipl

Приоритет прерывания

irq.<номер прерывания>.enabled

Признак того, что к прерыванию привязан хотя бы один поток исполнения (rtl_true или 1 – да, rtl_false или 0 – нет)

irq.<номер прерывания>.handlers

Число обработчиков прерывания

irq.<номер прерывания>.mode

Условия возникновения прерывания (в соответствии с перечислением irqmode_t, определенным в заголовочном файле sysroot-*-kos/include/hal/irqmode.h из состава KasperskyOS SDK)

Счетчики производительности, связанные с процессом

Имя счетчика

Значение счетчика

task.<PID>.state

Состояние процесса (в соответствии с перечислением TaskExecutionStates, определенным в заголовочном файле sysroot-*-kos/include/task/pcbpage.h из состава KasperskyOS SDK)

task.<PID>.threads

Число потоков исполнения в процессе

task.<PID>.start

Время между запуском ядра и загрузкой образа программы в память процесса

task.<PID>.imsize

Размер образа программы в памяти процесса, в байтах

task.<PID>.ppid

Идентификатор родительского процесса (PPID)

task.<PID>.prio

Приоритет начального потока процесса

task.<PID>.allocated

Размер физической памяти, используемой процессом, в страницах памяти (характеризует только ту память, которая выделена непосредственно для процесса; если, например, в память процесса отображен буфер MDL, созданный другим процессом, то размер этого буфера не включается в это значение)

task.<PID>.vmsize

Размер виртуальной памяти процесса, в страницах памяти

task.<PID>.shmem

Размер виртуальной памяти процесса, отображаемой на разделяемую физическую память, в страницах памяти

task.<PID>.ptsize

Размер таблицы страниц процесса, в страницах памяти

task.<PID>.dma.mapped

Размер памяти для DMA, отображаемой на виртуальную память процесса, в страницах памяти

task.<PID>.mmio.mapped

Размер памяти для MMIO, отображаемой на виртуальную память процесса, в страницах памяти

task.<PID>.time.user

Суммарное время исполнения всех потоков процесса в пользовательском режиме

task.<PID>.time.kernel

Суммарное время исполнения всех потоков процесса в режиме ядра

task.<PID>.time.sleep.ipc

Суммарное время блокировки всех потоков процесса в ожидании IPC

task.<PID>.time.sleep.futex

Суммарное время блокировки всех потоков процесса в результате использования фьютексов

task.<PID>.time.sleep.voluntary

Суммарное время блокировки всех потоков процесса в результате вызовов функций KosThreadSleep() и KnSleep()

task.<PID>.time.sleep.other

Суммарное время блокировки всех потоков процесса по причинам, не связанным с ожиданием IPC, использованием фьютексов и вызовами функций KosThreadSleep() и KnSleep()

task.<PID>.handles.allocated

Число дескрипторов (handles), принадлежащих процессу

task.<PID>.handles.table.size

Размер таблицы дескрипторов (handles) процесса, включающей использованные и неиспользованные идентификаторы, в байтах

task.<PID>.handles.table.capacity

Число дескрипторов (handles), которые вмещаются в таблицу дескрипторов процесса

task.<PID>.objects.user

Число созданных процессом дескрипторов (handles) пользовательских ресурсов

task.<PID>.ipc.recv

Число системных вызовов Recv(), выполненных всеми потоками процесса

task.<PID>.ipc.reply

Число системных вызовов Reply(), выполненных всеми потоками процесса

task.<PID>.ipc.call

Число системных вызовов Call(), выполненных всеми потоками процесса

Счетчики производительности, связанные с потоком исполнения

Имя счетчика

Значение счетчика

task.<PID>.thread.<TID>.time.user

Время исполнения потока процесса в пользовательском режиме

task.<PID>.thread.<TID>.time.kernel

Время исполнения потока процесса в режиме ядра

task.<PID>.thread.<TID>.time.sleep.ipc

Время блокировки потока процесса в ожидании IPC

task.<PID>.thread.<TID>.time.sleep.futex

Время блокировки потока процесса в результате использования фьютексов

task.<PID>.thread.<TID>.time.sleep.voluntary

Время блокировки потока процесса в результате вызовов функций KosThreadSleep() и KnSleep()

task.<PID>.thread.<TID>.time.sleep.other

Время блокировки потока процесса по причинам, не связанным с ожиданием IPC, использованием фьютексов и вызовами функций KosThreadSleep() и KnSleep()

task.<PID>.thread.<TID>.conswitches

Число вытеснений потока процесса другими потоками исполнения

task.<PID>.thread.<TID>.sched.prio

Приоритет потока исполнения

task.<PID>.thread.<TID>.sched.policy

Класс планирования потока исполнения (в соответствии с перечислением ThreadSchedPolicy, определенным в заголовочном файле sysroot-*-kos/include/thread/tidtype.h из состава KasperskyOS SDK)

task.<PID>.thread.<TID>.ipc.recv

Число системных вызовов Recv(), выполненных потоком процесса

task.<PID>.thread.<TID>.ipc.reply

Число системных вызовов Reply(), выполненных потоком процесса

task.<PID>.thread.<TID>.ipc.call

Число системных вызовов Call(), выполненных потоком процесса

В начало