嘿,朋友!你是不是刚用 rpm-ostree upgrade 升完级,满怀期待地点开电脑,结果发现——嚯,这卡顿感比之前还明显?电池掉电像漏水的水龙头,风扇呼呼转,甚至有时候鼠标都跟着“思考人生”?
别急,这真不是你的机器老了,也不是 Silverblue 这个系统本身有问题。相反,Silverblue 作为一个immutable(不可变)的原子化桌面系统,它的内核和基础组件是受保护的,稳定性其实很高。但问题往往出在“升级后的默认行为与你硬件/使用习惯的错位”,以及“一些关键的服务没有因为你升级了内核或软件栈而自动优化”。
作为一名跟 Linux 打了多年交道的老手,我来带你一步步排查、调整,把性能找回来,把续航救回来。咱们不玩虚的,直接上手。
第一步:先搞清楚“卡顿”到底卡在哪里?
在动手改参数之前,你得先知道“敌人”是谁。是 CPU 占用率高?是磁盘 I/O 打满?还是内存交换(Swap)太频繁?
打开终端,运行这几个命令,心里有个底:
# 查看实时资源占用(按 q 退出)
htop
# 查看系统最近的日志,特别是 kernel 和 systemd 的错误
journalctl -p warning..err -b -1 --no-pager | tail -n 50
# 查看当前内核版本和加载的模块
uname -r
lsmod | grep -E '^(intel_power|nvidia|amdgpu|radeon)' # 根据你的硬件调整
# 查看电源管理状态
turbostat --interval 5 --summary
常见症状与可能原因
| 症状 | 可能原因 |
|---|---|
| 整体界面响应慢,鼠标移动有延迟 | CPU 频率调节策略太保守,或 Intel P-State 驱动未正确加载 |
| 磁盘占用 100%,系统假死 | systemd 服务在开机后频繁写日志或检查更新,或 zram 配置不当 |
| 电池掉电快,即使空闲 | CPU 未进入深度休眠状态,或后台服务(如 flatpak 更新、系统索引)活跃 |
| 核显性能不足,视频卡顿 | GPU 频率未锁定,或用户空间驱动未正确启用 |
第二步:优化 CPU 电源管理——这是提升续航和响应速度的关键
Fedora 默认使用 ondemand 或 schedutil 作为 CPU 频率调节器。但 schedutil 在某些新内核上可能出现响应迟滞。我们可以切换到更积极的 performance 模式用于插电场景,用 powersave 用于电池场景。
2.1 安装 power-profiles-daemon(如果还没装)
Silverblue 默认可能已经安装了,但保险起见:
rpm-ostree install power-profiles-daemon
升级完成后重启。
然后检查状态:
powerprofilesctl get
powerprofilesctl list
默认应该是 balanced。你可以尝试切换到 power-saver 看看续航是否有提升,或者切换到 performance 测试流畅度。
2.2 手动调整 CPU 频率 governor(高级玩法)
如果你觉得 power-profiles-daemon 太笨重,可以手动控制:
# 查看当前每个 CPU 核心的 governor
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 临时切换所有核心到 performance 模式(需要 root)
sudo sh -c 'echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor'
# 或者切换到 schedutil(更智能的调度)
sudo sh -c 'echo schedutil > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor'
注意:这些设置在重启后会重置。要持久化,可以创建一个 systemd 服务,或者使用
cpupower。
2.3 使用 cpupower 进行更精细的控制
rpm-ostree install cpupower
# 同样需要重启或重新绑定驱动
# 查看支持的 governors
cpupower frequency-info --governors
# 设置默认 governor 为 powersave(省电)
sudo cpupower frequency-set -g powersave
2.4 Intel 处理器特别优化:intel_pstate 驱动
对于 Intel CPU,确保 intel_pstate 驱动正在工作,而不是旧的 acpi-cpufreq:
# 查看内核参数
cat /proc/cmdline | grep -o 'processor\.[^ ]*'
你应该看到类似 intel_pstate=disable 或没有这个参数。如果看到了 intel_pstate=disable,说明你用的是旧驱动,性能会更差。
修改方法:在 Silverblue 中,你需要用 rpm-ostree kargs 来添加内核参数:
# 移除 intel_pstate=disable(如果存在)
rpm-ostree kargs --delete=intel_pstate=disable
# 或者显式启用 intel_pstate(通常默认就是启用的)
rpm-ostree kargs --append=processor.max_cstate=1
然后重启。processor.max_cstate=1 是一个激进的黑客技巧,它限制 CPU 进入深度休眠,从而减少唤醒延迟,提升响应速度,但会增加功耗。对于桌面使用,这可能值得。
第三步:优化磁盘 I/O 和 Swap——解决“假死”问题
Silverblue 使用 rpm-ostree 和 OSTree,系统分区是只读的,大部分写入发生在 /var 和 /home。如果 Swap 配置不当,磁盘 I/O 会成为瓶颈。
3.1 检查 Swap 使用情况和优先级
# 查看 Swap 状态
swapon --show
# 查看系统对 Swap 的使用倾向(0-100,默认 60)
cat /proc/sys/vm/swappiness
# 临时调整为 10(更倾向于使用内存,减少 Swap)
sudo sysctl -w vm.swappiness=10
# 持久化配置,创建一个配置文件
sudo tee /etc/sysctl.d/99-swappiness.conf <<EOF
vm.swappiness=10
EOF
3.2 检查 IO 调度器
对于 SSD,使用 none 或 mq-deadline 调度器。对于 HDD,使用 bfq。
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 查看支持的调度器
ls /sys/block/*/queue/scheduler
如果显示 [none] mq-deadline none,说明你的 SSD 正在使用 none,这是正确的。
3.3 启用 zram 压缩内存
Silverblue 默认可能没有启用 zram。启用 zram 可以将内存的一部分作为压缩 Swap 使用,速度比磁盘 Swap 快得多,特别适合内存较小的设备。
rpm-ostree install zram-generator
然后创建配置:
sudo mkdir -p /etc/systemd/zram-generator.conf.d/
sudo tee /etc/systemd/zram-generator.conf.d/zram.conf <<EOF
[zram0]
compression-algorithm = zstd
memory-limit = 4G
EOF
重启系统后,zram 设备会自动创建。
3.4 减少 systemd-journald 的磁盘写入
系统日志默认会写入磁盘,造成频繁 I/O。可以改为只保存在内存中。
sudo mkdir -p /etc/systemd/journald.conf.d/
sudo tee /etc/systemd/journald.conf.d/memory-only.conf <<EOF
[Journal]
Storage=volatile
EOF
重启 journald 服务:
sudo systemctl restart systemd-journald
第四步:优化图形性能——核显和独显的调优
4.1 Intel 核显优化
对于 Intel 集成显卡,确保用户空间驱动正确加载。
# 查看当前加载的驱动
lspci -k | grep -A2 -i vga
# 检查 GPU 频率
cat /sys/kernel/debug/dri/0/i915_frequency_info
如果频率过低,可以尝试在内核参数中添加:
rpm-ostree kargs --append=i915.enable_guc=2
enable_guc=2 启用 GuC 调度,可以提升图形响应速度。重启后生效。
4.2 NVIDIA 独显优化(如果是 Optimus 双显卡)
NVIDIA 用户最容易遇到性能和续航问题。Fedora Silverblue 推荐使用 nvidia-container-toolkit 和 prime-run,但桌面模式下的 NVIDIA 驱动管理比较复杂。
确保你安装了正确的 NVIDIA 驱动,并且正在使用 Nouveau 或 proprietary driver 的合适版本。
# 查看 NVIDIA 驱动状态
nvidia-smi
# 如果显示无法连接,说明驱动未正确加载
对于续航,建议在电池模式下禁用 NVIDIA GPU:
# 创建脚本禁用 NVIDIA GPU
sudo tee /etc/pm/power.d/nvidia-offload <<EOF
#!/bin/bash
nvidia-smi -i 0 -pm 0 > /dev/null 2>&1
echo AUTO > /sys/kernel/debug/vgaswitcheroo/switch
EOF
sudo chmod +x /etc/pm/power.d/nvidia-offload
第五步:清理后台服务——减少不必要的资源占用
Silverblue 默认会运行一些后台服务,比如 Flatpak 的自动更新检查、系统索引等。这些服务在升级后可能会更活跃。
5.1 禁用自动 Flatpak 更新
Flatpak 默认会每天检查更新,这会占用网络和 CPU。
# 查看 flatpak 自动更新状态
systemctl list-timers | grep flatpak
# 禁用自动更新
flatpak config --set appstream-refresh-period 0
5.2 禁用不需要的系统服务
# 查看正在运行的服务
systemctl list-units --type=service --state=running
# 禁用一些常见的可禁用服务(根据你的使用习惯)
systemctl --user disable systemd-resolved.service # 如果你用别的 DNS
systemctl --user disable flatpak-bus-proxy.service # 如果你不用 Flatpak
5.3 使用 systemd-analyze 分析启动时间
systemd-analyze blame
systemd-analyze critical-chain
找出耗时最长的服务,考虑禁用或调整它们。
第六步:长期维护与监控
调整不是一劳永逸的。你需要建立一个监控习惯。
6.1 使用 Glances 或 btop 监控
rpm-ostree install glances
# 或者
rpm-ostree install btop
6.2 定期检查系统日志
journalctl -p err --since "24 hours ago"
6.3 保持系统更新
虽然 Silverblue 是不可变的,但定期升级仍然重要,因为新内核和驱动可能包含性能优化。
rpm-ostree upgrade
# 升级前可以查看变更内容
rpm-ostree status --verbose
总结:一张表看清优化方向
| 问题 | 优化措施 | 预期效果 |
|---|---|---|
| 响应延迟 | 切换 CPU governor 到 performance/schedutil,启用 intel_pstate | 更快速的界面响应 |
| 续航短 | 启用 zram,调整 swappiness,禁用不必要的服务 | 延长电池寿命 1-2 小时 |
| 磁盘 I/O 高 | 禁用 journald 磁盘写入,启用 zram | 减少磁盘磨损和卡顿 |
| 图形卡顿 | 启用 GuC 调度(Intel),正确配置 NVIDIA prime | 更流畅的图形体验 |
| 后台占用高 | 禁用 Flatpak 自动更新,分析 systemd 服务 | 减少空闲时的资源占用 |
最后,记住一点:没有银弹。每个硬件组合都是独特的,你需要根据实际情况微调这些参数。我建议你先从第一步开始,逐步应用每一项优化,然后用 htop 和 powertop 观察变化。
如果某个调整让情况变得更糟,随时可以撤销。在 Silverblue 中,你可以用 rpm-ostree rollback 回滚到上一个状态,这是不可变系统最大的安全保障之一。
去吧,让你的 Fedora Silverblue 重新焕发活力!如果有具体问题,随时再来找我。
