手动设置 CPU 的 TSC 值

手动设置 CPU 的 TSC 值

在我的系统上Ubuntu 16.04.1使用内核4.13.0-36检测到以下 TSC 频率:

dmesg | grep MHz:

[ 0.004000] tsc: Detected 1800.000 MHz processor

我有一个英特尔 i5-8250U KabyLake基本频率为 1.6 GHz 的 CPU:

https://ark.intel.com/products/124967

命令lscpu显示:

Model name:            Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
Stepping:              10
CPU MHz:               1800.000
CPU max MHz:           1600,0000
CPU min MHz:           400,0000
BogoMIPS:              3600.00

如果我将 CPU 频率固定为 1.6 GHz 并运行

watch -n1 cat /sys/devices/system/cpu/cpufreq/policy*/scaling_cur_freq

我得到的频率接近 1.6GHz:

1600789
1600084
1599992
1600058

而另一个工具cpufreq-aperf同时显示:

000 1408000         00 sec 006 ms   00 sec 993 ms   00
001 1408000         00 sec 003 ms   00 sec 996 ms   00
002 1408000         00 sec 005 ms   00 sec 994 ms   00
003 1408000         00 sec 005 ms   00 sec 994 ms   00

实际上,我甚至不在乎,但我正在测量一些算法的性能,这会导致错误的值:

  • 算法的 C/B 值总是比已知参考值高 11-13%

  • Intel vTune 告诉我我的 CPU 频率比是 0.886

  • 产量cpufreq-aperf与含量之间的百分比差异scaling_cur_frequency也约为 88.6%

所以我猜测这是由于错误的 TSC 值造成的。

有没有办法在 Ubuntu 中手动设置检测到的 TSC / CPU MHz 值?


顺便说一句,我猜这是一个由硬件或英特尔引起的错误/错误,因为 Windows 也在任务管理器中报告了错误的基本频率。

相关内容