Получение сведений об использовании процессорного времени и памяти
Библиотека libkos
предоставляет API, который позволяет получить сведения об использовании процессорного времени и памяти. Этот API определен в заголовочном файле sysroot-*-kos/include/coresrv/stat/stat_api.h
из состава KasperskyOS SDK.
Чтобы получить сведения об использовании процессорного времени и памяти, а также другие статистические сведения, нужно собрать решение с версией ядра KasperskyOS, которая поддерживает счетчики производительности. Подробнее см. "Библиотека image".
Получение сведений об использовании процессорного времени
Время работы процессора отсчитывается с момента запуска ядра KasperskyOS.
Чтобы получить сведения об использовании процессорного времени, нужно использовать функции KnGroupStatGetParam()
и KnTaskStatGetParam()
. При этом через параметр param
этих функций нужно передать значения, приведенные в таблице ниже.
Сведения об использовании процессорного времени
Функция |
Значение параметра |
Получаемое значение |
---|---|---|
|
|
Время работы процессора в режиме ядра |
|
|
Время работы процессора в пользовательском режиме |
|
|
Время работы процессора в режиме бездействия |
|
|
Время работы процессора, затраченное на исполнение процесса |
|
|
Время работы процессора, затраченное на исполнение процесса в пользовательском режиме |
Время работы процессора, полученное вызовом функции KnGroupStatGetParam()
или KnTaskStatGetParam()
, выражено в наносекундах.
Получение сведений об использовании памяти
Чтобы получить сведения об использовании памяти, нужно использовать функции KnGroupStatGetParam()
и KnTaskStatGetParam()
. При этом через параметр param
этих функций нужно передать значения, приведенные в таблице ниже.
Сведения об использовании памяти
Функция |
Значение параметра |
Получаемое значение |
---|---|---|
|
|
Размер всей установленной оперативной памяти |
|
|
Размер свободной оперативной памяти |
|
|
Размер оперативной памяти, используемой процессом |
Размер памяти, полученный вызовом функции KnGroupStatGetParam()
или KnTaskStatGetParam()
, представляет собой число страниц памяти. Размер страницы памяти составляет 4 КБ для всех аппаратных платформ, поддерживаемых KasperskyOS.
Размер оперативной памяти, используемой процессом, характеризует только ту память, которая выделена непосредственно для этого процесса. Например, если в память процесса отображен буфер MDL, созданный другим процессом, то размер этого буфера не включается в это значение.
Перечисление процессов
Чтобы получить сведения об использовании процессорного времени и памяти каждым процессом, нужно выполнить следующие действия:
- Получить список процессов вызовом функции
KnGroupStatGetTaskList()
. - Получить число элементов списка процессов вызовом функции
KnTaskStatGetTasksCount()
. - Выполнить в цикле следующие действия:
- Получить элемент списка процессов вызовом функции
KnTaskStatEnumTaskList()
. - Получить имя процесса вызовом функции
KnTaskStatGetName()
.Это требуется, чтобы идентифицировать процесс, для которого будут получены сведения об использовании процессорного времени и памяти.
- Получить сведения об использовании процессорного времени и памяти процессом вызовами функции
KnTaskStatGetParam()
. - Проверить, что процесс не завершился. Если процесс завершился, то не использовать полученные сведения об использовании процессорного времени и памяти этим процессом.
Чтобы проверить, что процесс не завершился, нужно вызвать функцию
KnTaskStatGetParam()
с передачей через параметрparam
значенияTASK_PARAM_STATE
. Должно быть получено значение, отличное отTaskStateTerminated
. - Завершить работу с элементом списка процессов вызовом функции
KnTaskStatCloseTask()
.
- Получить элемент списка процессов вызовом функции
- Завершить работу со списком процессов вызовом функции
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).