私が使う lscpu | grep 'MHz'
クロック速度を取得します。このコマンドを呼び出しているメソッドに基づいて、異なる結果が得られます。
方法1:端末に入力するCPU MHz: 1200.000
方法2:test.shというスクリプトにカプセル化する
スクリプトコード:
#! /bin/bash
cpu=$(lscpu | grep 'MHz')
echo $cpu
次に、ターミナルで
$ chmod +x test.sh
$ ./test.sh
出力:CPU MHz: 1200.000
ここまでは順調ですね。しかし今、方法3:test.shのGeanyで「runor viewcurrentfile」を押す。出力:CPU MHz: 2200.000
方法4:test.shを呼び出すtest.pyというpythonスクリプトを作成します。
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を実行しています。
ありがとう:-)。
これは偶然です。システムが現在の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ガバナーは、使用する頻度を決定します。 Linuxカーネルの ドキュメント を参照して、CPUガバナーが最適であるかどうかを判断してください。
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "powersave" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
最近のほとんどのCPUは、クロック周波数を調整できます。 Linuxのデフォルトのガバナーは「オンデマンド」であり、アイドル時に電力を節約するためにクロック速度を低く保ち、必要なときに作業を行うために速度を上げます。
https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt を参照してください。