Как проверить HZ в терминале?

Я видел это http://kaasxxx.wordpress.com/2008/01/22/linux-hz-checker/ Но сценарий, похоже, не работает. Кто-нибудь знает простой способ проверить "HZ" в терминале в Linux?

Ответ 1

Нет единообразного ответа на эти вопросы, так как в некоторых случаях ваше ядро ​​может быть скомпилировано "без отметки" и вообще не использовать регулярное прерывание таймера. Но если вы используете традиционное ядро ​​и традиционный дистрибутив, вы можете найти текущий файл ядра .config под /boot с чем-то вроде grep 'CONFIG_HZ=' /boot/config-$(uname -r).

Ответ 2

Значение HZ можно определить так:

$ getconf CLK_TCK
100

Любая из опций времени компиляции работающего ядра может быть освещена с помощью getconf. Имейте в виду, что HZ настраивается:

$ man 7 time

Значение HZ зависит от версии ядра и аппаратных платформ. На i386     Ситуация следующая: на ядрах вплоть до 2.4.x включительно HZ был 100     давая значение jiffy 0,01 секунды; начиная с 2.6.0, HZ был повышен до     1000, что дает мгновение 0,001 секунды. Начиная с ядра 2.6.13, значение HZ является     параметр конфигурации ядра и может быть 100, 250 (по умолчанию) или 1000,     получая значение jiffies соответственно 0,01, 0,004 или 0,001 секунды. Начиная с ядра 2.6.20, доступна дополнительная частота: 300, число, которое     делит равномерно для общих частот видеокадров (PAL, 25 Гц; NTSC, 30 Гц).

Системный вызов times (2) является особым случаем. Он сообщает время с гранулярностью, определенной константой ядра USER_HZ. Приложения пользовательского пространства могут определить значение этой константы с помощью sysconf (_SC_CLK_TCK).

Как обычно, вам может понадобиться обрезать бит _SC_ имени переменной, показанного на справочных страницах, при запросе об этом с помощью getconf.

Ответ 3

Существует много разных подходов, чтобы получить подсказку о том, какие у вас настройки. В некоторых одноядерных системах этот трюк удобен:

/ # cat /proc/interrupts | grep -i time; sleep 10; cat /proc/interrupts | grep time
 16:   10404858      INTC  68 Level     gp_timer
 16:   10514798      INTC  68 Level     gp_timer

Это показывает количество тиков, которые были там в течение 10 секунд. спать. Вот около 100 000. Разделить на 10 дает около 10 000 Гц.

Это может запутаться в многоядерных системах, так как это будет основной список.

Другой вариант - проверить, можете ли вы получить исходную конфигурацию ядра. Он будет храниться в

/proc/config.gz

Распакуйте его и откройте файл. Найдите части, похожие на

CONFIG_HZ_FIXED=0
# CONFIG_HZ_100 is not set
# CONFIG_HZ_200 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_500 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ_10000=y
CONFIG_HZ=10000
CONFIG_SCHED_HRTICK=y

Просто чтобы предупредить вас; 10'000 отключается от обычных настроек. Экспериментальная установка.

Ответ 4

ОБНОВЛЕНИЕ: Отредактированный ответ в соответствии с комментарием Scai.

В Bash расчет "HZ" будет выглядеть, например, как

$ awk '{print$22/'$(tail -n 1 /proc/uptime|cut -d. -f1)"}" /proc/self/stat
100

Означает: возьмите 22-е значение времени безотказной работы и разделите его на время начала процесса "я".

Это обеспечивает только переменную USER_HZ, которая всегда равна 100, а не переменную CONFIG_HZ ядра.

Примечание: в древние времена была только одна переменная HZ. Я думаю, что "#define USER_HZ 100" был введен с разделением. И я также предполагаю, что при использовании терминала/оболочки вы требуете USER_HZ, а не CONFIG_HZ.

Ответ 5

То, что вы ищете, находится внутри конфигурации работающего ядра /proc/config.gz (если оно включено, в большинстве систем оно есть).

Таким образом, вы можете проверить полученную частоту тиков, используя:

zcat /proc/config.gz | grep CONFIG_HZ