我看过这个http://kaasxxx.wordpress.com/2008/01/22/linux-hz-checker/ 但脚本似乎不起作用。无论如何知道在Linux终端中检查“HZ”的简单方法吗?
6 回答
这个问题没有统一的答案,因为在某些情况下,您的内核可能是“无滴答”编译的,根本不使用常规定时器中断。但是,如果您使用的是传统内核和传统发行版,则可以.config
在 /boot 下找到当前内核的文件,其中包含grep 'CONFIG_HZ=' /boot/config-$(uname -r)
.
HZ 的值可以这样确定:
$ getconf CLK_TCK
100
运行内核的任何编译时选项都可以使用getconf
. 请记住,HZ 是可配置的:
$ 男人 7 次
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 HZ;NTSC,30 HZ)。
times(2) 系统调用是一个特例。它以内核常量 USER_HZ 定义的粒度报告时间。用户空间应用程序可以使用 sysconf(_SC_CLK_TCK) 确定该常量的 c 值。
通常情况下,您可能需要在_SC_
使用getconf
.
有许多不同的方法可以提示您的设置是什么。在一些单核系统上,这个技巧很方便:
/ # 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 HZ。
这在多核系统上可能会让人感到困惑,因为它将是一个每个核心的列表。
另一种选择是检查您是否可以掌握原始内核配置。它将被存储在
/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 与正常设置相差甚远。实验装置。
更新:根据 scai 的评论编辑答案。
在 Bash 中,“HZ”计算看起来像
$ awk '{print$22/'$(tail -n 1 /proc/uptime|cut -d. -f1)"}" /proc/self/stat
100
意思是:取uptime的第22个值,除以“self”进程的开始时间。
这仅提供始终为 100 的 USER_HZ 变量,而不是内核的 CONFIG_HZ 变量。
注:古代只有一个HZ 变量。我猜想“#define USER_HZ 100”是在拆分时引入的。而且我还猜想在终端/外壳使用中,您需要 USER_HZ 而不是 CONFIG_HZ。
您正在寻找的是正在运行的内核的配置内部/proc/config.gz
(如果已启用,则在大多数系统上都是如此)。
因此,您可以使用以下方法检查生成的滴答率:
zcat /proc/config.gz | grep CONFIG_HZ
似乎实现同样事情的另一种方法是通过检查cat /proc/sys/kernel/sched_min_granularity_ns
以获取调度增量的纳秒粒度。有关调度程序如何工作的更多详细信息,请查看此页面:https ://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txt