【问题标题】:How to read frequency of all CPU cores at once?如何一次读取所有 CPU 内核的频率?
【发布时间】: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 内核频率的正确方法是什么? (CBASH

【问题讨论】:

  • 它们略有不同,因为省电。您的操作系统会降低 CPU 速度以节省能源。
  • 为什么以完全相同的微秒读取它们很重要?
  • 我同意上面的@KamilCuk。在 C 语言中,您可以通过首先打开伪文件来最小化任何时间差异,然后使用 read(2) 从它们读取到足够大的缓冲区,例如每次读取 32 个字节,并仅在读取后解析它们。这样,任何时间差异都可以忽略不计,在典型情况下实际上是系统调用成本的顺序(因为这些是 sysfs 属性);您可以放心地将频率视为“并发快照”。

标签: c linux bash cpu


【解决方案1】:

你可以通过这个 bash 命令读取这个信息:

 cat /proc/cpuinfo

【讨论】:

  • 在我的一台计算机上,/proc/cpuinfo 中未列出 CPU 频率信息 :(
  • lscpu 仅显示一个值(不显示所有核心值)。顺便说一句,您知道这是什么价值吗?意思是?第一个核心?
  • @user2449761 lscpu 显示 CPU 的频率。 scaling_cur_freq 这是当前频率
猜你喜欢
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2014-11-16
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多