【发布时间】:2018-12-10 10:32:51
【问题描述】:
我想获取给定时刻所有 CPU 内核的当前频率。
当我这样做时:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
我得到以下值:
803808
900124
900007
900040
900031
900025
900003
900005
它们是否不同,因为每个内核的工作频率略有不同?还是因为读取不同文件之间有一定的时间,对应不同的内核?
在 Linux 中一次读取所有 CPU 内核频率的正确方法是什么? (C 或 BASH)
【问题讨论】:
-
它们略有不同,因为省电。您的操作系统会降低 CPU 速度以节省能源。
-
为什么以完全相同的微秒读取它们很重要?
-
我同意上面的@KamilCuk。在 C 语言中,您可以通过首先打开伪文件来最小化任何时间差异,然后使用
read(2)从它们读取到足够大的缓冲区,例如每次读取 32 个字节,并仅在读取后解析它们。这样,任何时间差异都可以忽略不计,在典型情况下实际上是系统调用成本的顺序(因为这些是 sysfs 属性);您可以放心地将频率视为“并发快照”。