KasperskyOS Community Edition 1.1

Получение сведений об использовании процессорного времени и памяти

Библиотека libkos предоставляет API, который позволяет получить сведения об использовании процессорного времени и памяти. Этот API определен в заголовочном файле sysroot-*-kos/include/coresrv/stat/stat_api.h из состава KasperskyOS SDK.

Чтобы получить сведения об использовании процессорного времени и памяти, а также другие статистические сведения, нужно собрать решение с версией ядра KasperskyOS, которая поддерживает счетчики производительности. Подробнее см. "Библиотека image".

Получение сведений об использовании процессорного времени

Время работы процессора отсчитывается с момента запуска ядра KasperskyOS.

Чтобы получить сведения об использовании процессорного времени, нужно использовать функции KnGroupStatGetParam() и KnTaskStatGetParam(). При этом через параметр param этих функций нужно передать значения, приведенные в таблице ниже.

Сведения об использовании процессорного времени

Функция

Значение параметра param

Получаемое значение

KnGroupStatGetParam()

GROUP_PARAM_CPU_KERNEL

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

KnGroupStatGetParam()

GROUP_PARAM_CPU_USER

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

KnGroupStatGetParam()

GROUP_PARAM_CPU_IDLE

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

KnTaskStatGetParam()

TASK_PARAM_TIME_TOTAL

Время работы процессора, затраченное на исполнение процесса

KnTaskStatGetParam()

TASK_PARAM_TIME_USER

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

Время работы процессора, полученное вызовом функции KnGroupStatGetParam() или KnTaskStatGetParam(), выражено в наносекундах.

Получение сведений об использовании памяти

Чтобы получить сведения об использовании памяти, нужно использовать функции KnGroupStatGetParam() и KnTaskStatGetParam(). При этом через параметр param этих функций нужно передать значения, приведенные в таблице ниже.

Сведения об использовании памяти

Функция

Значение параметра param

Получаемое значение

KnGroupStatGetParam()

GROUP_PARAM_MEM_TOTAL

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

KnGroupStatGetParam()

GROUP_PARAM_MEM_FREE

Размер свободной оперативной памяти

KnTaskStatGetParam()

TASK_PARAM_MEM_PHY

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

Размер памяти, полученный вызовом функции KnGroupStatGetParam() или KnTaskStatGetParam(), представляет собой число страниц памяти. Размер страницы памяти составляет 4 КБ для всех аппаратных платформ, поддерживаемых KasperskyOS.

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

Перечисление процессов

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

  1. Получить список процессов вызовом функции KnGroupStatGetTaskList().
  2. Получить число элементов списка процессов вызовом функции KnTaskStatGetTasksCount().
  3. Выполнить в цикле следующие действия:
    1. Получить элемент списка процессов вызовом функции KnTaskStatEnumTaskList().
    2. Получить имя процесса вызовом функции KnTaskStatGetName().

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

    3. Получить сведения об использовании процессорного времени и памяти процессом вызовами функции KnTaskStatGetParam().
    4. Проверить, что процесс не завершился. Если процесс завершился, то не использовать полученные сведения об использовании процессорного времени и памяти этим процессом.

      Чтобы проверить, что процесс не завершился, нужно вызвать функцию KnTaskStatGetParam() с передачей через параметр param значения TASK_PARAM_STATE. Должно быть получено значение, отличное от TaskStateTerminated.

    5. Завершить работу с элементом списка процессов вызовом функции KnTaskStatCloseTask().
  4. Завершить работу со списком процессов вызовом функции KnTaskStatCloseTaskList().

Расчет загрузки процессора

Показателями загрузки процессора могут быть процент общей загрузки процессора и процент загрузки процессора каждым процессом. Расчет этих показателей выполняется для интервала времени, в начале и конце которого были получены сведения об использовании процессорного времени. (Например, может выполняться мониторинг загрузки процессора с периодическим получением сведений об использовании процессорного времени.) Из значений, полученных в конце интервала, нужно вычесть значения, полученные в начале интервала. То есть для интервала нужно получить следующие приращения:

  • TK – время работы процессора в режиме ядра;
  • TU – время работы процессора в пользовательском режиме;
  • TIDLE – время работы процессора в режиме бездействия;
  • Ti [i=1,2,...,n] – процессорное время, затраченное на исполнение i-го процесса.

Процент общей загрузки процессора рассчитывается так:

(TK+TU)/(TK+TU+TIDLE).

Процент загрузки процессора i-м процессом рассчитывается так:

Ti/(TK+TU+TIDLE).

Получение дополнительных сведений о процессах

Помимо сведений об использовании процессорного времени и памяти функции KnGroupStatGetParam() и KnTaskStatGetParam() позволяют получить, например, такие сведения:

  • число процессов;
  • число потоков исполнения;
  • число потоков исполнения в одном процессе;
  • идентификатор родительского процесса (PPID);
  • приоритет процесса;
  • число дескрипторов, которыми владеет процесс;
  • размер виртуальной памяти процесса.

Функция KnTaskStatGetId() позволяет получить идентификатор процесса (PID).