Как получить текущее количество мига начиная с перезагрузки в Linux?

Linux /proc/PID/stat списки несколько метрик, которые измеряются в миге. Существует ли способ получить текущий # мига начиная с перезагрузки? Миг я также принимаю, чтобы быть временами секунд значение 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 мигом / второй. Появляется, как будто все строки мига на ЦП эквивалентны (хотя я предполагаю, что они не могли бы быть то, если бы горячее | ondemand ЦП было настроено/заменено). Я думаю, что это дает мне лучшее место для получения по запросу последовательного счетчика мига.

6

3 ответа

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

От страницы Kernel Timer Systems:

Исторически, ядро использовало 100 в качестве значения для Гц, приводя к интервалу мига 10 мс. С 2,4, значение Гц для i386 было изменено на 1 000, приведя к интервалу мига 1 мс. Недавно (2.6.13) ядро изменило Гц для i386 к 250. (1000 считался слишком высоким).

Это перечисляет /proc/timer_list и /proc/timer_stats.

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

4
ответ дан 07.12.2019, 15:59

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

Пример произвел:

[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

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

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

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

2
ответ дан 07.12.2019, 15:59

миг в секунду:

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}'

Объяснение: Это делит миг, так как начальная загрузка нашла в/proc/timer_list к секундам, так как начальная загрузка нашла в/proc/uptime

1
ответ дан 07.12.2019, 15:59

Теги

Похожие вопросы