Linus Torvalds 6 月 14 日提前半天在异国时区发出了 Linux 7.1 的发布邮件,顺带提到本次开发周期"非常折腾",原因是 AI/LLM 工具开始批量上报遗留代码的 bug。为了压制这股噪音,内核社区干脆把 ISDN 驱动、UDP-Lite 支持、总线鼠标代码、部分老旧 PCMCIA 驱动,以及已经快三十年没有实际用途的 Intel 486 CPU 支持一并删掉。这是 Linux 历史上第一个可以说是"被 AI 工具推着清理祖传代码"的版本。7.1 在这批删除之外还有一项变化更值得关注:Intel FRED 默认开启——x86 特权级切换机制四十年来第一次被系统性重写。
IRET:一条带着历史债务运行了四十年的指令
80286 时代,Intel 在保护模式下引入了基于 IRET(Interrupt Return)的特权级切换机制。它的逻辑是:中断/异常发生时,CPU 把返回地址、代码段选择子、EFLAGS、可选的栈指针压入当前栈帧;返回时 IRET 弹出这些信息恢复现场。
这套机制在设计上是不对称的——进入特权级(通过中断向量表)和退出特权级(通过 IRET)走的是不同路径,处理不同类型事件(硬件中断、软件异常、系统调用)时栈帧结构也不一致。这种不对称在几十年里带来了持续的麻烦:Meltdown 缓解方案 KPTI 需要在每次系统调用/中断路径上切换两次页表,这个开销直接叠加在 IRET 路径上,使 I/O 密集型负载在打完 Spectre/Meltdown 补丁后性能更差;NMI 从 IRET 返回时存在已知的竞争条件,多次被当作攻击面利用;对于系统调用频繁的负载,不对称栈帧的处理代价在高并发下积累明显。
FRED 的解法:让进入和返回共用同一个帧
FRED(Flexible Return and Event Delivery)是 Intel 在 Panther Lake(Core Ultra 3 系列)上首次实装的新机制。它的核心思路是把所有类型的事件(硬件中断、软件异常、系统调用)的进入和返回统一为同一种栈帧格式——用一个对称的 event delivery frame 替代原来的多套不兼容路径。
对称设计让 CPU 不再需要在不同栈帧格式之间做切换判断,特权级切换代价降低;进入和退出用同一套验证路径,没有不对称带来的额外攻击面。Phoronix 今年 3 月的 Panther Lake 基准测试显示,FRED 开启后 I/O 密集型负载受益明显:数据库查询、内存键值存储(如 Redis 类负载)、网络包处理、数字音频处理的性能提升可感知。
Linux 内核对 FRED 的支持在 6.x 系列已经合并,但最初以保守的 fred=on 启动参数形式存在——出于对第一代硬件可能存在 bug 的担心。7.1 的变化是翻转这个逻辑,改为默认开启、允许用 fred=off 手动关闭。合并注释里的解释直接:
"代码已经经过了大量测试,现在把逻辑从 opt-in 改为 opt-out,和其他新硬件特性的惯例一致。"
行业收敛:AMD Zen 6 也会支持
FRED 如果只是 Intel 的私有扩展,它的意义就有限。重要的是 AMD 宣布 Zen 6 架构也将支持 FRED,Intel Xeon Diamond Rapids(下一代服务器 CPU)同样采用。也就是说,FRED 正在成为 x86 生态的新基线——未来的 x86 系统可以统一走这条更干净的异常处理路径,而不是继续在 40 年前的 IRET 上打补丁。
同周期进入内核的 Intel LASS(Linear Address Space Separation)也标志着 Intel 在同一方向上的连续投入:LASS 通过硬件强制线性地址空间隔离,让用户态代码无法触碰内核地址空间的地址范围,即使没有完整的页表切换也能提供基本的地址边界保护。LASS 和 FRED 分别从地址边界和控制流路径两个维度收紧了用户态和内核态的边界,Intel 在 7.1 这个周期里把两件事一起推进了。
LoongArch 进主线,Baikal 被移除
7.1 还合并了新的 NTFS 文件系统驱动,目标是提供比现有 ntfs3 和 ntfs-3g 方案更好的读写性能和功能完整性——这对需要在 Linux 下读写 Windows 磁盘的场景有实际意义。
LoongArch 本次获得了 HIGHMEM 支持和若干其他改进,持续向主线内核靠拢。同一版本里,俄罗斯 Baikal CPU 的支持代码被从主线移除——两者同在,对照意味自明。
7.2 的合并窗口随着 7.1 的发布同时开启,预计将引入 Apple M3 支持、AMD HDMI 2.1 FRL 初步支持,以及把 LLVM/Clang 的最低版本要求上调的构建系统更改,以支持 Distributed ThinLTO 优化。