Linux 7.x 内核在内存管理上的进步,对这些老古董上体现得挺明显。
硬件背景
先说清楚我的设备:
- • 2015 款 MacBook Pro
- • Apple SSD SM0256G(256GB)
- • 16GB 内存
- • Ubuntu 26.04(Linux 7.0.0-14-generic 内核)
一个关键细节:这台机器的固态硬盘走的是 SATA 协议,不是 NVMe。
怎么确认?运行 lsblk -d -o NAME,TRAN,如果显示 sda 和 sata,就是 SATA。2015 年是 Apple 的过渡期——物理接口是 PCIe,但协议还是老的 AHCI。这个细节很重要,后面会用到。
第一个坑:磁盘只读锁定
装完系统,开始安装软件。编译一个 Python 包时,系统突然卡死,终端疯狂报错:
rm: 无法删除 '/opt/throttled/venv/bin/python3': 只读文件系统
所有目录都被锁定为只读。重启后恢复正常,但高负载时又会复现。
这是什么?
Linux 内核的自我保护机制。当检测到磁盘 I/O 异常或硬件通信超时时,为了防止数据损坏,会强制将文件系统重新挂载为只读。
为什么会触发?
2015 款 Mac 的 AHCI SSD 主控固件,和 Linux 7.x 内核的高性能 I/O 调度策略不兼容。
具体来说:
NCQ(Native Command Queuing)冲突
Linux 默认开启 NCQ。NCQ 允许硬盘同时处理多个 I/O 请求,并自动优化执行顺序。这在现代硬盘上很好用,但老款 Mac 的主控在高负载下会因为命令队列堆叠过深而通信超时。

PCIe 电源管理干扰
Linux 的 PCIe ASPM(Active State Power Management)会让 PCIe 总线进入节能模式。Mac 的固件对这个不友好,节能时通信会中断。

解决方案
修改 /etc/default/grub,在启动参数里加两个开关:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=off libata.force=noncq"
- •
pcie_aspm=off:关闭 PCIe 电源管理 - •
libata.force=noncq:禁用 NCQ,让硬盘串行处理请求
应用配置后重启,搞定。之后没再出现只读锁定的问题。
sudo update-grub
sudo reboot
性能代价
禁用 NCQ 会让随机读写吞吐量下降 10%-20%,高并发场景下响应延迟也会增加。
但换来的是稳定性。不再出现只读锁定,系统可以正常工作。日常用下来,这点性能损失基本感知不到。
内存管理的惊喜
装完系统,最直观的感受是内存占用大幅降低。
同样的工作场景:
- • 20+ 个浏览器标签页
- • VSCode 打开多个项目
- • 终端运行编译任务
- • Docker 容器
在 macOS 下,16GB 内存开十来个页面加上开发环境就捉襟见肘。最烦的是看视频,CPU 温度飙升,风扇转得跟要起飞一样。
在 Ubuntu 26.04 下,同样的负载内存占用直接减半。而且视频播放很冷静,基本听不到风扇声。

怎么回事?
Linux 7.x 内核在内存管理上确实有改进,主要是这几块。
MGLRU:更聪明的页面回收
传统的 LRU(Least Recently Used)算法很简单:维护一个队列,最近没用过的页面就回收。
问题是,"最近没用过"不等于"不重要"。比如你打开了 20 个浏览器标签页,只在看其中 3 个,其他 17 个虽然长时间没切换,但你可能随时需要。传统 LRU 会把它们回收掉,切换时又要重新加载,这就会造成卡顿。
MGLRU(Multi-Gen LRU)不同。它把内存页面分为多代(generations),根据访问频率和时间衰减来决定回收优先级。

- • 频繁访问的页面标记为"年轻代"
- • 长期不用的页面逐步降级为"老年代"
- • 回收时优先清理老年代
这样做的好处:
- • 更精准识别热点数据
- • 减少误杀重要页面
- • 降低 swap 压力
实际用下来,在 16GB 内存下,macOS 运行 Next.js + VSCode + 十几个网页后,系统就开始变沉。Ubuntu 26.04 通过 MGLRU 配合 Linux 7.x 的调度,把浏览器那些"冷页面"管理得不错。体感上,Ubuntu 下浏览器的内存开销确实低不少,腾出来的空间让开发环境跑得更快。
THP:透明大页优化
传统内存管理用 4KB 的小页面。每次访问内存,CPU 都要查 TLB(Translation Lookaside Buffer)来找到物理地址。TLB 容量有限,页面太多就会频繁缺失,影响性能。
THP(Transparent Huge Pages)允许系统使用 2MB 的大页面。一个大页面顶 512 个小页面,TLB 缺失率大幅降低。
Linux 7.x 对 THP 的管理也更智能:
- • 按需分配:只在真正需要大页面的场景(比如数据库、虚拟机)下启用
- • 动态调整:大页面不需要时自动拆分,小页面可以合并时自动升级
激进的文件缓存策略
Linux 的文件缓存(Page Cache)策略很激进——尽可能多地将空闲内存用于缓存文件。
这就是为什么 free -h 显示的 "available" 内存往往比 "free" 内存大得多。看起来内存快用完了,实际上大部分是文件缓存,应用需要时能瞬间释放。
macOS 更保守一些,会预留较多内存给系统服务和 Spotlight 索引。Linux 的"用尽所有内存"策略在实际使用中反而更流畅,因为文件缓存命中率更高。
Ubuntu 26.04 的其他改进
EEVDF 调度器
Linux 6.6 引入的 EEVDF(Earliest Eligible Virtual Deadline First)调度器取代了传统的 CFS[^3]。
简单来说,它让多任务切换更快。你在编译代码的同时切换浏览器标签页,不会有明显的延迟感。
Wayland 默认启用
相比 X11,Wayland 在高 DPI 屏幕和多显示器场景下表现更好。动画更流畅,画面撕裂也更少。
软件生态成熟
微信、钉钉这些国产软件开始提供官方 Linux 版本。虽然还有些小问题,但日常使用基本够用了。

几个关键经验:
- • 老款 Mac 必须禁用 NCQ(
libata.force=noncq) - • 关闭 PCIe 电源管理(
pcie_aspm=off) - • 优先使用预编译包(Pixi/Conda 比 pip 编译靠谱)
- • 定期检查磁盘健康(
sudo smartctl -a /dev/sda)
Linux7 对老硬件来说,算是个不错的"续命"选择。
参考来源
- 1. MGLRU Merged For Linux 6.1 - Phoronix
- 2. Multi-Gen LRU - The Linux Kernel documentation
- 3. A Fair Slice - Linux Magazine
- 4. Ubuntu 26.04 LTS release notes
- 5. EEVDF Scheduler - The Linux Kernel documentation
- 6. Transparent Hugepage Support - The Linux Kernel documentation