6

Linux /proc/PID/stat перечисляет несколько метрик, которые измеряются в несколько секунд. Есть ли способ получить текущее количество jiffies с момента перезагрузки? Jiffies Я также предполагаю, что в секундах умножить значение USER_HZ.

Могу ли я получить это, суммируя первые 4 аргумента в строке cpu в /proc/stat?


ОБНОВЛЕНИЕ:

$ date +"%s.%N" && grep '^jiffies' timer_list
1262103103.162169230
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
$ date +"%s.%N" && grep '^jiffies' timer_list
1262103108.706475051
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351

Дельта между ними составляет почти ровно 250 циклов в секунду. Похоже, что все строки jiffies для каждого процессора эквивалентны (хотя я полагаю, что они могут не совпадать, если бы был установлен / заменен процессор с «горячей» загрузкой). Я думаю, что это дает мне лучшее место, чтобы вытащить постоянный счетчик джиффы.

4 ответа4

4

Технически, на языке компьютера, это длительность 1 такта системного прерывания таймера. Это не абсолют, хотя. Для Linux 2.6.13+ на Intel x86 jiffy составляет 4 мс, но может варьироваться от 1 мс до 10 мс в зависимости от архитектуры и версии ядра.

Со страницы систем таймера ядра :

Исторически, ядро использовало 100 в качестве значения для HZ, получая интервал jiffy 10 мс. При использовании 2.4 значение HZ для i386 было изменено на 1000, с интервалом в 1 мс. Недавно (2.6.13) ядро изменило HZ для i386 на 250. (1000 считалось слишком высоким).

В нем перечислены /proc/timer_list и /proc/timer_stats .

Вы можете активировать timer_stats во время загрузки, а затем cat этот файл для печати статистики.

2

Нет, вам нужна только первая строка. Первая строка объединяет все остальное в других строках процессора.

Пример вывода:

[john@awesome]$cat /proc/stat
cpu  35024984 1771325 94153391 1810948613 2648063 352387 557232
cpu0 13955475 927654 59431476 895791946 1910028 318618 438048
cpu1 21069509 843671 34721915 915156667 738035 33769 119184
intr 1403502159 1138402452 597 0 3 3 0 5 0 1 0 0 0 12315 0 92119425 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57676632 0 0 0 0 0 0 0 115290726 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 21043582666
btime 1252332786
processes 25663823
procs_running 1
procs_blocked 0

Что означает каждый столбец (слева направо):

  • пользователь: обычные процессы, выполняющиеся в пользовательском режиме
  • приятно: приятные процессы, выполняющиеся в пользовательском режиме
  • система: процессы, выполняющиеся в режиме ядра
  • простой: простой
  • iowait: ожидание завершения ввода-вывода
  • IRQ: обслуживание прерываний
  • softirq: обслуживание softirqs

как видите, первый столбец после процессора (процессы пользовательского режима) равен двум числам под ним, сложенным вместе.

1

Jiffies в секунду:

awk 'BEGIN {"cat /proc/timer_list | grep '\''^jiffies'\'' | awk '\''{print $2}'\''" | getline a; "cat /proc/uptime | awk '\''{print $1}'\''" | getline b ;printf "%.4f\n", a/b}'

Объяснение: Он делит jiffies с момента загрузки, найденной в /proc /timer_list, по секундам с момента загрузки, найденной в /proc /uptime

1

В более поздних версиях ядра Linux вы можете запросить /proc/timer_list и узнать количество повторов с момента перезагрузки с каждого процессора, присутствующего в системе. Они должны всегда совпадать.

$ grep -E "^cpu|^jiff" /proc/timer_list
cpu: 0
jiffies: 4299690231
cpu: 1
jiffies: 4299690231

Если вы посмотрите на код позади timer_list.c бит, который печатает выше:

...
...
        P_ns(iowait_sleeptime);
        P(last_jiffies);
        P(next_timer);
        P_ns(idle_expires);
        SEQ_printf(m, "jiffies: %Lu\n",
               (unsigned long long)jiffies);

Обратите внимание, что это unsigned long long .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .