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