嘿,朋友!既然你手里拿着 Fedora Silverblue,说明你是个有点“极客”味儿又追求稳定的人。Silverblue 的核心优势是原子更新和不可变根文件系统,但这不代表它天生就快得飞起——就像一辆新车,如果轮胎气压不对、机油没选对,跑起来照样费劲。下面我把你提到的那些优化点,揉碎了、接地气地讲给你听,不整虚的,全是能上手操作的真东西。
一、先认清 Silverblue 的特殊性:别用普通 Fedora 那套硬套
在动手之前,我得提醒你一件事:Silverblue 的 /usr 是只读的,系统镜像是 immutable 的。这意味着你不能像普通 Fedora Workstation 那样随便 rpm -e 删包、随便改 /etc 下的核心配置文件、随便重装 systemd 模块。
所以,我们的优化思路是:
- 能用
rpm-ostree集成的,坚决用它(比如升级内核、安装内核模块) - 能用
podman容器装的,优先容器(避免污染宿主环境) - 能改的系统参数,走 sysctl 或 Tuned,别去动只读层
- 硬件升级(比如换 SSD)不受限制,放心搞
这点必须先说清楚,否则后面很多操作你可能会踩坑。
二、升级 SSD 固态硬盘:最立竿见影的硬件升级
如果你还在用机械硬盘(HDD)或者老旧的 SATA SSD,听我一句劝:换 NVMe SSD 吧,真的,值得。
为什么 SSD 对性能影响这么大?
Linux 的 I/O 调度、页面缓存、swap 行为,全都建立在存储速度之上。机械硬盘的随机读写延迟是毫秒级(ms),而 NVMe SSD 是微秒级(µs),差距在 100~1000 倍。
- 系统启动时加载内核模块、初始化服务
- 应用启动时读取 ELF 二进制、.so 动态库
- 数据库查询时随机读盘
- swap 发生时页交换
这些场景,HDD 都是瓶颈。SSD 之后,你会发现“系统变快了”不仅仅是一句口号。
怎么判断你的 SSD 是否健康?
在 Silverblue 里,打开终端(Terminal),运行:
sudo smartctl -a /dev/nvme0n1
(把 /dev/nvme0n1 换成你实际的 NVMe 设备名,可以用 lsblk 查看)
关注这几个字段:
Media and Data Error Rate:错误率,越低越好Wear Leveling Count:磨损均衡,反映寿命Available Spare:剩余 spare 空间,低于 10% 就要警惕Percentage Used:已用百分比,超过 80% 建议备份并考虑更换
如果你发现错误率飙升、剩余 spare 很少,别犹豫,该换就换。SSD 不是长久之计,但它是当下性价比最高的性能提升手段。
三、使用 Tuned 性能配置文件:让系统自动适配你的场景
Tuned 是 Linux 下最优雅的性能优化工具之一,它可以根据你选择的 profile,自动调整 CPU 频率 governors、I/O 调度器、网络参数、内核内存管理等。
1. 查看当前可用的 profiles
sudo tuned-adm list
你会看到类似这样的输出:
Active: powersave
Available profiles:
- balanced
- desktop
- latency-performance
- network-latency
- network-throughput
- powersave
- throughput-performance
- virtual-guest
- virtual-host
2. 选择适合你的 profile
日常桌面使用:
balanced或desktopsudo tuned-adm profile balanced这是默认值,兼顾性能和功耗。
追求极致响应速度(比如开发、编译):
latency-performancesudo tuned-adm profile latency-performance这个 profile 会把 CPU governor 设为
performance,I/O 调度器设为noop或mq-deadline,减少调度延迟。服务器/吞吐场景:
throughput-performancesudo tuned-adm profile throughput-performance笔记本省电:
powersavesudo tuned-adm profile powersave
3. 验证 Tuned 是否生效
tuned-adm active
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat /sys/block/nvme0n1/queue/scheduler
你会看到 CPU governor 和 I/O 调度器都按照所选 profile 调整了。
4. 自定义 Tuned profile(高级玩法)
如果你发现默认 profile 不够用,可以创建自己的 profile。比如,我想在 balanced 基础上,额外优化 ZRAM(Silverblue 默认启用 ZRAM 作为 swap):
sudo mkdir -p /etc/tuned/my-custom-profile
sudo tee /etc/tuned/my-custom-profile/tuned.conf <<'EOF'
[main]
include=balanced
[cpu]
energy_perf_bias=balance_performance
[vm]
swappiness=10
EOF
然后激活:
sudo tuned-adm profile my-custom-profile
这里 swappiness=10 的意思是:系统更倾向于把数据留在内存里,而不是换出到 swap/ZRAM。默认值是 60,对于 SSD+ 大内存的组合,10 更合理。
四、合理设置 swap 空间:Silverblue 默认用 ZRAM,但你可以调优
Silverblue 默认启用 ZRAM(基于内存的压缩 swap),而不是传统的 swap 分区或 swap 文件。这是因为 ZRAM 把压缩后的数据放在 RAM 里,读写速度远超任何 SSD,适合桌面场景。
1. 查看当前 ZRAM 状态
zramctl
输出示例:
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL_STREAMS
/dev/zram0 lz4 7.8G 128M 64M 4
DISKSIZE:ZRAM 设备大小,默认是物理内存的 50%~100%DATA:当前实际使用量COMPR:压缩后的大小
2. 调整 ZRAM 大小
编辑 /etc/systemd/zram-generator.conf:
sudo tee /etc/systemd/zram-generator.conf <<'EOF'
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
EOF
然后重启服务:
sudo systemctl restart systemd-zram-setup@zram0.service
zram-size = ram / 2 表示 ZRAM 大小是物理内存的一半。如果你内存是 16GB,ZRAM 就是 8GB。
3. 调整 swappiness
前面提到过,可以通过 Tuned 调整。或者手动:
sudo sysctl vm.swappiness=10
写入持久化:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
swappiness=10 意味着只有当内存压力很大时,系统才会把页面换出到 ZRAM。对于 16GB 以上内存的机器,这是合理的选择。
4. 如果你真的需要传统 swap
比如你要做 hibernate(休眠到磁盘),ZRAM 不支持休眠。这时你需要创建一个 swap 文件:
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
然后编辑 /etc/fstab,添加:
/swapfile none swap sw 0 0
注意:在 Silverblue 里,/etc/fstab 是 symlink 指向 /usr/lib/sysctl.d/ 下的文件,修改时要小心。建议用 rpm-ostree 管理,或者把 swap 文件放在 /home 目录下(如果 /home 是单独分区且可写)。
五、调整内核参数优化磁盘 I/O 和内存管理
除了 Tuned 和 swappiness,还有一些内核参数值得 tweaking。
1. I/O 调度器
对于 NVMe SSD,默认调度器是 none 或 mq-deadline,这已经很好了。但你可以确认一下:
cat /sys/block/nvme0n1/queue/scheduler
输出类似:
[none] mq-deadline kyber bfq
方括号里的是当前使用的调度器。如果不在 none 或 mq-deadline,可以手动切换:
echo none | sudo tee /sys/block/nvme0n1/queue/scheduler
持久化配置,创建 /etc/udev/rules.d/60-ssd-io-scheduler.rules:
ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="nvme0n1", ATTR{queue/scheduler}="none"
2. 内存回收参数
Silverblue 默认的内核内存参数已经比较激进,但你可以进一步调优。
编辑 /etc/sysctl.d/99-memory.conf:
sudo tee /etc/sysctl.d/99-memory.conf <<'EOF'
# 减少内核缓存回收倾向,让数据更久留在内存
vm.vfs_cache_pressure=50
# 允许内核使用更多内存作为缓存
vm.min_free_kbytes=65536
# 延迟释放 inode 缓存
vm.laptop_mode=0
# 减少 dirty 页刷盘频率,适合 SSD
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.dirty_expire_centisecs=3000
vm.dirty_writeback_centisecs=500
EOF
应用:
sudo sysctl --system
解释一下:
vfs_cache_pressure=50:默认是 100,降低到 50 意味着内核更愿意保留目录和 inode 缓存,这对频繁访问文件系统的场景有帮助。dirty_ratio和dirty_background_ratio:控制脏页刷盘阈值。降低这两个值可以减少大块的同步刷盘操作,让 I/O 更平滑,适合 SSD。dirty_expire_centisecs=3000:脏页 30 秒后强制刷盘,避免数据丢失风险过高。
3. NUMA 优化(多路服务器场景)
如果你是多 CPU、多 NUMA 节点的机器,可以启用 NUMA 均衡:
echo 1 | sudo tee /sys/kernel/mm/numa_balancing/numa_balancing
持久化:
echo 'kernel.numa_balancing=1' | sudo tee /etc/sysctl.d/99-numa.conf
六、定期清理系统缓存和日志
Silverblue 的 /var 是可写的(通过 overlayfs),所以你可以清理日志和缓存,但不会影响系统镜像。
1. 清理 systemd journal
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M
保留最近 7 天的日志,总大小不超过 500MB。
2. 清理 PackageKit 缓存
sudo pkcon refresh force
sudo pkcon remove-unused
3. 清理用户级缓存
# 清理 XDG 缓存
rm -rf ~/.cache/thumbnails/*
rm -rf ~/.cache/pip/*
rm -rf ~/.cache/fontconfig/*
4. 使用 BleachBit(可选)
如果你想要更图形化的清理工具,可以安装 BleachBit:
rpm-ostree install bleachbit
然后运行:
bleachbit
选择你要清理的项目,比如浏览器缓存、临时文件、日志等。
七、更新显卡驱动
Silverblue 使用 Mutter(GNOME 的显示服务器)+ Wayland,显卡驱动的管理方式略有不同。
1. Intel 和 AMD 显卡
Intel 和 AMD 的开源驱动已经内置在内核里,通常不需要额外安装。但你可以确保内核是最新的:
rpm-ostree upgrade
重启后,检查驱动:
lspci -k | grep -A2 -E "(VGA|3D)"
你会看到类似:
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630
Kernel driver in use: i915
Kernel modules: i915
如果 Kernel driver in use 显示的是 i915(Intel)或 amdgpu(AMD),说明驱动已经加载。
2. NVIDIA 显卡
NVIDIA 的情况比较麻烦,因为闭源驱动不在默认内核模块里。你有两个选择:
方案 A:使用 nouveau 开源驱动(不推荐,性能差)
方案 B:通过 nvidia-driver 第三方仓库安装
rpm-ostree install --reboot akmod-nvidia
这会在下次启动时编译 NVIDIA 内核模块。注意:每次内核更新后,都需要重新安装 akmod-nvidia。
或者,使用更简单的 rpmfusion 仓库:
rpm-ostree install --reboot nvidia-driver
安装后,检查:
nvidia-smi
如果能看到 GPU 信息,说明驱动成功加载。
3. 验证 Wayland 性能
在 Wayland 下,显卡驱动的性能影响主要体现在桌面合成器(Mutter)的帧率上。你可以用以下命令监控:
mutter --replace &
wmctrl -m
或者安装 glxinfo 查看 OpenGL 信息:
glxinfo | grep "OpenGL renderer"
八、监控 CPU 温度防止过热降频
CPU 过热时,内核会触发 thermal throttling,强制降低 CPU 频率以保护硬件。这会导致系统突然变卡。
1. 安装监控工具
sudo dnf install lm_sensors htop
2. 检测传感器
sudo sensors-detect
按提示选择 YES,直到完成。
3. 查看温度
sensors
输出示例:
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +55.0°C (high = +80.0°C, crit = +100.0°C)
Core 0: +52.0°C
Core 1: +54.0°C
Core 2: +53.0°C
Core 3: +55.0°C
如果温度持续超过 80°C,就需要考虑散热问题。
4. 自动监控和告警
你可以写一个简单的脚本,监控温度并在过热时告警:
#!/bin/bash
while true; do
temp=$(sensors | grep "Package id 0" | awk '{print $3}' | sed 's/^\+//;s/°C//')
if [ "$temp" -gt 80 ]; then
notify-send "CPU 温度过高: ${temp}°C"
# 可选:降低 CPU 频率
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
fi
sleep 10
done
保存为 monitor_temp.sh,添加执行权限,然后放到 systemd service 里后台运行。
九、总结:优化是一个持续的过程
性能优化不是一锤子买卖,而是需要根据你的使用场景、硬件配置、工作负载不断调整的。上面提到的这些方法,你可以一个一个试,每改一个参数,观察系统的响应变化。
记住几个核心原则:
- 硬件优先:SSD、大内存、良好散热,比任何软件调优都管用。
- 不要过度优化:默认参数已经经过内核社区大量测试,盲目 tweaking 可能适得其反。
- 记录变更:每次修改 sysctl 或 Tuned 配置,都记录下来,方便回滚。
- 监控先行:优化前,先了解系统现在的状态(CPU、内存、I/O、温度),优化后对比。
Silverblue 的魅力在于它的稳定性和可重复性。当你把系统调校到理想状态后,即使将来升级了系统镜像,这些优化配置依然有效(因为 /etc 和 /var 是可写的)。
希望这些建议能帮到你!如果有什么具体问题,随时问我。
