Linux 如何检查终端中的HZ?

Linux 如何检查终端中的HZ?,linux,clock,Linux,Clock,我见过这个 但剧本似乎不起作用。无论如何,你知道在Linux终端中检查“HZ”的简单方法吗?这个问题没有统一的答案,因为在某些情况下,你的内核可能被编译为“无滴答”,根本不使用常规的计时器中断。但是,如果您使用的是传统内核和传统发行版,您可以在/boot下找到当前内核的.config文件,类似于grep'config\u HZ='/boot/config-$(uname-r)有许多不同的方法可以获得关于您的设置的提示。 在某些单核系统上,此技巧非常方便: / # cat /proc/interr

我见过这个
但剧本似乎不起作用。无论如何,你知道在Linux终端中检查“HZ”的简单方法吗?

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

有许多不同的方法可以获得关于您的设置的提示。 在某些单核系统上,此技巧非常方便:

/ # 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秒内的滴答声数量。睡觉 这里大约10万美元。除以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远远超出正常设置。实验设置。

更新:根据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”是在拆分时引入的。我还猜想,在终端/外壳使用中,您需要用户\u HZ,而不是配置\u HZ可以这样确定HZ的值:

$ getconf CLK_TCK
100
可以使用
getconf
查看运行内核的任何编译时选项。请记住,HZ是可配置的:

$man 7次

HZ的值因内核版本和硬件平台而异。关于i386 情况如下:在2.4.x及以下的内核上,HZ为100 给出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(\u SC\u CLK\u TCK)确定该常量的值


通常情况下,当使用
getconf
查询时,您可能需要删除手册页中显示的变量名的
\u SC
位(如果启用了,则在大多数系统上是启用的)

因此,您可以使用以下方法检查生成的滴答声频率:

zcat /proc/config.gz | grep CONFIG_HZ

似乎实现这一点的另一种方法是通过检查
cat/proc/sys/kernel/sched\u min\u granularity\ns
来获得调度增量的纳秒级粒度。有关调度程序如何工作的更多详细信息,请查看此页面:

也许这会有所帮助:scai确实对一些关于配置和用户混淆的答案发表了重要评论。根据这一点,我更新了我的答案,并添加了一个注释。终端使用的历史和意义。字段22是进程的开始时间(以时钟滴答为单位)/proc/uptime具有系统正常运行时间的信息。本质上,reichhart说CONFIG_HZ将是
开始后的时钟滴答声(滴答声)/开始后的时间(秒)
单位是
滴答声/秒
在大多数情况下,这应该是每秒100滴答声。我尝试了这个方法,得到了
HZ=100
结果,但如果我使用
提取ikconfig
,那么我会看到
CONFIG_HZ=300
。这些描述的是不同的东西吗?不,应该是一样的。根据这一点,工具将从内核映像中提取设置。我能给您的唯一解释是,您正在检查一个与当前运行的内核映像不同的内核映像。我的“解决方案”是直截了当的:您可以自己检查/proc/uptime和/proc/XXXX/stat(XXXX最近启动)并手动除以。不,它不应该是相同的。这是两个不同的钟。您建议的计算返回
USER_HZ
aka
CLOCKS\u PER_SEC
,它似乎总是100,与内核配置无关。这与取决于内核配置的
CONFIG_HZ
aka
HZ
不同。适用于Ubuntu 16.04。您实际上没有检查正在运行的内核-只是一个配置文件,可能是当前正在运行的内核中的配置文件。在某些虚拟化环境中,这是行不通的。因此,“在传统内核和传统发行版上”。通常,内核的kconfig在运行时不可用。因此,/proc/config.gz的adb pull运行良好。谢谢我想编辑,但建议的编辑队列已满。执行第二个选项的方法是使用
gunzip/proc/config.gz-c | grep config_HZ
这给了我100,但运行
grep'config_HZ='/boot/config-$(uname-r)
会产生250。有什么想法吗?
getconf-CLK\u-TCK
aka
sysconf(\u-SC\u-CLK\u-TCK)
返回
USER\u-HZ
aka
CLOCKS\u-PER\u-SEC
,它似乎总是100,与内核配置无关。这与取决于内核配置的
CONFIG_HZ
aka
HZ
不同。这就是为什么
getconf CLK\u TCK
不返回
CONFIG\u HZ
值的原因。这是正确的答案。OP应该取消接受accept