我的 MSI 笔记本电脑上的 CPU 包配置不正确,如何重新配置​​?

我的 MSI 笔记本电脑上的 CPU 包配置不正确,如何重新配置​​?

问题 :

几个月前,我买了一台新的 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 设置中修改)

如何做到这一点:您必须使用rdmsrwrmsr命令:

  1. 确保安全启动已禁用。否则您将无法对 MSR 寄存器执行原始写入。
  2. 成为 root 用户,或者准备以通常的方式使用 sudo。
  3. (可选)执行rdmsr -d -f 23:16 0x1a2以获取 CPU 包的温度目标。
  4. (可选)执行rdmsr -d -f 29:24 0x1a2以获取当前 TCC 激活偏移。
  5. 执行rdmsr 0x1a2以获取寄存器的完整内容(十六进制)。假设它是5640000。第 29 至 24 位是 5 十六进制(十进制 5),第 23 至 16 位是 64 十六进制(十进制 100),因此当前温度限制为 100-5=95°C。假设您想将温度限制降低到 75°C,因此偏移量为 25°C(十六进制 19)。那么寄存器的新值(十六进制)应该是 19640000。
  6. 执行wrmsr 0x1a2 0x19640000
  7. 现在目标温度是 75°C。

虽然它运行良好,风扇更安静,而且我没有遇到速度变慢的情况,但这只是一种解决方法,因为我的 CPU 在整个游戏过程中保持在 75°C,考虑到任务,这仍然太热了。

相关内容