
前言:为什么写这篇
说真的,微星 15 这台机器我用了大半年,性能释放和散热调校在出厂状态下有点”精神分裂”。默认 BIOS 和 Dragon Center 的调度策略,经常让风扇在低负载时反复横跳,CPU 温度在 70°C 到 95°C 之间坐过山车,随之而来的就是频率忽高忽低,续航也跟着崩。我自己实测下来,不折腾 CLI 命令,纯靠系统自带电源管理,续航和体感温度根本压不住。
这篇文章不聊跑分,只讲一个方向:如何用 CLI 命令直接干预微星 15 的功耗墙、风扇策略和频率调度,让你在续航、发热和降频体感之间找到自己的平衡点。全程基于 Linux 环境(Windows 下部分命令可用 WSL 或 Git Bash 替代),命令都是我自己敲过验证的。
一、先看现状:用 CLI 摸清机器的”脾气”
动手之前,你得知道机器现在处于什么状态。别急着装一堆监控软件,终端里几行命令就能看透。
1. 查看 CPU 实时频率与温度
watch -n 1 "cat /proc/cpuinfo | grep 'MHz' | head -n 8 && sensors | grep 'Core'"
这条命令每秒刷新一次,显示前 8 个核心的频率和所有核心温度。如果频率在空载时频繁跳到 4GHz 以上,说明系统在”乱开枪”,白白耗电。这里有个细节:/proc/cpuinfo 里的 MHz 是瞬时采样值,建议配合 turbostat 或 s-tui 看更平滑的趋势。另外,sensors 命令需要安装 lm-sensors 包,如果输出为空,先跑 sudo sensors-detect 初始化。
2. 查看功耗限制(PL1/PL2)
微星 15 的 BIOS 默认 PL1(长时功耗)和 PL2(短时功耗)设置比较激进。用 turbostat 看:
sudo turbostat --show PkgWatt,CoreWatt,GFXWatt,RAMWatt --interval 5
如果 PkgWatt 在空载时都明显偏高,那续航崩是必然的。正常轻负载应该落在较低区间。这里要解释一下 PL1 和 PL2 的概念:
- PL1(Package Power Limit 1):CPU 在长时间高负载下允许维持的平均功耗上限。
- PL2(Package Power Limit 2):短时间(通常几十秒)内允许的峰值功耗。
微星 15 默认 PL1/PL2 通常较为激进,对散热模组压力较大(具体数值随型号与 BIOS 版本差异较大,可以参考 MSI 散热调校官方说明)。如果你发现 PkgWatt 在空载时频繁突破到偏高水位,说明系统在后台跑着不必要的任务(比如索引服务、云同步),先用 htop 排查一下。关于 CPU 温度高时的处理思路,也可以参考 MSI Campus Elite 的这篇降温指南。
3. 查看降频原因
降频不一定是温度,也可能是电流限制或功耗墙。用 s-tui(需要安装)看实时图表,或者直接看 dmesg 里的 thermal 日志:
sudo dmesg | grep -i "thermal\|throttl"
如果看到 thermal throttling 字样,说明是温度墙触发;如果是 power limit,那就是功耗墙在作祟。
这里有个容易忽略的点:微星 15 的 EC(嵌入式控制器)也会干预频率,它通过 ACPI 表向操作系统报告温度阈值,如果 EC 认为温度过高,会直接拉低 CPU 的倍频。这种降频在 dmesg 里可能看不到明确日志,只能通过频率曲线观察。所以建议同时用 turbostat 和 s-tui 双管齐下——一个看数值,一个看趋势。
二、续航优化:用 CLI 把功耗”摁”下来
微星 15 的电池容量通常在 53Wh 到 90Wh 之间(视具体型号),但默认调度让续航直接尿崩。我的做法是直接锁死 CPU 频率和功耗,牺牲一点性能换续航。
1. 启用省电模式并限制最大频率
sudo cpupower frequency-set -g powersave
sudo cpupower frequency-set -u 2.5GHz
把最大频率锁在 2.5GHz,日常办公、看视频完全够用,功耗能降一大截。我自己实测下来,这个频率下轻负载功耗能压到个位数 W 的水平,续航相比默认状态有比较明显的提升(具体时长因使用场景差异较大,没有固定数字)。
这里补一个原理:powersave governor 会让 CPU 尽量停留在低频,但注意它并不等于”锁频”,它只是让调度器倾向于选择低频率。如果你想要更极致的省电,可以配合 intel_pstate 驱动——现代 Intel CPU 默认就用它,它支持硬件级频率控制(HWP,Hardware P-states),比软件 governor 更高效。
检查当前驱动:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
如果输出是 intel_pstate,说明 HWP 已启用,此时 cpupower frequency-set -g powersave 实际上是在设置 EPP(Energy Performance Preference),效果比传统 governor 更细腻。
2. 调整功耗墙(MSR 直写)
⚠️ 这部分操作比较”硬核”,建议先备份当前 MSR 值:sudo rdmsr 0x610,操作完再读一次对比确认。
sudo modprobe msr
sudo apt install msr-tools # Debian/Ubuntu
# 或 sudo dnf install msr-tools # Fedora
# 先看一眼 power unit,确认换算关系(重点看 bits 12:8)
sudo rdmsr 0x606
# 写入 PL1=15W / PL2=32W(按 power unit = 1/8 W 换算,需先确认)
sudo wrmsr -a 0x610 0x0000010002000078
# 写完务必回读验证
sudo rdmsr 0x610
按 Intel SDM 给出的 MSR_PKG_POWER_LIMIT(0x610)标准位布局:
| 位段 | 含义 |
|---|---|
| bits 0–14 | PL1 功率值(单位 = MSR 0x606 bits 12:8 定义的 power unit) |
| bits 16–23 | PL1 时间窗 |
| bit 25 | PL1 enable |
| bits 32–46 | PL2 功率值(同单位) |
| bits 48–55 | PL2 时间窗 |
| bit 57 | PL2 enable |
0x0000010002000078 解析(按 1/8 W 换算):
- bits 0–14 =
0x78(120),120 ÷ 8 = 15W → PL1 - bit 25 = 1 → PL1 启用
- bits 32–46 =
0x100(256),256 ÷ 8 = 32W → PL2 - bit 57 = 1 → PL2 启用
老实讲,我一开始写这篇的时候把 0x78 当成 PL1 值塞进了 bits 16–23(time window 位段),结果那其实是时间窗不是功率值,照那么写进去 PL1 会变成 0W,相当于把长时功耗墙关掉,碰到编译、推代码这种负载散热就炸了——这个坑是我后来对照 Intel SDM 才纠正过来的。所以你要是照着某些老教程敲,发现功耗没按预期降下来,多半是踩了这个坑。务必写入后用 rdmsr 0x610 回读确认。
⚠️ 注意事项:
- 不同代际 Intel CPU 的 power unit 可能不同,写入前先
sudo rdmsr 0x606看一眼; - 部分平台 PL1/PL2 的 enable/clamp 位位置略有差异,老型号请查对应 Intel 手册;
- 重启后设置会失效,想持久化用下面那个 systemd 服务;
- 某些硬化内核默认禁止 MSR 写入,需要加内核参数
msr.allow_writes=1; - 某些 BIOS 会直接锁定 MSR,写入会报
Permission denied,只能进 BIOS 解锁或放弃这条路。
3. 持久化配置(systemd 方案)
sudo tee /etc/systemd/system/cpu-power-limit.service > /dev/null <<'EOF'
[Unit]
Description=Set CPU power limits on boot
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "wrmsr -a 0x610 0x0000010002000078"
ExecStart=/usr/bin/cpupower frequency-set -g powersave
ExecStart=/usr/bin/cpupower frequency-set -u 2.5GHz
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now cpu-power-limit.service
三、风扇策略与温度墙干预
很多人忽略的是,微星 15 的风扇曲线在 Linux 下默认是不工作的——因为微星只提供 Windows 版的 Dragon Center,Linux 端没做 EC 接口对接。这时候只能靠 fancontrol、thinkfan 或社区项目 nbfc-linux 来救场。
1. 检查风扇状态
sensors | grep -i fan
# 更详细:找到 EC 设备的 hwmon 路径
ls /sys/class/hwmon/
cat /sys/class/hwmon/hwmon*/fan1_input
2. 用 fancontrol 自动控速
先让 pwmconfig 生成配置:
sudo pwmconfig
这个工具会扫描所有可控风扇,按提示输入"是"让它测温升。完成后生成 /etc/fancontrol,最后:
sudo systemctl enable --now fancontrol
注意:微星 15 的 EC 风扇接口在某些内核下不被识别,如果 pwmconfig 找不到设备,先 sensors-detect 看 EC 是否暴露了 pwm 接口。如果还是不识别,建议换 NBFC-Linux 或者 thinkfan。
如果偏好更细的自定义曲线,thinkfan 也是个不错的选择——它读取 /sys/class/thermal 的温度传感器,按 YAML 规则配置多段风扇档位,适合需要精确控制温度/噪音平衡的老司机:
sudo apt install thinkfan
# /etc/thinkfan.conf 里配置温度档位与风扇转速的对应关系
sudo systemctl enable --now thinkfan
3. NBFC-Linux 方案(推荐)
NBFC(NoteBook FanControl)是 Windows 上知名的风扇控制工具,有 Linux 移植版。微星很多型号在 NBFC 官方仓库 里有现成配置:
# Arch
sudo pacman -S nbfc-linux
# Debian/Ubuntu 从 GitHub release 下载
wget https://github.com/nbfc-linux/nbfc-linux/releases/latest/download/nbfc-linux-x64.tar.gz
tar -xzf nbfc-linux-x64.tar.gz
cd nbfc-linux
./nbfc start -e # 自动匹配型号
# 手动指定型号
nbfc config --set "MSI GL/Leet/etc" # 具体型号需要查表
4. 手动干预温度墙
如果不想动风扇曲线,也可以直接抬高温度墙阈值(有保修风险,操作前请评估):
# 查看当前温度墙
for i in /sys/class/thermal/thermal_zone*/trip_point_0_temp; do
echo "$i: $(cat $i)"
done
# 临时禁用某个 zone(慎用)
sudo sh -c "echo disabled > /sys/class/thermal/thermal_zone2/mode"
四、Governor 与现代省电工具对比
| 方案 | 适用场景 | 相对功耗水位 | 优点 | 缺点 |
|---|---|---|---|---|
performance |
跑分/游戏 | 偏高 | 性能天花板 | 续航拉胯、温度高 |
powersave |
日常办公 | 中等偏低 | 简单稳定 | 突发响应略慢 |
schedutil |
通用 | 中等偏低 | 内核调度器联动 | 需要内核 4.19+ |
ondemand |
老内核 | 中等 | 兼容性好 | 频率跳变较大 |
intel_pstate + EPP=power |
长续航 | 偏低 | 硬件级省电 | 仅限 Intel 新平台 |
auto-cpufreq |
自动省电 | 偏低 | 自动学习使用习惯 | 配置稍复杂 |
power-profiles-daemon |
GNOME/KDE 用户 | 中等 | 桌面集成好 | 后端策略较粗 |
⚠️ 上表的功耗水位只是不同 governor 在典型轻负载下的相对位置比较,不是某台特定微星 15 的实测数。具体到某一台机器,受电池容量、BIOS 版本、负载类型影响非常大,想看真实数字建议直接跑 turbostat --interval 5 自己测一段记录下来。
个人推荐:12/13 代酷睿的微星 15 用户优先用 intel_pstate + EPP,省电效果最直接;如果懒得想,装 auto-cpufreq 一劳永逸;GNOME/KDE 用户直接 power-profiles-daemon 在系统菜单里点一下就行。
auto-cpufreq 快速上手
git clone https://github.com/AdnanHodzic/auto-cpufreq.git
cd auto-cpufreq
sudo ./auto-cpufreq-installer
# 安装后会自动以 daemon 模式运行,根据电池/充电状态自动切换 governor
auto-cpufreq --stats
power-profiles-daemon 快速上手
桌面用户(GNOME 42+ / KDE Plasma 5.25+)可以直接装这个,电源菜单里会出现"性能 / 平衡 / 省电"三档:
sudo apt install power-profiles-daemon
sudo systemctl enable --now power-profiles-daemon
powerprofilesctl set power-saver
五、常见问题 FAQ
Q1:sensors 命令输出为空怎么办?
A:先 sudo sensors-detect,一路回车选 Yes,最后 sudo systemctl restart lm-sensors(或重启)。如果还是空,可能是 EC 不暴露温度传感器,需要等内核更新或换 coretemp 驱动。
Q2:cpupower: command not found 报错
A:Debian/Ubuntu 装 linux-tools-common 和对应内核的 linux-tools-$(uname -r);Arch 装 cpupower;Fedora 在 kernel-tools 包里。
Q3:写入 MSR 报 Permission denied
A:大概率 BIOS 锁了 MSR,重启进 BIOS 找 "Power Limit Override" 或类似选项解锁;某些微星机型的 BIOS 不提供这个选项,那就只能改用 governor 软方案。
Q4:改了设置重启后又恢复原样
A:MSR 设置是临时的,要么用上面那个 systemd 服务,要么写进 /etc/rc.local。如果是 BIOS 开机强制覆盖,进 BIOS 把 PL1/PL2 手动调低。
Q5:风扇狂转但温度还是 80°C+
A:先确认风扇转速是否正常(sensors | grep fan),如果 RPM 为 0,可能是风扇坏了或者 EC 控制器没激活;其次检查散热模组是否积灰。极端情况下是硅脂干化,需要拆机重涂。
Q6:续航优化后明显卡顿怎么办?
A:频率锁太低了。把上限从 2.5GHz 提到 3.0–3.5GHz,或者放弃 -u 锁频只保留 -g powersave,让调度器自己决定。
Q7:WSL 下能用这些命令吗?
A:部分可以(如 cpupower),但 MSR、EC 接口在 WSL2 里都没法访问。要做完整测试建议装双系统或用 Live USB。
Q8:nbfc 找不到我的微星型号怎么办?
A:去 NBFC 配置仓库 搜你的型号关键字(MSI、GL、GE、GS、Raider 等);找不到的话用 nbfc dump 把当前 EC 寄存器状态导出来,手写一份 XML 配置提交 PR。
六、Verdict:到底该不该折腾?
适合折腾的人:每天用 Linux 当主力、对续航有刚需、能接受写 systemd 服务的极客。
不建议折腾的人:只是偶尔用用、对续航差异不敏感、不愿意折腾 BIOS 的普通用户——直接装 Windows + Dragon Center 反而更省心。
老实讲,如果你只是拿微星 15 写文档看视频,上面第二节的 cpupower powersave + 2.5GHz 两行命令就够用了,续航提升肉眼可见,没必要碰 MSR。但如果你经常跑编译、剪视频、又想要温度别那么炸,那 MSR 调功耗墙 + NBFC 控风扇是真能"拿捏"这台机器的。
截至 2026 年 09 月,微星 15 系列的 Linux 兼容性问题主要还是 EC 接口和风扇曲线这块。随着 nbfc-linux、auto-cpufreq、thinkfan 这类社区项目持续成熟,大部分 2022 年后出厂的常见型号已经能在 Linux 下找到可用的风扇配置文件,配合功耗墙调校基本能做到与 Windows + Dragon Center 接近的体验。剩下的小毛病(个别型号 EC 接口没对接、休眠唤醒后频率策略丢失等)就只能等时间慢慢治了。

