间接调用时 lscpu 输出是否不同?

间接调用时 lscpu 输出是否不同?

我用它lscpu | grep 'MHz'来获取时钟速度。根据我调用此命令的方法,我得到了不同的结果。

方法一:在终端中输入
CPU MHz: 1200.000

方法二:封装在一个名为test.sh的脚本中
脚本代码:

#! /bin/bash
cpu=$(lscpu | grep 'MHz')
echo $cpu

然后,在终端

$ chmod +x test.sh
$ ./test.sh

输出:
CPU MHz: 1200.000

到目前为止一切顺利。但现在,方法 3:在 Geany 中的 test.sh 上点击“运行或查看当前文件”。输出:
CPU MHz: 2200.000

方法四:编写一个python脚本,名为test.py,调用test.sh。Python
脚本代码:

#! /usr/bin/python
import subprocess

def test():
    subprocess.call("./test.sh")

if __name__ == '__main__':
    test()

然后,在终端中:
$ python test.py

输出:
CPU MHz: 2200.000

我尝试了 python 和 python3。两者都给出了相同(错误)的结果。

为什么lscpu间接运行时会给出不同的输出?我该如何修复/规避这个问题?我的代码有问题吗?不管怎样,我正在运行 Ubuntu 13.10。

谢谢 :-)。

答案1

这是一个巧合,是你的系统改变了当前的 CPU 频率。

在终端中使用此命令检查:

watch -n 0 "lscpu | grep 'MHz'"

您将会看到(稍等片刻)系统的 CPU 频率正在切换。

您还可以使用以下命令获取当前的 CPU 频率:

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq

以及您的最大/最小 CPU 频率:

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

改变行为?CPU 调节器决定应使用什么频率。请参阅此文档使用最适合您的 CPU 调节器来决定 Linux 内核。

  • 获得州长:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
  • 更换州长:echo "powersave" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

答案2

大多数现代 CPU 都可以调整其时钟频率。Linux 上的默认调节器是“按需”的,它在空闲时保持较低的时钟速度以节省电量,并在需要时加快速度以进行工作。

https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt

相关内容