如何检查终端中的HZ?

Hao*_*hen 15 linux clock

我已经看过这个http://kaasxxx.wordpress.com/2008/01/22/linux-hz-checker/ 但是剧本似乎没有用.无论如何知道在Linux终端中检查"HZ"的简单方法吗?

And*_*oss 27

对于这些问题没有统一的答案,因为在某些情况下,你的内核可能会被编译为"无滴答"而根本不会使用常规定时器中断.但是如果你使用传统的内核和传统的发行版,你可以.config在/ boot下找到当前内核的文件grep 'CONFIG_HZ=' /boot/config-$(uname -r).


slm*_*slm 8

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

  • `getconf CLK_TCK` 又名 `sysconf(_SC_CLK_TCK)` 返回 `USER_HZ` 又名 `CLOCKS_PER_SEC`,它似乎总是 100 独立于内核配置。这与“CONFIG_HZ”(又名“HZ”)不同,后者取决于内核配置。这就是为什么“getconf CLK_TCK”*不*返回“CONFIG_HZ”值。 (6认同)
  • 这给了我 100,但是运行 `grep 'CONFIG_HZ=' /boot/config-$(uname -r)` 会产生 250。有什么想法吗? (4认同)
  • @GunterSchadow OP没有说,但是这个答案的作者在第一句话中做到了:“HZ的值可以这样确定:”由于后续方法实际上_不_确定HZ的值,所以这个答案是不正确的。-1。 (2认同)

use*_*542 5

有很多方法可以提示您的设置。在某些单核系统上,此技巧很方便:

/ # 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偏离正常设置。实验装置。


rei*_*art 5

更新:根据 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

  • 不,不应该是一样的。这是两个不同的时钟。您建议的计算返回“USER_HZ”,又名“CLOCKS_PER_SEC”,它似乎始终为 100,与内核配置无关。这与“CONFIG_HZ”(又名“HZ”)不同,后者取决于内核配置。 (2认同)