如何监控 VCore 电压

如何监控 VCore 电压

我组装了一台新电脑,为了省钱,我没有买 Windows,所以我第一次尝试使用 Ubuntu 16.04 的 Linux。我知道 lm-sensors 是获取所需信息的标准方法,这些信息实际上只是电压,特别是 VCore。我希望能够监控 VCore 电压以便于超频(因为我的主板不允许固定电压,所以我无法通过自动 VID 监控危险电压)。

我安装了以下相关软件包:lm-sensors(v. 1:3.4.0-2)、libsensors4(v. 3:4.0-2)、libsensors-applet-plugin0(v. 3.0.0+git5-0.1ubuntu1)

CPU是i5-6600K,主板是华擎Z170A-X1/3.1

我运行后sensors-detect发现,它找到的唯一传感器是 coretemp。它被添加到我的模块中,并且它对温度测量很有效。以下是运行传感器的示例输出:

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +47.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:         +46.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:         +47.0°C  (high = +80.0°C, crit = +100.0°C)
Core 2:         +34.0°C  (high = +80.0°C, crit = +100.0°C)
Core 3:         +45.0°C  (high = +80.0°C, crit = +100.0°C)

我很想实现标准行为(更多信息),如图所示这里或者这里

我怀疑需要一个额外的传感器来获取电压,因为大多数指南都显示,sensors-detect这会导致添加更多的模块,而不仅仅是核心温度。在我的例子中,发现了一个未知设备,它怀疑这可能是一个传感器……

Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no): y
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor/ITE'...               No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Nuvoton/Fintek'...               Yes
Found unknown chip with ID 0xd121
    (logical device B has address 0x290, could be sensors)
Probing for Super-I/O at 0x4e/0x4f
Trying family `National Semiconductor/ITE'...               No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Nuvoton/Fintek'...               No
Trying family `ITE'...                                      No

我曾经dmesg查看过内核环形缓冲区中提到的地址 0x290,并发现了这一行,这对我来说基本上是难以理解的,但我把它放在这里供您参考。

[    0.206389] system 00:00: [io  0x0290-0x029f] has been reserved

此外,我还有其他应用程序,它们能够显示的信息有限。例如,I-NEX 有点像 Windows 上的 CPU-Z(如果您知道的话,请推荐一些更好的应用程序),它仅限于基本的 CPUID 内容,例如处理器 ID 字符串、光刻技术、插槽类型、支持的功能等。CPU VCore 和其他字段均未报告任何内容。无论我的 BIOS 超频设置如何,时钟速度、BLCK 速度、倍频器、涡轮时钟都报告为默认值(这是不正确的,因为我可以使用系统监视器监视 CPU 速度)。这类工具可能都依赖于 lm-sensors,我认为这是我的问题的根源,所以这并不奇怪。

我也尝试过使用 WINE 运行 CPU-Z,但结果基本相同:显示基本的 CPUID 信息,但没有显示我正在寻找的更详细的传感器信息。这是在初始化过程中发生错误之后:错误代码 0x2(2)。

这仅仅是主板不受支持的情况吗?如果是这样,是否会添加支持?有没有什么方法可以手动添加支持?有没有 lm-sensors 的替代品?有没有其他方法,例如,手动接近硬件级别并通过 bash 以某种方式访问​​电压?我是否应该尝试重新安装不同的版本/发行版?如果是这样,我是否一定会丢失此安装及其文件?

答案1

您可以使用以下方法监控最新(SNB 及更高版本)英特尔 CPU 上的核心电压:

watch -n1 'echo "scale=2; $(sudo rdmsr 0x198 -u --bitfield 47:32)/8192" | bc'

具体来说:

sudo rdmsr 0x198 -u --bitfield 47:32

这将读取 MSR_PERF_STATUS MSR,并提取十进制的第 32 至 47 位,其中包含核心电压:

来自英特尔 SDM Vol 4

接下来,我们将其bc通过管道传输至除以 8192:

echo "scale=2; $(...)/8192" | bc

指定scale=22 位小数,因为默认值 0 将始终显示 1V!

最后,我们将整个东西传递给watch -n1它,重复执行命令(每秒一次)并显示输出。如果您只想获取电压,则只需要单引号内的部分。


1安装后msr-tools,该命令需要它rdmsr

答案2

Wine 不会让您到达处理器的 ring0。这是可以执行特权指令的地方。

Linux 提供了一个内核模块 msr.ko,允许读取/写入英特尔架构软件开发人员手册中描述的特定型号寄存器。与 AMD 在其 BIOS 和内核开发人员指南中一样

https://software.intel.com/en-us/articles/intel-sdm

http://developer.amd.com/resources/developer-guides-manuals/

对于 6600K,您可能幸运地在其数据表中找到电压信息。将查询 PCI 以获取值。

您将在 MSR 寄存器和 CPUID 指令的帮助下编写算法来获取处理器 Turbo 比率,并使用两个 TSC 读取(按间隔采样)估算 BCLK。

加速频率是比率和基本时钟的乘积

我已经编写了 CoreFreq,它将在 vcore 旁边显示频率和空闲状态。请随意挖掘源代码中的算法:

https://github.com/cyring/CoreFreq

相关内容