Как рассчитать холостые циклы процессора?
Я хочу рассчитать холостые циклы процессора. Я попытался найти ответ на этот вопрос в Интернете. Но ответы не были удовлетворительными. Я запросил расчет циклов простоя ЦП, но ответы были об использовании ЦП / ЦП.
Подскажите пожалуйста, как рассчитать незанятые циклы ЦП для заданного интервала времени на языке c? Я работаю над алгоритмом установки скорости. Планирование снижения энергопотребления процессора.
idle_cycles = hard_idle + soft_idle;
run_cycles += excess_cycles;
run_percent = run_cycles /
(idle_cycles + run_cycles);
next_excess = run_cycles -
speed * (run_cycles + soft_idle)
IF excess_cycles < 0. THEN
excess_cycles = 0.
energy = (run_cycles - excess_cycles) *
speed * speed;
IF excess_cycles > idle_cycles THEN
newspeed = 1.0;
ELSEIF run_percent > 0.7 THEN
newspeed = speed + 0.2;
ELSEIF run_percent < 0.5 THEN
newspeed = speed -
(0.6 - run_percent);
IF newspeed > 1.0 THEN
newspeed = 1.0;
IF newspeed < min_speed THEN
newspeed = min_speed;
speed = newspeed;
excess_cycles = next_excess;
В этом алгоритме я наткнулся на термин idle_cycles, который я хочу вычислить с помощью c.
1 ответ
/proc/uptime
переменный файл
Существует переменный файл, расположенный по адресу /proc/uptime
, содержащий только два значения:
Время работы в секундах
Простой в секундах
Примечание: если вы используете более одного ядра, второе значение - это счетчик простоя против всех ядер.
Я написал демо, используя бесконечный HTML там:
или простой монитор:
Пожалуйста, rtfm: man proc
/proc/stat
переменный файл
Первые строки в /proc/stat
держите счетчики для процессора и каждого ядра.
head -n3 /proc/stat
cpu 1500160 13226 337809 16064648 1475420 34 16142 0 0 0
cpu0 747501 6569 168513 8022626 742061 25 14478 0 0 0
cpu1 752659 6656 169296 8042022 733359 9 1664 0 0 0
Где 4-й счетчик idle time counter
,
в man proc
:
man proc | sed '/proc\/stat/,+19p;d'
/proc/stat
kernel/system statistics. Varies with architecture. Common
entries include:
cpu 3357 0 4313 1362393
The amount of time, measured in units of USER_HZ
(1/100ths of a second on most architectures, use
sysconf(_SC_CLK_TCK) to obtain the right value), that the
system spent in various states:
user (1) Time spent in user mode.
nice (2) Time spent in user mode with low priority
(nice).
system (3) Time spent in system mode.
idle (4) Time spent in the idle task. This value
should be USER_HZ times the second entry in the
/proc/uptime pseudo-file.
Для этого есть еще один бесконечный HTML- скрипт: