Arch Linux 桌面系统优化
posts/arch-linux-desktop-system-optimize我那台 2019 年的小米笔记本 Pro(i7-8550U / Intel UHD 620 / MX250)在运行复杂场景任务下流畅度已经力不从心,部分场景下还会出现 OOM。在不换硬件的前提下,故尝试通过系统优化来改善使用体验。
本篇文章由我全新的 Macbook Air 编写,老笔记本盒盖后关闭 sddm 已经纯当 Linux 服务器了,不过本篇记录仍有参考价值。
内核优化
更换 Zen 内核
原有内核调度可能不是那么激进,所以我从 Linux 切换到了 Linux-zen。
Zen 内核是一个面向桌面用户的内核分支,针对低延迟和响应性进行了优化,非常适合日常使用。
sudo pacman -S linux-zen linux-zen-headers
linux-zen-headers是编译内核模块所必需的,如果你需要使用 DKMS 或手动编译驱动(如 NVIDIA 驱动),请务必安装。
使用后发现感觉每次 pacman 软件安装速度好像都快了好多?
保留备用内核
安装后建议保留一个稳定的备用内核,以防 Zen 内核出现问题时无法启动:
# 方案一:保留默认内核(推荐)
# 安装时默认的 linux 内核可以保留
# 方案二:安装 LTS 长期支持内核
sudo pacman -S linux-lts linux-lts-headers
安装后更新引导加载器配置(以 GRUB 为例):
sudo grub-mkconfig -o /boot/grub/grub.cfg
重启后在 GRUB 菜单中选择需要的内核启动。
内存优化
调整内核参数
创建或编辑 /etc/sysctl.d/99-memory.conf:
vm.swappiness = 30
vm.vfs_cache_pressure = 50
vm.watermark_scale_factor = 130
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
应用配置:
sudo sysctl --system
启用 ZRAM 压缩内存
ZRAM 将部分内存用作压缩交换空间,可以在内存不足时提供比磁盘 swap 更好的性能。
sudo pacman -S zram-generator
创建配置文件 /etc/systemd/zram-generator.conf:
[zram0]
zram-size = ram * 0.5
compression-algorithm = lz4
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl start systemd-zram-setup@zram0
验证 ZRAM 是否生效:
zramctl
swapon --show
SSD 优化
启用 TRIM
TRIM 命令让 SSD 能够回收无效数据块,维持长期性能。但是 Arch Linux 默认不开启,所以我们需要手动启用。
# 检查 SSD 是否支持 TRIM
sudo hdparm -I /dev/sda | grep TRIM
# 或
lsblk --discard
启用每周一次的 TRIM:
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer
验证状态:
systemctl status fstrim.timer
I/O 调度器优化
对于 SSD,建议使用 none(多队列)或 mq-deadline 调度器:
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 临时更改
echo none | sudo tee /sys/block/sda/queue/scheduler
永久配置,创建 /etc/udev/rules.d/60-ioscheduler.rules:
# SSD 使用 none 调度器
ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
# 机械硬盘使用 bfq 调度器
ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
Systemd 优化
Systemd 是现代 Linux 系统的初始化系统,合理配置可以显著改善启动速度和系统性能。
分析启动时间
Systemd 自带了分析工具 systemd-analyze:
systemd-analyze
示例输出:
Startup finished in 4.271s (firmware) + 2.101s (loader) + 1.935s (kernel) + 8.578s (userspace) = 16.887s
graphical.target reached after 8.577s in userspace.
输出分为四个阶段:
- firmware: UEFI/BIOS 启动时间
- loader: 引导加载器(GRUB/systemd-boot)时间
- kernel: 内核启动时间
- userspace: 用户空间初始化时间
找出启动慢的服务
systemd-analyze blame
示例输出:
3.275s NetworkManager-wait-online.service
2.447s systemd-modules-load.service
954ms systemd-timesyncd.service
747ms boot.mount
738ms dev-nvme1n1p2.device
701ms NetworkManager.service
645ms man-db.service
514ms systemd-rfkill.service
364ms plymouth-start.service
279ms systemd-udev-trigger.service
266ms caddy.service
238ms upower.service
215ms [email protected]
分析关键启动链
systemd-analyze critical-chain
示例输出:
graphical.target @8.577s
└─multi-user.target @8.577s
└─caddy.service @8.310s +266ms
└─network-online.target @8.307s
└─NetworkManager-wait-online.service @5.031s +3.275s
└─NetworkManager.service @4.316s +701ms
└─basic.target @4.314s
└─dbus-broker.service @4.246s +44ms
└─dbus.socket @4.239s +54us
└─sysinit.target @4.238s
└─ufw.service @4.040s +197ms
└─systemd-sysctl.service @4.001s +32ms
└─systemd-modules-load.service @742ms +2.447s
└─systemd-journald.socket @725ms +43us
└─-.mount @700ms
└─-.slice @700ms
@ 表示服务启动时间点,+ 表示服务初始化耗时。上例中 NetworkManager-wait-online.service 是主要瓶颈。
生成启动图表
systemd-analyze plot > boot-chart.svg
用浏览器打开 boot-chart.svg 可以直观看到每个服务的启动时间线。
禁用不必要的服务
根据 blame 和 critical-chain 的结果,可以禁用不需要的服务:
# 等待网络连接(桌面环境通常不需要)
sudo systemctl disable NetworkManager-wait-online.service
sudo systemctl mask NetworkManager-wait-online.service
# 蓝牙服务(如果不使用蓝牙)
sudo systemctl disable bluetooth.service
# 打印服务(如果不使用打印机)
sudo systemctl disable cups.service
# ModemManager(如果不使用移动宽带)
sudo systemctl disable ModemManager.service
使用 Socket 激活优化服务启动
某些服务(如 Docker)可以使用 socket 激活来延迟启动:
# 以 Docker 为例:禁用服务但启用 socket
sudo systemctl disable docker.service
sudo systemctl enable docker.socket
# 这样 Docker 会在第一次有连接请求时才启动
优化日志配置
编辑 /etc/systemd/journald.conf:
[Journal]
Storage=volatile
SystemMaxUse=100M
RuntimeMaxUse=100M
Compress=yes
重启服务:
sudo systemctl restart systemd-journald
减少控制台日志输出
编辑 /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="quiet loglevel=3 rd.systemd.show_status=auto"
更新 GRUB:
sudo grub-mkconfig -o /boot/grub/grub.cfg
总结
以上就是我对那台老小米笔记本做的全部优化了。换完 Zen 内核之后日常使用确实流畅了一些,ZRAM 也在内存吃紧的时候帮了不少忙。至于启动速度,禁用掉 NetworkManager-wait-online.service 之后直接从原来的 8 秒多降到了 5 秒左右,提升还是挺明显的。
当然,这些优化都是建立在我的使用场景上的,你可能需要根据自己的实际情况来调整。建议每次修改后观察一下系统稳定性,有问题及时回滚。