Определение загрузки процессора

Есть ли команда или какой-либо другой способ получить текущее или среднее использование процессора (для многопроцессорной среды) в 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'
Другие вопросы по тегам