如何将Ubuntu Linux上的固定PE核混合架构CPU频率设置成?

摘要:在 Ubuntu Linux 上,要把 Intel Core i5(14 代,PE 核混合架构) 的频率尽量固定在 Base~Max Turbo 区间内,可以按下面思路操作。 英特尔CPU信息查看网站:https:www.intel.
在 Ubuntu Linux 上,要把 Intel Core i5(14 代,P/E 核混合架构) 的频率尽量固定在 Base~Max Turbo 区间内,可以按下面思路操作。 英特尔CPU信息查看网站:https://www.intel.com/content/www/us/en/products/sku/236777/intel-core-i5-processor-14400f-20m-cache-up-to-4-70-ghz/specifications.html 一、查看当前调频驱动(先确认环境) 先执行: cpupower frequency-info 重点看: driver: intel_pstate 或 acpi-cpufreq 情况 A(最常见,14 代一般是): driver: intel_pstate 用 intel_pstate 控制(推荐方式) 1️⃣ 设为 performance 模式(防止自动降频) sudo cpupower frequency-set -g performance 检查: cpupower frequency-info | grep governor 应为: governor: performance 2️⃣ 关闭节能模式(允许跑满频) echo 0 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo cat /sys/devices/system/cpu/intel_pstate/no_turbo (0 = 开 Turbo,1 = 禁用 Turbo) 情况 B: driver: acpi-cpufreq 传统方式 二、分别控制 P/E 核(实验级) 1️⃣ 看核心拓扑 lscpu -e 输出 CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ MHZ 0 0 0 0 0:0:0:0 yes 4700.0000 800.0000 2500.0249 1 0 0 0 0:0:0:0 yes 4700.0000 800.0000 2500.0000 2 0 0 1 4:4:1:0 yes 4700.0000 800.0000 2500.0000 3 0 0 1 4:4:1:0 yes 4700.0000 800.0000 2500.0000 4 0 0 2 8:8:2:0 yes 4700.0000 800.0000 2500.0249 5 0 0 2 8:8:2:0 yes 4700.0000 800.0000 2500.0000 6 0 0 3 12:12:3:0 yes 4700.0000 800.0000 2500.0000 7 0 0 3 12:12:3:0 yes 4700.0000 800.0000 2500.0000 8 0 0 4 16:16:4:0 yes 4700.0000 800.0000 2500.0249 9 0 0 4 16:16:4:0 yes 4700.0000 800.0000 2499.9741 10 0 0 5 20:20:5:0 yes 4700.0000 800.0000 2500.0000 11 0 0 5 20:20:5:0 yes 4700.0000 800.0000 2500.0000 12 0 0 6 28:28:7:0 yes 3500.0000 800.0000 1799.9860 13 0 0 7 29:29:7:0 yes 3500.0000 800.0000 1799.9969 14 0 0 8 30:30:7:0 yes 3500.0000 800.0000 1800.0389 15 0 0 9 31:31:7:0 yes 3500.0000 800.0000 1799.9760 2️⃣ 分组锁频(示例) cpu0-11 = P 核 cpu12-15 = E 核 锁定频率范围: P 核: sudo cpupower -c 0-11 frequency-set -d 2.5GHz -u 4.7GHz E 核: sudo cpupower -c 12-15 frequency-set -d 1.8GHz -u 3.5GHz 锁定固定频率(比如Base频率): P 核: sudo cpupower -c 0-11 frequency-set -d 2.5GHz -u 2.5GHz E 核: sudo cpupower -c 12-15 frequency-set -d 1.8GHz -u 1.8GHz ⚠️ 注意: 有些主板 BIOS/内核会无视这个 intel_pstate 下可能不完全生效 三、验证是否生效 实时看每个核心频率(最直观) 推荐方式一(最简单): watch -n1 "grep MHz /proc/cpuinfo" 每 1 秒刷新一次,看到类似: Every 1.0s: grep MHz /proc/cpuinfo cpu MHz : 2500.025 cpu MHz : 800.000 cpu MHz : 2500.000 cpu MHz : 2500.000 cpu MHz : 2500.000 cpu MHz : 2500.000 cpu MHz : 2500.025 cpu MHz : 2500.000 cpu MHz : 2500.025 cpu MHz : 2500.000 cpu MHz : 2500.000 cpu MHz : 2500.000 cpu MHz : 1799.939 cpu MHz : 1455.954 cpu MHz : 1800.040 cpu MHz : 1799.981 没有完全锁定现象和原因 现在其实是“基本成功的”,看数据: 2500 MHz → P核 Base ✅ 1800 MHz → E核 Base ✅ 800 MHz → 空闲睡眠态 ⚠️ 1455 MHz → 中间态 ⚠️ 说明: 👉 你的锁频 80% 成功了 👉 剩下 20% 是省电机制 从上面的输出可以看到,cpu并没有被真正锁定,这是 正常现象 + intel_pstate 的一个“坑点”,不是你没配好。先直接告诉你结论,再解释原因和解决办法。 一句话结论 你看到的: 800 MHz 1455 MHz 👉 不是锁频失败,而是: 在「空闲 / C-State / 省电状态」下, Intel CPU 会短暂进入深度节能模式, 绕过了 cpupower 的最低频率限制。 所以: ✔️ 有负载 → 回到 2.5 / 1.8 GHz ✔️ 没负载 → 掉到 800MHz(省电) 这是设计行为,不是 bug。 二、为什么会这样?(原理) 在 intel_pstate 下,有 3 套机制同时在管你 CPU: 1️⃣ P-State(频率调节)刚才控制的是这个 2.5GHz ~ 4.7GHz 2️⃣ C-State(睡眠状态)现在没关 ❗ C1 / C3 / C6 / C10 ... 进入深度 C-State 后: CPU 几乎“半睡眠”,频率显示会掉到: 800MHz 左右 3️⃣ HWP(硬件自控)14代默认开启 CPU 自己决定省不省电。 现在的状态是: 模块 状态 P-State ✅ 你控制住了 C-State ❌ 还在乱进 HWP ✅ 自动 所以会出现你看到的混合频率。 彻底锁定,不掉到 800MHz(实验模式) ⚠️ 注意:下面操作 = 更耗电 + 更热 + 风扇更响,只建议实验时用。 🔧 方法一(推荐):关闭深度 C-State(最有效),只用方法一一般就可以 for i in /sys/devices/system/cpu/cpu*/cpuidle/state*/disable; do echo 1 | sudo tee $i done 含义: 1 = 禁用该睡眠态 执行后再看: watch -n1 "grep MHz /proc/cpuinfo" 800MHz 基本会消失。 Every 1.0s: grep MHz /proc/cpuinfo cpu MHz : 2499.974 cpu MHz : 2500.000 cpu MHz : 2500.025 cpu MHz : 2500.025 cpu MHz : 2500.025 cpu MHz : 2500.025 cpu MHz : 2465.597 cpu MHz : 2465.567 cpu MHz : 2500.000 cpu MHz : 2500.000 cpu MHz : 2500.000 cpu MHz : 2499.974 cpu MHz : 1800.011 cpu MHz : 1799.984 cpu MHz : 1800.024 cpu MHz : 1799.974 🔧 方法二:禁用 HWP(硬件自动调度) 查看: cat /sys/devices/system/cpu/intel_pstate/hwp_dynamic_boost 如果是 1,关掉: echo 0 | sudo tee /sys/devices/system/cpu/intel_pstate/hwp_dynamic_boost (部分机器没有这个文件) 🔧 方法三(终极):内核启动参数(最干净) 如果你长期做能耗实验,建议用这个。 编辑 grub: sudo nano /etc/default/grub 找到: GRUB_CMDLINE_LINUX_DEFAULT 改成: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=0 processor.max_cstate=1" 更新: sudo update-grub sudo reboot 含义: 参数 作用 intel_idle.max_cstate=0 禁深睡 processor.max_cstate=1 限制睡眠 重启后基本不会再看到 800MHz。 四、完整脚本 #!/bin/bash # ============================== # CPU Mode Switch Script # For Intel 14th Gen Hybrid CPU # ============================== # Check root if [ "$EUID" -ne 0 ]; then echo "❌ Please run as root: sudo ./cpu_mode.sh" exit 1 fi # P/E core ranges (adjust if needed) P_CORES="0-11" E_CORES="12-15" P_BASE="2.5GHz" E_BASE="1.8GHz" P_MAX="4.7GHz" E_MAX="3.5GHz" LOW="800MHz" echo "==============================" echo " CPU Frequency Control Menu" echo "==============================" echo "0 = Power Save (800MHz)" echo "1 = Base Lock (P=2.5G E=1.8G)" echo "2 = Turbo Lock (P=4.7G E=3.5G)" echo "==============================" read -p "Select mode (0/1/2): " MODE # Performance governor cpupower frequency-set -g performance >/dev/null # Enable turbo echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo # Disable C-States for i in /sys/devices/system/cpu/cpu*/cpuidle/state*/disable; do echo 1 > "$i" done case "$MODE" in 0) echo "Power Save Mode (800MHz)" cpupower -c $P_CORES frequency-set -d $LOW -u $LOW cpupower -c $E_CORES frequency-set -d $LOW -u $LOW ;; 1) echo "Base Lock Mode" cpupower -c $P_CORES frequency-set -d $P_BASE -u $P_BASE cpupower -c $E_CORES frequency-set -d $E_BASE -u $E_BASE ;; 2) echo "Turbo Lock Mode" cpupower -c $P_CORES frequency-set -d $P_MAX -u $P_MAX cpupower -c $E_CORES frequency-set -d $E_MAX -u $E_MAX ;; *) echo "❌ Invalid input" exit 1 ;; esac echo echo "✅ Configuration Applied" echo "Monitoring frequency (Ctrl+C to exit)..." echo watch -n1 "grep MHz /proc/cpuinfo" 这个脚本支持 3 种模式: 输入 模式 行为 0 💤 省电模式(800MHz) 全核锁 800MHz 1 ⚙️ Base 锁频 P=2.5GHz / E=1.8GHz 2 🚀 Max 锁频 Turbo 模式 P=4.7GHz / E=3.5GHz 同时会: ✔️ 切 performance governor ✔️ 打开 Turbo ✔️ 关闭 C-State(防 800MHz 漂移) ✔️ 最后实时监控频率 chmod +x cpu_mode.sh sudo ./cpu_mode.sh 然后你会看到: 0 = Power Save 1 = Base Lock 2 = Turbo Lock Select mode: 输入 0 / 1 / 2 回车即可。