Определение загрузки процессора
Есть ли команда или какой-либо другой способ получить текущее или среднее использование процессора (для многопроцессорной среды) в Linux?
Я использую встроенный Linux в небольшой системе. По сути, мне нужно определить загрузку ЦП, чтобы, если он высокий, я мог вместо этого перенаправить новый процесс на другой контроллер в системе, а не выполнять на главном процессоре, который мог бы быть занят выполнением более важного процесса.
Этот вопрос не просто о приоритезации процессов, другой контроллер может в достаточной степени обрабатывать новый процесс, просто когда основной процессор не занят, я бы предпочел, чтобы он выполнял выполнение.
5 ответов
Вам нужно попробовать значения в /proc/stat
в два раза, и рассчитать среднее использование за это время. (Мгновенное использование не имеет большого смысла - оно всегда будет на 100% на одноядерной машине, так как ваш код для измерения использования выполняется всякий раз, когда он выглядит).
Ответ на вопрос после долгих поисков и ковыряний:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long double a[4], b[4], loadavg;
FILE *fp;
char dump[50];
for(;;)
{
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]);
fclose(fp);
sleep(1);
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]);
fclose(fp);
loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
printf("The current CPU utilization is : %Lf\n",loadavg);
}
return(0);
}
Я получаю те же значения, что указаны в системном мониторе.
cat /proc/stat
вы увидите что-то подобное
cpu 178877 11039 58012 5027374 22025 2616 1298 0 0
cpu0 122532 8808 34213 2438147 10881 1050 448 0 0
cpu1 56344 2230 23799 2589227 11143 1565 850 0 0
Просто возьмите суммы первых трех чисел и разделите их на суммы первых четырех целых
Первые 4 числа: пользовательский, хороший, системный и простой
примечание: это дает общее среднее значение. Если вы хотите взять спонтанное среднее, вы должны взять две выборки и вычесть их друг из друга до деления.
Файловая система /proc содержит все виды интересной информации. смотреть на man proc
для дополнительной информации.
Просто используйте top, если он доступен. Вы можете использовать его в неинтерактивном режиме:
top -n 1
Если вы хотите что-то конкретное, просто запустите этот вывод. Точные данные будут зависеть от того, как ваша верхняя команда форматирует вывод, но, например:
top -n 1 | grep 'Load'