我想知道Linux系统上的TSC频率。从/ proc / cpuinfo中读取,在“型号名称”和“ cpu MHz”行中获得了不同的频率。例如,在具有4个HT内核的i7内核中,我得到了:
model name : Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz
cpu MHz : 1600.000
哪个是正确的TSC频率? 3.4 GHz或1.6 GHz?
我只是假设使用新的处理器,因此可变的TSC频率不是问题。
“ cpu MHz”是处理器的当前频率吗?我的意思是,这个值可以根据CPU负载而变化吗?
编辑:我编写了一个简单的程序来计算TSC频率(使用用time()测量的长时间),并在3.4 GHz机器中获得3502 MHz(大约)。因此,要么Linux time()函数不是非常精确,要么TSC比声称的3.4 GHz更快。
所以,有人知道/ proc / cpuinfo是否可靠吗?
以下链接下的问题完全相同:测得的tsc 3502 cpu频率3400Mhz
https://software.intel.com/en-us/forums/topic/284137
通过在BIOS中关闭自动超频来解决
在我的服务器上:
$ cat /proc/cpuinfo | grep "model name\|cpu MHz"
model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
cpu MHz : 2699.804
2.50GHz是TSC频率,而2699.804是当前频率。
您也可以使用turbostat
获取TSC频率和当前频率。
Bzy_MHz CPU闲置(即处于“ c0”状态)时的平均时钟速率。
TSC_MHz TSC在整个时间间隔内运行的平均MHz。
https://manpages.debian.org/testing/linux-cpupower/turbostat.8.en.html
$ sudo turbostat --interval 1
CPU Avg_MHz %Busy Bzy_MHz TSC_MHz CoreTmp PkgTmp
- 2 0.07 2671 2501 48 48
0 4 0.15 2703 2502 44 46
48 0 0.00 2644 2502
1 3 0.13 2703 2502 44
49 0 0.00 2569 2502
2 1 0.05 2700 2502 45
50 0 0.01 2670 2502
3 1 0.05 2707 2502 44
Is "cpu MHz" the current frequency of the processor? I mean, Can this value change according to the CPU load?
是,cpu MHz
是该内核的当前频率。 3.40GHz是制造商指定的最大频率(可以通过超频获得更高的频率)。
工作频率的变化称为CPU频率缩放。它使操作系统可以向上或向下扩展CPU频率,以节省电量。可以根据系统负载自动缩放CPU频率,以响应ACPI事件,也可以通过用户空间程序手动缩放。
希望这会有所帮助。