问题 :
几个月前,我买了一台新的 MSI 游戏笔记本电脑(GP76 Leopard,配备 Intel Core i7-10870H 和 Nvidia RTX 3070)。
然而,从一开始,我就遇到了一个非常烦人的情况:CPU 频繁发疯,因此风扇会无缘无故地运转。
解决方法:
我通过简单地禁用解决了这个问题英特尔睿频加速技术 :
echo 1 >/sys/devices/system/cpu/intel_pstate/no_turbo
turbostat --Summary --show Busy%,Bzy_MHz,IRQ,PkgWatt,PkgTmp,RAMWatt,GFXWatt,CorWatt --interval 6
以下是在执行要求不高的同一项任务时禁用/启用 Turbo Boost的两个日志输出。
Turbo Boost 已禁用:
turbostat version 20.09.30 - Len Brown <[email protected]>
CPUID(0): GenuineIntel 0x16 CPUID levels; 0x80000008 xlevels; family:model:stepping 0x6:a5:2 (6:165:2)
CPUID(1): SSE3 MONITOR - EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, No-HWPpkg, EPB
cpu2: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): SGX
cpu2: MSR_IA32_FEATURE_CONTROL: 0x00020005 (Locked )
CPUID(0x15): eax_crystal: 2 ebx_tsc: 184 ecx_crystal_hz: 0
TSC: 2208 MHz (24000000 Hz * 184 / 2 / 1000000)
CPUID(0x16): base_mhz: 2200 max_mhz: 5000 bus_mhz: 100
cpu2: MSR_MISC_PWR_MGMT: 0x00401cc0 (ENable-EIST_Coordination DISable-EPB DISable-OOB)
RAPL: 5825 sec. Joule Counter Range, at 45 Watts
cpu2: MSR_PLATFORM_INFO: 0x8083bf1011600
8 * 100.0 = 800.0 MHz max efficiency frequency
22 * 100.0 = 2200.0 MHz base frequency
cpu2: MSR_IA32_POWER_CTL: 0x003c005f (C1E auto-promotion: ENabled)
cpu2: MSR_TURBO_RATIO_LIMIT: 0x292b2c2d2e2f3132
41 * 100.0 = 4100.0 MHz max turbo 8 active cores
43 * 100.0 = 4300.0 MHz max turbo 7 active cores
44 * 100.0 = 4400.0 MHz max turbo 6 active cores
45 * 100.0 = 4500.0 MHz max turbo 5 active cores
46 * 100.0 = 4600.0 MHz max turbo 4 active cores
47 * 100.0 = 4700.0 MHz max turbo 3 active cores
49 * 100.0 = 4900.0 MHz max turbo 2 active cores
50 * 100.0 = 5000.0 MHz max turbo 1 active cores
cpu2: MSR_CONFIG_TDP_NOMINAL: 0x00000016 (base_ratio=22)
cpu2: MSR_CONFIG_TDP_LEVEL_1: 0x00120118 (PKG_MIN_PWR_LVL1=0 PKG_MAX_PWR_LVL1=0 LVL1_RATIO=18 PKG_TDP_LVL1=280)
cpu2: MSR_CONFIG_TDP_LEVEL_2: 0x00000000 ()
cpu2: MSR_CONFIG_TDP_CONTROL: 0x00000000 ( lock=0)
cpu2: MSR_TURBO_ACTIVATION_RATIO: 0x00000015 (MAX_NON_TURBO_RATIO=21 lock=0)
cpu2: MSR_PKG_CST_CONFIG_CONTROL: 0x1e008008 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu2: POLL: CPUIDLE CORE POLL IDLE
cpu2: C1ACPI: ACPI FFH MWAIT 0x0
cpu2: C2ACPI: ACPI FFH MWAIT 0x33
cpu2: C3ACPI: ACPI FFH MWAIT 0x60
cpu2: cpufreq driver: intel_pstate
cpu2: cpufreq governor: powersave
cpufreq intel_pstate no_turbo: 1
cpu2: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x01081632 (high 50 guar 22 eff 8 low 1)
cpu0: MSR_HWP_REQUEST: 0x80001608 (min 8 max 22 des 0 epp 0x80 window 0x0 pkg 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000000 (Dis_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000000 (No-Guaranteed_Perf_Change, No-Excursion_Min)
cpu0: EPB: 6 (balanced)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x00000168 (45 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x43864000df8640 (UNlocked)
cpu0: PKG Limit #1: ENabled (200.000000 Watts, 56.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (200.000000 Watts, 0.002441* sec, clamp ENabled)
cpu0: MSR_DRAM_POWER_LIMIT: 0x5400de00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 0
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 0
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x05640000 (100 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88380000 (44 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x00000003 (100 C, 100 C)
cpu2: MSR_PKGC3_IRTL: 0x0000884e (valid, 79872 ns)
cpu2: MSR_PKGC6_IRTL: 0x00008876 (valid, 120832 ns)
cpu2: MSR_PKGC7_IRTL: 0x00008894 (valid, 151552 ns)
cpu2: MSR_PKGC8_IRTL: 0x000088fa (valid, 256000 ns)
cpu2: MSR_PKGC9_IRTL: 0x0000894c (valid, 339968 ns)
cpu2: MSR_PKGC10_IRTL: 0x00008bf2 (valid, 1034240 ns)
Busy% Bzy_MHz IRQ PkgTmp PkgWatt CorWatt GFXWatt RAMWatt
3.50 2034 6940 44 6.56 1.70 0.00 0.76
3.55 1446 9321 45 4.96 1.08 0.00 0.90
4.60 1361 11377 45 5.07 1.29 0.00 1.02
6.91 2080 17822 50 7.85 3.26 0.00 0.85
6.84 2196 10866 50 9.36 3.72 0.00 0.85
7.01 2185 11353 50 8.50 3.79 0.00 0.84
7.27 2196 13078 50 8.80 3.96 0.00 0.84
7.36 2200 10385 49 10.00 4.12 0.00 0.84
7.27 2200 11124 49 7.43 4.17 0.00 0.84
7.24 2200 10872 49 7.37 4.11 0.00 0.84
7.27 2200 10866 50 7.34 4.08 0.00 0.84
7.25 2186 10891 50 7.21 3.95 0.00 0.84
7.29 2200 11188 50 7.27 4.01 0.00 0.84
7.24 2200 11702 49 7.30 4.03 0.00 0.84
7.28 2200 11692 50 7.35 4.08 0.00 0.84
7.26 2200 11515 50 7.31 4.05 0.00 0.84
7.26 2200 11103 50 7.32 4.05 0.00 0.84
7.35 2200 13125 50 7.38 4.12 0.00 0.84
7.62 2200 18003 50 7.56 4.29 0.00 0.85
7.15 2145 14333 47 7.13 3.85 0.00 0.86
1.64 1839 4533 45 6.88 0.68 0.00 0.76
1.45 1830 2615 46 7.60 0.58 0.00 0.74
之前 (启用 Turbo Boost) 时:
turbostat version 20.09.30 - Len Brown <[email protected]>
CPUID(0): GenuineIntel 0x16 CPUID levels; 0x80000008 xlevels; family:model:stepping 0x6:a5:2 (6:165:2)
CPUID(1): SSE3 MONITOR - EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, No-HWPpkg, EPB
cpu10: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): SGX
cpu10: MSR_IA32_FEATURE_CONTROL: 0x00020005 (Locked )
CPUID(0x15): eax_crystal: 2 ebx_tsc: 184 ecx_crystal_hz: 0
TSC: 2208 MHz (24000000 Hz * 184 / 2 / 1000000)
CPUID(0x16): base_mhz: 2200 max_mhz: 5000 bus_mhz: 100
cpu10: MSR_MISC_PWR_MGMT: 0x00401cc0 (ENable-EIST_Coordination DISable-EPB DISable-OOB)
RAPL: 5825 sec. Joule Counter Range, at 45 Watts
cpu10: MSR_PLATFORM_INFO: 0x8083bf1011600
8 * 100.0 = 800.0 MHz max efficiency frequency
22 * 100.0 = 2200.0 MHz base frequency
cpu10: MSR_IA32_POWER_CTL: 0x003c005f (C1E auto-promotion: ENabled)
cpu10: MSR_TURBO_RATIO_LIMIT: 0x292b2c2d2e2f3132
41 * 100.0 = 4100.0 MHz max turbo 8 active cores
43 * 100.0 = 4300.0 MHz max turbo 7 active cores
44 * 100.0 = 4400.0 MHz max turbo 6 active cores
45 * 100.0 = 4500.0 MHz max turbo 5 active cores
46 * 100.0 = 4600.0 MHz max turbo 4 active cores
47 * 100.0 = 4700.0 MHz max turbo 3 active cores
49 * 100.0 = 4900.0 MHz max turbo 2 active cores
50 * 100.0 = 5000.0 MHz max turbo 1 active cores
cpu10: MSR_CONFIG_TDP_NOMINAL: 0x00000016 (base_ratio=22)
cpu10: MSR_CONFIG_TDP_LEVEL_1: 0x00120118 (PKG_MIN_PWR_LVL1=0 PKG_MAX_PWR_LVL1=0 LVL1_RATIO=18 PKG_TDP_LVL1=280)
cpu10: MSR_CONFIG_TDP_LEVEL_2: 0x00000000 ()
cpu10: MSR_CONFIG_TDP_CONTROL: 0x00000000 ( lock=0)
cpu10: MSR_TURBO_ACTIVATION_RATIO: 0x00000015 (MAX_NON_TURBO_RATIO=21 lock=0)
cpu10: MSR_PKG_CST_CONFIG_CONTROL: 0x1e008008 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu10: POLL: CPUIDLE CORE POLL IDLE
cpu10: C1ACPI: ACPI FFH MWAIT 0x0
cpu10: C2ACPI: ACPI FFH MWAIT 0x33
cpu10: C3ACPI: ACPI FFH MWAIT 0x60
cpu10: cpufreq driver: intel_pstate
cpu10: cpufreq governor: powersave
cpufreq intel_pstate no_turbo: 0
cpu10: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x01081632 (high 50 guar 22 eff 8 low 1)
cpu0: MSR_HWP_REQUEST: 0x80003208 (min 8 max 50 des 0 epp 0x80 window 0x0 pkg 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000000 (Dis_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000000 (No-Guaranteed_Perf_Change, No-Excursion_Min)
cpu0: EPB: 6 (balanced)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x00000168 (45 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x43864000df8640 (UNlocked)
cpu0: PKG Limit #1: ENabled (200.000000 Watts, 56.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (200.000000 Watts, 0.002441* sec, clamp ENabled)
cpu0: MSR_DRAM_POWER_LIMIT: 0x5400de00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 0
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 0
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x05640000 (100 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88370000 (45 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x00000003 (100 C, 100 C)
cpu10: MSR_PKGC3_IRTL: 0x0000884e (valid, 79872 ns)
cpu10: MSR_PKGC6_IRTL: 0x00008876 (valid, 120832 ns)
cpu10: MSR_PKGC7_IRTL: 0x00008894 (valid, 151552 ns)
cpu10: MSR_PKGC8_IRTL: 0x000088fa (valid, 256000 ns)
cpu10: MSR_PKGC9_IRTL: 0x0000894c (valid, 339968 ns)
cpu10: MSR_PKGC10_IRTL: 0x00008bf2 (valid, 1034240 ns)
Busy% Bzy_MHz IRQ PkgTmp PkgWatt CorWatt GFXWatt RAMWatt
1.88 3641 5797 43 10.07 4.34 0.00 0.75
2.61 1697 7673 42 6.49 1.79 0.00 0.88
4.35 2100 15882 68 8.27 4.20 0.00 0.97
5.19 2608 15240 42 11.41 7.50 0.00 0.90
5.45 3552 11849 66 17.01 11.81 0.00 0.88
6.21 4349 11560 77 21.86 17.17 0.00 0.84
7.14 4489 13990 79 26.32 21.18 0.00 0.89
6.48 4621 11100 79 25.58 20.96 0.00 0.84
6.49 4684 10883 81 26.02 21.41 0.00 0.84
6.47 4609 10874 81 25.73 20.99 0.00 0.84
6.45 4388 11430 78 24.04 19.43 0.00 0.85
6.47 4551 11377 76 25.07 20.44 0.00 0.84
6.50 4668 10891 80 25.98 21.25 0.00 0.84
6.43 4433 11053 80 24.43 19.80 0.00 0.85
6.47 4588 11079 79 25.59 20.86 0.00 0.84
6.52 4688 10827 82 26.35 21.61 0.00 0.84
6.52 4689 11453 82 26.27 21.64 0.00 0.84
6.72 4684 18989 76 27.30 22.66 0.00 0.84
6.53 4457 15215 82 26.02 21.28 0.00 0.85
2.97 3515 9289 46 12.27 6.32 0.00 0.82
0.32 942 1432 44 7.17 0.18 0.00 0.73
1.73 3185 2361 45 10.26 3.19 0.00 0.75
效果很好,我的 CPU 非常平静,但是在玩某些游戏时,即使在 2014 年的旧笔记本电脑上一切正常的情况下,我现在也会遇到速度变慢/ FPS 下降的情况。这当然是不可接受的。
我迄今为止的研究:
我在 Windows 上也遇到了同样的问题,当时重新安装后,安装龙中心(仅适用于 Windows、MSI 特定的实用程序)解决了该问题。在挖掘一些信息后,似乎它与 MSI 调用的某个东西有关MSI 变速技术我猜想这与英特尔 SpeedStep。
经过进一步挖掘,它似乎是通过笔记本电脑的嵌入式控制器进行管理的,通过以下方式在 EC 内存地址 0xD2 处写入:
- 位 7 应始终为 1。
- 如果启用了 MSI 移位,则位 6 应为 1,否则为 0。
- 位 5、4、3 未使用(设置为零)。
- 应根据所需的性能级别设置位 2、1、0,如下所示:
- 010:经济(低)
- 001:绿色(中)
- 000:舒适度(高)
- 100:运动(涡轮)
- 011:用户定义
所以我写了一个模块来实现这个功能,但它似乎什么都没改变。我显然漏掉了一些东西,但肯定快了。这是一个简单的模块,它应该将 CPU 性能设置为电池模式,但正如我所说,它不起作用(虽然我远不是一个经验丰富的内核模式编码员,但我认为这里没有大错误,因为我使用类似的代码成功启用/禁用显示超速):
#include <linux/kernel.h>
#include <linux/acpi.h>
#include <linux/module.h>
MODULE_AUTHOR("NovHak <[email protected]>");
MODULE_DESCRIPTION("MSI GP76 ACPI EC fiddler (battery)");
MODULE_LICENSE("GPL");
static int __init acpi_msiecbt_init(void)
{
u8 byte_read;
int err = 0;
err = ec_read(0xd2, &byte_read);
if (err)
{
pr_notice("Read error %d\n", err);
return 0;
}
else
pr_info("Value read : %x\n", byte_read);
byte_read = 0xc2;
err = ec_write(0xd2, byte_read);
if (err)
pr_notice("Write error %d\n", err);
else
pr_info("Value written : %x (battery mode enabled)\n", byte_read);
return 0;
}
static void __exit acpi_msiecbt_exit(void)
{
return;
}
module_init(acpi_msiecbt_init);
module_exit(acpi_msiecbt_exit);
另一种选择当然是直接尝试 CPU MSR 寄存器的一般方法,但我怀疑我可能会有一些惊喜,因为 MSI 通过 EC 这样做可能有原因。
进一步的研究 :
TCC 偏移解决方法:
可以找到参考文档这里,该寄存器在手册第 4 卷中定义:特定型号的寄存器
请注意,不正确的执行可能会导致系统崩溃,甚至损坏硬件
我现在有了另一种解决方法(感谢 Doug Smythies),即通过修改MSR_TEMPERATURE_TARGET
(地址 0x1a2)寄存器来降低 CPU 的温度限制。第 23 至 16 位包含温度目标(以摄氏度为单位),这是 PROCHOT# 信号始终有效的最低温度。可以通过从第 29 至 24 位写入的偏移量来降低此限制。(根据您的系统,如果您不喜欢原始 MSR 写入,该值可能可以在 BIOS 设置中修改)
如何做到这一点:您必须使用rdmsr
和wrmsr
命令:
- 确保安全启动已禁用。否则您将无法对 MSR 寄存器执行原始写入。
- 成为 root 用户,或者准备以通常的方式使用 sudo。
- (可选)执行
rdmsr -d -f 23:16 0x1a2
以获取 CPU 包的温度目标。 - (可选)执行
rdmsr -d -f 29:24 0x1a2
以获取当前 TCC 激活偏移。 - 执行
rdmsr 0x1a2
以获取寄存器的完整内容(十六进制)。假设它是5640000
。第 29 至 24 位是 5 十六进制(十进制 5),第 23 至 16 位是 64 十六进制(十进制 100),因此当前温度限制为 100-5=95°C。假设您想将温度限制降低到 75°C,因此偏移量为 25°C(十六进制 19)。那么寄存器的新值(十六进制)应该是 19640000。 - 执行
wrmsr 0x1a2 0x19640000
。 - 现在目标温度是 75°C。
虽然它运行良好,风扇更安静,而且我没有遇到速度变慢的情况,但这只是一种解决方法,因为我的 CPU 在整个游戏过程中保持在 75°C,考虑到任务,这仍然太热了。