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
akaCLOCKS\u PER_SEC
,它似乎总是100,与内核配置无关。这与取决于内核配置的CONFIG_HZ
akaHZ
不同。适用于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
akasysconf(\u-SC\u-CLK\u-TCK)
返回USER\u-HZ
akaCLOCKS\u-PER\u-SEC
,它似乎总是100,与内核配置无关。这与取决于内核配置的CONFIG_HZ
akaHZ
不同。这就是为什么getconf CLK\u TCK
不返回CONFIG\u HZ
值的原因。这是正确的答案。OP应该取消接受accept