X86 读取当前非核心频率并设置非核心频率倍增器

X86 读取当前非核心频率并设置非核心频率倍增器,x86,intel,cpu-architecture,msr,X86,Intel,Cpu Architecture,Msr,我正在从事一个项目,该项目需要在Intel Skylake Xeon Gold 6126服务器CPU上读取和设置非核心频率(我需要对另一个基于Haswell的处理器执行相同的操作)。我正在用Linux 4.15.0-134运行Ubuntu。 我已经加载了msr内核模块。 我现在试图首先读取当前的非核心频率。我正在做以下工作: sudo wrmsr 0x700 0x20000000000000000 sudo wrmsr 0x703 0x400000 sudo rdmsr 0x704 我在一个计

我正在从事一个项目,该项目需要在Intel Skylake Xeon Gold 6126服务器CPU上读取和设置非核心频率(我需要对另一个基于Haswell的处理器执行相同的操作)。我正在用Linux 4.15.0-134运行Ubuntu。 我已经加载了
msr
内核模块。 我现在试图首先读取当前的非核心频率。我正在做以下工作:

sudo wrmsr 0x700 0x20000000000000000
sudo wrmsr 0x703 0x400000
sudo rdmsr 0x704
我在一个计算机上找到了上述解决方案

然而,我现在正试图修改最小和最大非核心频率。 为此,我首先尝试读取最小频率(存储以供以后参考):

sudo rdmsr 0x620
上面返回1818。我不知道这个号码是多少。将其前7位称为
最小频率比
(十进制值为24)。但我不确定这个值是多少。此外,根据文档,位8-14存储
最大频率比
。然而,比特8-14也变成了24

有人能解释一下这些值是什么吗?它们是根据哪个值计算的

另外,更改非核心频率是否只需要写入0x620处寄存器的适当位,如是

sudo wrmsr 0x620 0x1c18

如能就上述问题提供任何指导,我将不胜感激。

Read。0x1818值是一对比率值,这意味着它们必须乘以基准时钟才能得到实际的非核心时钟。比率可以相等,以强制非核心使用单一频率。您可能可以降低最小值,但我怀疑您不能提高最大值(即,它是有上限的),但是IDK。基频为100Mhz,根据比值可以猜测(133或166Mhz会给出过高的频率)。您可以简单地写入MSR以缩小。。。。。。频率,但非核心PMU可能会忽略您的请求。这对Haswell也应该有效。感谢uncore PMC,您可以在写入MSR后读回其频率以获得反馈(给它一点时间以最终过渡到新频率)。嗯。对不起,我觉得我不明白。使用0x1818,每个比率值变为24。基于此,非核心频率将为2400Mhz,对吗?我觉得我误解了计算。此外,当我从0x704读取非核心频率时,我得到的值甚至比2400Mhz还要高。例如:32197801070365、32203168839323。这些价值观是什么?根据您提供的链接,这些应该是非核心时钟频率。此外,不幸的是,修改0x620中的比率值似乎不会影响通过读取0x704获得的值。我认为您没有弄错。24是比率,根据该链接,基本时钟似乎是100Mhz。对于非核心频率,2,4Ghz似乎很好。根据文件,在非核心时钟的每个滴答声中,MSR\U U\U PMON\U UCLK\U FIXED\U CTR会增加1,我认为您必须查看由已知时间量分隔的两次读取以获得频率。