嘿,朋友。看到你入手了 Fedora Silverblue,我首先得恭喜你——你刚刚踏入了一扇通往未来操作系统的大门。Silverblue 并不是普通的 Fedora,它是个“不可变”的极客玩具。这意味着你的根文件系统是只读的,软件以容器形式运行(通过 Flatpak),系统更新是原子化的。这种设计让系统极其稳定,但也带来了一个常见的抱怨:“为什么我明明有最新的硬件,感觉却没那么‘跟手’?”
很多人拿到 Silverblue 后,第一反应是把它当成普通 Fedora Workstation 用,然后惊叹于它的稳定,随后又困惑于某些场景下的“迟钝”。其实,Silverblue 的默认配置是为了兼容性而妥协的“安全模式”。如果你想让这台机器真正发挥潜力,从后台服务的清理到内核底层参数的微调,每一个步骤都像是在为一辆跑车调校引擎。别担心,我们不需要成为内核工程师,只需要理解每个动作背后的逻辑。
告别臃肿:识别并卸载不需要的预装组件
Silverblue 的镜像本身就比桌面版精简,但它仍然会预装一些你未必需要的应用,比如 LibreOffice(如果你只处理文档)、GNOME Games(如果你不玩游戏)或者一些多余的字体包。在传统的 Fedora 中,你可以随意 dnf remove,但在 Silverblue 中,虽然你也可以这样做,但我更建议你首先审视哪些软件是你真正不用的。
打开“活动”概览,看看那些图标。如果你完全不用打印机,Cups 相关套件虽然核心驱动还在,但打印服务可以被禁用。如果你不需要语音助手功能,PulseAudio 或 PipeWire 中的某些监控工具也可以精简。不过,这里有一个 Silverblue 特有的技巧:与其手动删除系统包,不如专注于禁用那些“后台窃听”你资源的服务。
例如,tracker-miner 是 GNOME 的文件索引服务。在机械硬盘或低内存机器上,它可能是性能杀手。它会在后台疯狂读取你的文件系统以建立搜索索引。虽然 Silverblue 的应用装在 /usr 或 /var 下,你的个人文件在 /home,但 tracker 仍然会索引你的主目录。如果你是个极简主义者,或者你觉得 dconf 里的搜索已经够用了,禁用它是提升响应速度的第一步。
# 在 Silverblue 中,我们使用 rpm-ostree 来管理系统级更改
# 但注意:禁用 systemd 服务不需要重装镜像,直接 systemctl 即可
systemctl --user disable --now tracker-store.timer
systemctl --user disable --now tracker-miner-fs.timer
systemctl --user disable --now tracker-miner-apps.timer
这一步非常直观。--user 参数意味着我们只影响当前用户的体验,不会扰动系统全局,这在不可变系统中是一种更安全的尝试方式。如果以后你觉得需要重新索引,随时 enable 回来即可。
深度清理:禁用后台噪音服务
接下来我们要动真格的了。Silverblue 默认启用了一些为了“现代化体验”而存在的后台服务,比如 flatpak-autoupdate.timer、geoclue(位置服务)、bluetooth(如果你不用蓝牙)以及 modem-manager(如果你不用手机网络调制解调器)。这些服务就像是你家里一直开着但没人用的灯,虽然单个耗电量不大,但积少成多,它们会占用 CPU 周期和内存,甚至引发偶发的磁盘 I/O。
以 ModemManager 为例,这是一个经常被忽视的性能拖累。它不断轮询系统中的串口和 USB 设备,寻找调制解调器。对于大多数只有 Wi-Fi 和有线网卡的用户来说,这个服务毫无用处。禁用它可以减少内核的中断负载。
# 禁用 ModemManager 及其相关服务
sudo systemctl mask modems-mngmt.service
sudo systemctl stop ModemManager.service
sudo systemctl disable ModemManager.service
# 禁用 Bluetooth 如果不需要(注意:这可能会影响某些无线键鼠)
sudo systemctl disable --now bluetooth.service
# 禁用地理定位服务(geoclue)
# 很多应用会尝试获取你的位置,即便你没有使用地图应用
sudo systemctl mask geoclue.service
这里我使用了 mask 而不是简单的 disable。mask 更彻底,它会创建一个符号链接指向 /dev/null,确保即使有某个依赖项试图启动它,系统也会拒绝。这是一种“斩草除根”的优化策略,适合确定不再需要的服务。
另外,accounts-service 也是一个候选。它处理用户账户信息,有时会引起登录时的短暂延迟。不过对于大多数用户,保留它是更安全的做法,因为某些 GNOME 应用(如设置中的“用户”面板)依赖它。如果你是个纯命令行用户或者极简桌面用户,可以尝试禁用它,但要注意这可能会导致某些账户相关的 GNOME 功能失效。
# 谨慎操作:仅当你确定不使用 GNOME 账户集成时
# sudo systemctl mask accounts-daemon.service
内存管理策略:Swappiness 与写入缓存
Silverblue 的默认内核参数对于大多数桌面场景来说是平衡的,但如果你想让系统感觉更“轻快”,调整内存管理策略是性价比最高的手段之一。
首先来看看 Swappiness。这个参数控制内核将内存页交换到交换分区(swap)的倾向。默认值通常是 60,这意味着内核会相对积极地使用 swap。对于拥有 16GB 或更多内存的现代机器,我们希望内核尽可能把数据留在 RAM 中,而不是挪到硬盘上。将 swappiness 设置为 10 或甚至 1,可以显著减少因内存压力导致的卡顿。
# 临时生效,重启后重置
sudo sysctl vm.swappiness=10
# 永久生效,创建配置文件的最佳方式
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-silverblue-optimization.conf
sudo sysctl --system
接下来是 vfs_cache_pressure。这个参数控制内核回收目录和索引节点(dentry/inode)缓存的倾向。默认值是 100。如果你经常浏览大量文件或使用多个应用程序,提高这个值(比如到 200)可以让内核更积极地保留这些元数据缓存,从而加快文件访问速度。这就像是在图书馆里,管理员不再频繁地把书架信息从脑海中抹去,而是尽量记住位置,这样你找书会更快。
# 提高文件缓存保留率
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-silverblue-optimization.conf
# 注意:这里我设为 50,意味着减少回收缓存的倾向,保留更多内存用于文件系统缓存
还有 dirty_writeback_centisecs。这个参数控制内核多久将“脏页”(内存中待写入磁盘的数据)刷新到磁盘。默认值可能导致系统在空闲时突然进行大规模写入,造成磁盘 I/O 延迟。将其增加到 1500 或 3000 可以减少这种突发写入,让 I/O 更加平滑。
# 平滑磁盘写入,减少 I/O 尖峰
echo 'vm.dirty_writeback_centisecs=1500' | sudo tee -a /etc/sysctl.d/99-silverblue-optimization.conf
这些改动都写在 /etc/sysctl.d/ 下,这是 Fedora 推荐的做法。在 Silverblue 中,这些文件位于可写的 /etc 部分,不会影响不可变的 /usr 根文件系统,因此是完全安全的修改。
文件系统与 I/O 调度器:让数据流动更顺畅
Fedora 默认使用 bfq(Budget Fair Queueing)I/O 调度器,它在大多数场景下表现良好,尤其适合 HDD 和混合使用场景。但对于 NVMe SSD 或者纯 SSD 环境,bfq 的复杂性有时会带来不必要的开销。mq-deadline 或 none(对于现代 NVMe 驱动,内核直接处理队列)可能是更高效的选择。
不过,在改变 I/O 调度器之前,我们需要确认硬件。SSD 和 HDD 需要不同的策略。
# 查看块设备及其当前调度器
lsblk -o NAME,ROTA,QUEUE
# ROTA=1 表示机械硬盘,ROTA=0 表示 SSD/NVMe
假设你有一块 NVMe SSD,你可以尝试切换到 none 或 mq-deadline。对于传统 SSD,mq-deadline 通常是个稳妥的折衷。
# 假设你的 NVMe 设备是 /dev/nvme0n1
echo none | sudo tee /sys/block/nvme0n1/queue/scheduler
# 或者使用 mq-deadline
echo mq-deadline | sudo tee /sys/block/nvme0n1/queue/scheduler
为了让这些设置永久生效,我们需要创建一个 udev 规则。这是更健壮的方法,因为每次设备插入或系统启动时,udev 都会应用这些规则。
# 创建 udev 规则文件
sudo tee /etc/udev/rules.d/60-iosched.rules << 'EOF'
# NVMe SSD
ACTION=="add", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"
# 传统 SSD (SCSI/SATA)
ACTION=="add", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
# 机械硬盘
ACTION=="add", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
EOF
这段规则非常智能:它会根据设备的物理特性自动选择最合适的调度器。对于 NVMe,none 是最优的,因为 NVMe 驱动本身已经内置了高效的队列管理;对于 SSD,mq-deadline 提供了良好的延迟保证;而对于 HDD,bfq 依然是公平性和吞吐量的最佳选择。
内核网络优化:加速互联网体验
网络延迟和吞吐量也受内核参数影响。对于经常下载 Flatpak 应用、更新系统或进行流媒体播放的用户,调整网络栈参数可以带来更流畅的体验。
首先是 TCP 拥塞控制算法。Fedora 默认使用 cubic,这是一个通用的良好算法。但在某些网络条件下,bbr(Bottleneck Bandwidth and RTT)可能表现更好,尤其是对于高带宽、高延迟的网络(如跨国连接或移动网络)。BBR 通过估算瓶颈带宽和往返时间来动态调整发送窗口,通常能获得更高的吞吐量。
# 检查可用的拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
# 通常输出: bbr cubic reno
# 设置为 bbr
echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.d/99-silverblue-optimization.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.d/99-silverblue-optimization.conf
其次是 IPv6 禁用。虽然 IPv6 是未来,但在某些网络环境下,IPv6 的尝试和回退可能导致应用启动时的短暂延迟。如果你确定你的网络环境对 IPv6 支持不佳,或者你只是单纯想消除任何可能的 IPv6 相关开销,可以禁用它。
# 通过内核参数禁用 IPv6
echo 'ipv6.disable=1' | sudo tee -a /etc/default/grub
等等,这里我们需要小心。在 Fedora 中,修改 grub 参数后需要重新生成 grub 配置。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 对于 EFI 系统,路径可能不同
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
不过,我不建议普通用户盲目禁用 IPv6,除非你明确遇到了问题。现代网络对 IPv6 的支持已经非常成熟,禁用它可能会导致某些依赖 IPv6 的服务(如某些云存储或流媒体服务)出现问题。
GPU 与图形性能:优化渲染管道
Silverblue 深度集成 GNOME 和 Wayland,图形性能对整体流畅度影响巨大。首先,确保你使用的是正确的显卡驱动。对于 NVIDIA 用户,这是个大议题。Fedora 默认不提供专有 NVIDIA 驱动,因为它们是闭源的。在 Silverblue 中,你需要通过 rpm-ostree 安装它们。
# 安装 NVIDIA 专有驱动(假设你使用的是最新架构)
# 注意:这需要你已经在系统中启用了 rpmfusion 仓库
rpm-ostree install akmod-nvidia xorg-x11-drv-nvidia-libs
# 安装完成后,必须重启系统以重新生成 initramfs 并加载新内核模块
# 这一步至关重要,否则驱动不会生效
reboot
一旦驱动安装完成,我们可以进一步优化图形相关的内核参数。比如,启用 GLAMOR 加速。虽然 GNOME 默认已经尝试启用它,但我们可以确保内核层面的支持。
# 检查当前 X11/Wayland 的加速状态
# 对于 Intel 集成显卡,确保 i915 驱动已加载
lsmod | grep i915
# 如果没有,尝试加载
sudo modprobe i915
# 并确保它在启动时加载
echo 'i915' | sudo tee /etc/modules-load.d/i915.conf
对于 AMD 用户,amdgpu 驱动通常开箱即用,性能也不错。你可以检查显存预留情况。
# 查看 AMDGPU 显存分配
dmesg | grep amdgpu
另一个重要的优化点是 PRIME 渲染 offload。如果你使用双显卡笔记本(Intel + NVIDIA),确保你正确配置了 PRIME,这样在运行轻量级应用时使用集成显卡,运行游戏时使用独显,从而节省电量并减少发热。
# 检查当前使用的 GPU
glxinfo | grep "OpenGL renderer"
# 强制使用独显运行某个应用
DRI_PRIME=1 firefox
电源管理:平衡性能与能耗
性能优化不仅仅是为了速度,也是为了效率。正确的电源管理设置可以防止 CPU 频率在不需要时盲目攀升,也可以避免在需要性能时频率上不去。
Fedora 默认使用 powertop 的某些设置,但我们可以更主动地管理 CPU 调频器。
# 查看当前 CPU 调频器模式
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 通常输出: powersave performance ondemand
# 对于性能优化,我们可以选择 performance 模式
# 但这会增加功耗和发热
# 对于日常使用,ondemand 或 schedutil 是更好的平衡
# 安装 cpupower 工具
sudo rpm-ostree install kernel-tools
# 设置全局 CPU 频率调度器
sudo cpupower frequency-set -g performance
# 或者更智能的
sudo cpupower frequency-set -g schedutil
schedutil 是较新的调频器,它直接利用 Linux 调度器的负载信息来调整频率,响应速度比 ondemand 更快,通常能提供更好的性能响应。
此外,还可以启用 CPU 空闲状态 的优化。
# 检查 CPU 空闲状态
sudo cpupower idle-get
# 如果需要禁用某些深层 C 状态以减少延迟(适合实时性要求高的场景)
sudo cpupower idle-set -D 1
但这通常只对极端需求用户有意义,普通用户保持默认即可。
日志与审计:减少磁盘 I/O 噪音
Linux 系统的日志和审计子系统虽然必要,但在高性能场景下,它们会产生大量的磁盘写入,尤其是在系统启动和高负载时。对于 SSD 来说,这虽然不会像 HDD 那样造成明显的性能瓶颈,但会增加 I/O 延迟,并可能加速 SSD 的磨损。
我们可以调整 journald 的配置,将日志数据更多地保留在内存中,而不是频繁刷写到磁盘。
# 编辑 journald 配置
sudo tee /etc/systemd/journald.conf << 'EOF'
[Journal]
# 将日志保留在内存中,重启后丢失(对于性能优化来说是可接受的)
Storage=volatile
# 或者使用 auto,在空间不足时压缩并保留
# Storage=auto
Compress=yes
SyncIntervalSec=5m
RateLimitIntervalSec=30s
RateLimitBurst=10000
EOF
# 重启 journald 服务
sudo systemctl restart systemd-journald
Storage=volatile 是最激进的优化,它意味着所有日志都只存在于 RAM 中。重启后日志清空。这对于调试问题可能会带来不便,但为了极致的性能,这是一个值得考虑的权衡。如果你希望保留日志,可以使用 Storage=auto,并启用压缩。
同时,禁用不必要的 auditd 服务也可以减少内核开销。
# 禁用审计守护进程
sudo systemctl mask auditd.service
sudo systemctl disable auditd.service
注意:禁用 auditd 可能会影响某些安全敏感应用的日志记录,但对于大多数桌面用户来说,这是安全的。
浏览器与 Web 体验:前端性能的关键
在 2024 年及以后,浏览器已经成为很多用户的主战场。Chrome、Firefox 等浏览器本身就是资源大户。在 Silverblue 中,我们通常使用 Flatpak 版本的浏览器。
优化浏览器性能的一个简单方法是启用 硬件加速。确保你在浏览器设置中启用了 GPU 加速。对于 Firefox,可以在 about:config 中调整一些参数。
# 在 Firefox 地址栏输入 about:config
# 搜索以下项目并调整:
# hardware.accelerate.force_enable=true
# media.ffmpeg.vaapi.enabled=true
# layout.css.grid-template-subgrid-value.enabled=true
这些设置可以启用硬件视频解码和更现代的 CSS 渲染,从而减轻 CPU 负担,让页面滚动和动画更加流畅。
另外,浏览器扩展也是性能杀手。一个 poorly written 的扩展可能每秒都占用大量 CPU。定期审查并禁用不常用的扩展,选择轻量级的替代方案,如 uBlock Origin(广告拦截)而不是多个重型广告插件。
应用程序层面的优化:Flatpak 与原生应用
Silverblue 的核心是 Flatpak。虽然 Flatpak 提供了便捷的应用分发和隔离,但它也带来了一些性能开销,尤其是启动延迟和文件系统访问速度。
为了优化 Flatpak 应用的性能,你可以启用
