我已经看过这个http://kaasxxx.wordpress.com/2008/01/22/linux-hz-checker/ 但是剧本似乎没有用.无论如何知道在Linux终端中检查"HZ"的简单方法吗?
And*_*oss 27
对于这些问题没有统一的答案,因为在某些情况下,你的内核可能会被编译为"无滴答"而根本不会使用常规定时器中断.但是如果你使用传统的内核和传统的发行版,你可以.config在/ boot下找到当前内核的文件grep 'CONFIG_HZ=' /boot/config-$(uname -r).
HZ的值可以像这样确定:
$ getconf CLK_TCK
100
Run Code Online (Sandbox Code Playgroud)
可以使用闪烁运行中的内核的任何编译时选项getconf。请记住,HZ是可配置的:
$人7次
HZ的值因内核版本和硬件平台而异。在i386上,情况如下:在2.4.x(含)以下的内核上,HZ为100,给定的值为0.01秒。从2.6.0开始,HZ提升到1000,产生0.001秒的跳动。从内核2.6.13开始,HZ值是内核配置参数,可以为100、250(默认值)或1000,产生的吉菲斯值分别为0.01、0.004或0.001秒。从内核2.6.20开始,可以使用另一个频率:300,该频率平均分配给普通视频帧速率(PAL,25 HZ; NTSC,30 HZ)。
times(2)系统调用是一个特例。它以内核常量USER_HZ定义的粒度报告时间。用户空间应用程序可以使用sysconf(_SC_CLK_TCK)确定此常数的值。
在通常情况下_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
Run Code Online (Sandbox Code Playgroud)
它显示了10秒内的滴答声数量。睡觉。这里大约10万。除以10得到约10,000 HZ。
在多核系统上,这可能会引起混淆,因为它将是每个核的列表。
另一个选择是检查您是否可以使用原始内核配置。它将存储在
/proc/config.gz
Run Code Online (Sandbox Code Playgroud)
解压缩并打开文件。搜索外观类似于
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
Run Code Online (Sandbox Code Playgroud)
只是警告你;10'000偏离正常设置。实验装置。
更新:根据 scai 的评论编辑答案。
在 Bash 中,“HZ”计算看起来像
$ awk '{print$22/'$(tail -n 1 /proc/uptime|cut -d. -f1)"}" /proc/self/stat
100
Run Code Online (Sandbox Code Playgroud)
意思是:取uptime的第22个值除以“self”进程的开始时间。
这仅提供始终为 100 的 USER_HZ 变量,而不是内核的 CONFIG_HZ 变量。
注:古代只有一个HZ变量。我猜“#define USER_HZ 100”是在拆分中引入的。而且我猜在终端/外壳使用中,您需要 USER_HZ 而不是 CONFIG_HZ。
| 归档时间: |
|
| 查看次数: |
23078 次 |
| 最近记录: |