缓存感知调度器(CAS)终于合入主线——这个由Intel工程师开发超过一年的特性,能让多缓存域CPU上的数据库和网络工作负载显著提速。与此同时,一个存在了二十多年的strncpy API被彻底移除,一个让Linus Torvalds写下"disgusting"的代码重构也在合并窗口期间完成。
引子
Linux 7.2的合并窗口刚打开不久,但已经发生了一些不寻常的事。
不是那种"修了几个bug、加了几个驱动"的常规更新。这个版本里,一个调度器特性让数据库工作负载在多缓存域CPU上显著加速,一个API被彻底移除——背后的清理工作持续了六年、涉及362个commit,还有一个新合并的子系统代码被Linus Torvalds当众批评"disgusting"。
这些事情之间的共同点是什么?它们都指向同一个方向:Linux正在从"能跑就行"的阶段,进化成"跑得好、跑得安全、跑得漂亮"的基础设施操作系统。
一、Cache Aware Scheduling:让调度器"看见"缓存
Linux 7.2合并的最受关注的特性之一,是Cache Aware Scheduling(CAS)——缓存感知调度。
这个名字听起来很学术,但它解决的问题很实际:在现代CPU上,如果两个进程共享数据,但被调度到不同的核心上执行,它们每次访问共享数据都要跨越缓存层级,性能损失巨大。CAS做的事情就是让调度器"感知"缓存拓扑,把共享数据的进程尽量放到同一个LLC(Last Level Cache)域里。
为什么这个特性花了这么久?
CAS不是突然冒出来的。Intel的工程师们为此工作了超过一年。原因很简单:现代CPU的缓存拓扑越来越复杂。以AMD EPYC为例,一个socket里有多个CCD(Core Complex Die),每个CCD有自己的L3缓存,多个CCD之间通过Infinity Fabric连接。Intel的Xeon 6也是如此——多tile设计,每个tile有自己的LLC。
传统的CFS调度器核心目标是公平性(fair share),而非缓存局部性。它只知道"这个核心闲着,把任务扔过去"。但在多socket、多CCD的服务器上,这种"懒调度"会导致严重的缓存失效——进程A在CCD 0上写了一块数据,进程B在CCD 1上要读这块数据,每次都要跨tile传输,延迟从几纳秒变成几十纳秒。
Phoronix的实测数据很说明问题:在AMD EPYC(Turin架构)上,CAS让多个数据库和网络工作负载的性能提升显著。Intel Xeon 6同样受益——这不意外,因为CAS本质上是Intel工程师主导开发的。
CAS在Linux 7.2中通过CONFIG_SCHED_CACHE Kconfig选项启用,采用LLC-centric的任务聚合模型——把任务聚集到同一个LLC域。
Hygon的扩展方向:从单LLC到多拓扑
CAS在Linux 7.2中合并的版本有明确的适用范围:对单socket系统效果很好,但在多socket或复杂拓扑的系统上,局限性就暴露了。
6月25日,Hygon(海光)在内核邮件列表上提交了一组RFC(征求意见稿)补丁,提议将CAS扩展为拓扑感知的任务聚合。新方案不再局限于单个LLC域,而是根据工作负载的大小和系统拓扑,在调度域之间动态扩展和收缩任务聚合。
需要明确的是:这组补丁目前处于RFC阶段,尚未被社区review和合入任何版本。 但它展示了CAS的未来发展方向,基准测试结果也相当有参考价值:
- • MySQL:吞吐量提升最高360%(MySQL delete测试,64线程,NUMA平衡启用场景)
- • Hackbench:提升49%
- • Schbench:提升20%
360%这个数字需要放在上下文中理解:测试条件是64线程、NUMA平衡启用,基线内核的CAS与NUMA平衡产生冲突,导致任务分散到多个NUMA域,每次写入都触发跨域缓存行失效。Hygon的补丁通过拓扑感知的任务聚合消除了这个问题。在NVMe存储的场景下,提升幅度约为30%——仍然是非常可观的数字。
对于运行MySQL、PostgreSQL、MongoDB等数据库的运维人员来说,当Hygon的补丁完成社区review并合入后,升级内核配合CAS可能会带来显著的性能收益。
二、strncpy清除:六年、362个commit的技术债清算
Linux 7.2做了一件很多人等了很久的事:彻底移除了strncpy API。
strncpy是C标准库中用于字符串复制的函数,它在Linux内核中存在了二十多年。但这个函数有一个反直觉的设计——它不会自动在目标缓冲区末尾添加NUL终止符,而且会用零填充整个目标缓冲区,即使只需要复制一小段数据。这两个特性在内核代码中反复引发bug。
Phoronix引用内核维护者的说法:strncpy是内核中"持续的bug来源"(persistent source of bugs)。
362个commit的清理过程
约六年前,内核社区启动了strncpy的替代方案迁移。这项工作持续了六年,涉及362个commit,逐步将内核中所有使用strncpy的代码替换为更安全的替代函数:
- •
strscpy():用于需要NUL终止的目标缓冲区 - •
strscpy_pad():用于需要NUL终止且零填充的场景 - •
strtomem_pad():用于非NUL终止的固定宽度字段 - •
memcpy_and_pad():用于带显式填充的有界复制 - •
memcpy():用于已知长度的内存复制
到Linux 7.2,内核中最后一个strncpy调用被移除。这不只是代码清理——它是一次系统性的安全加固。strncpy的NUL终止遗漏曾经是多个内核安全漏洞的根因。
为什么这件事值得单独讲?
因为它是Linux内核开发模式的缩影:发现问题→提出替代方案→长期迁移→彻底清除。没有"大爆炸式"重写,没有"我们推倒重来",而是用六年时间、362个commit,一个一个地替换。这种耐心和纪律性,是Linux内核能够保持稳定性的关键原因。
三、MGLRU优化:MongoDB吞吐量翻倍
Linux 7.2的内存管理子系统也有一个重磅改进:MGLRU(Multi-Gen LRU)的回收循环和脏页写回处理优化。
MGLRU是Linux内核的页面回收机制,负责在内存压力下决定哪些页面可以被回收。传统的LRU(Least Recently Used)算法在处理大规模工作负载时效率不高,MGLRU通过引入多代(multi-generation)的概念,更精确地跟踪页面的访问模式——页面按访问时间被分为不同"代",回收时优先处理最老一代的页面。
腾讯的优化方案
这组补丁由腾讯贡献(提交者:Kairui Song kasong@tencent.com),核心改进是优化了MGLRU的回收循环和脏页(dirty folio)的写回处理。具体来说:
- • 回收循环优化:减少了不必要的页面扫描,加快了内存回收速度
- • 脏页写回优化:改进了脏页的批量写回策略,减少了I/O等待
基准测试数据来自Phoronix的报道和补丁原文:
- • MongoDB(YCSB基准):使用NVMe存储时,吞吐量提升30%
- • MongoDB(慢速I/O场景):吞吐量提升最高100%
其他内存管理改进
Linux 7.2的MM子系统还有多个值得注意的改进:
- • 0-order页面批量释放:解决了vmalloc性能回退问题
- • DAMON暂停/恢复支持:数据访问监控可以在不丢失状态的情况下暂停和恢复
- • KASAN加速:移除了对栈和页表的无效标记,提升了内核地址消毒器的性能
- • mmap_miss命中率收紧:显著减少了同步mmap预读I/O,对稀疏随机内存访问工作负载有明显改善
这些改进单个看都是"小优化",但叠加在一起,对数据库、缓存系统、大数据工作负载的影响是实质性的。
四、后量子密码学:为"先收集后解密"做准备
Linux 7.2在安全层面做了一个前瞻性布局:IMA(Integrity Measurement Architecture)和EVM(Extended Verification Module)获得了后量子ML-DSA签名支持。
ML-DSA(Module-Lattice-Based Digital Signature Algorithm)是NIST后量子密码标准化项目的候选算法之一。Linux 7.2的内核完整性子系统现在可以使用ML-DSA进行签名验证,这意味着系统在面对未来量子计算机的"先收集后解密"攻击时,有足够的密码学敏捷性来平滑过渡。
"先收集后解密"(harvest now, decrypt later)是指攻击者现在截取加密数据,等量子计算机成熟后再解密。对于需要长期保密的数据(如政府通信、金融记录、医疗数据),这个威胁不是假设性的——它正在发生。
Linux 7.2的这个改动,让内核层面的完整性验证机制提前做好了准备。虽然量子计算机的实用化可能还需要十年或更久,但操作系统层面的准备需要现在就开始。
五、sched_ext重构:Linus Torvalds的"disgusting"
Linux 7.2的合并窗口期间,发生了一个有意思的社区治理事件。
sched_ext是一个可扩展的调度器框架,允许用户空间通过BPF程序自定义调度策略。这个特性在Linux 7.2中合入了子调度器支持——一个重要的功能迭代。
但问题出在代码组织上。
开发团队在kernel/sched/目录下创建了多个以ext_为前缀的文件:
kernel/sched/ext_arena.c
kernel/sched/ext_arena.h
kernel/sched/ext_cid.c
kernel/sched/ext_cid.h
kernel/sched/ext_types.h
Linus Torvalds看到这些文件后,在邮件列表上写下了这段话:
"Please don't do this disgusting thing. There's a reason we have subdirectories: it's to group files together and separate them out. Using name prefixing instead of directories is disgusting and wrong. If you have this many random sched-ext files, it damn well should be cleaned up and not be this kind of mess. I've pulled this, but under protest. Proper hierarchical filesystems have been available since 1965."
他合并了代码,但明确表示"under protest"(抗议性合并)。
一周后,开发团队提交了重构补丁,将所有ext_*文件移入sched/ext/子目录。这组补丁在Linux 7.2的后续迭代中被合并。
这件事的启示
这不是Linus第一次对代码组织发火,但这次事件反映了内核社区的一个核心原则:代码的可维护性和可读性,与功能本身同样重要。
sched_ext是一个BPF驱动的调度器框架,它的代码量正在快速增长。如果不及时整理目录结构,未来维护的成本会越来越高。Linus的批评虽然直接,但指向了一个真实的工程问题。
对于内核开发者来说,这是一个提醒:合入新功能时,不只是"代码能跑"就够了,代码的组织结构也需要符合社区的长期维护标准。
其他值得关注的改动
Linux 7.2还有多个值得关注的更新,简要提及:
RISC-V架构:内核启动开销显著降低,Eswin SoC获得默认支持。RISC-V设备从开机到可用的时间缩短了,对嵌入式和边缘计算场景有实际意义。
F2FS文件系统:集成了FSERROR报告机制,删除了长期未使用的内存中块位图和sit版本位图,降低了内存占用。
AMD EPYC Sorano:网络/套接字/本地TCP和QUIC性能显著提升。Phoronix的早期基准测试显示这些提升"unexpected and nice",对数据中心用户来说可能是升级内核的直接动力。
Perf工具安全:增加了对恶意构造数据的防护,堵住了可能被利用的安全漏洞。
NVIDIA Blackwell-Next:nouveau驱动开始为下一代数据中心GPU做准备。
总结
Linux 7.2同时推进了调度器架构(CAS)、内存管理(MGLRU)、安全机制(后量子签名)、代码质量(strncpy清除、sched_ext重构)四个维度的改进。
从性能数据看,CAS让多缓存域CPU上的工作负载显著加速,MGLRU让MongoDB的吞吐量提升30%~100%。从工程实践看,strncpy的六年迁移和sched_ext的目录重构,展示了内核社区在代码质量上的纪律性。从安全角度看,后量子ML-DSA签名支持为未来十年的密码学迁移做了前瞻性布局。
对于运维人员和开发者来说,Linux 7.2值得在发布后第一时间测试——特别是那些运行数据库、内存密集型工作负载的场景。升级内核可能比升级硬件更有效。
参考来源
Cache Aware Scheduling
- • Phoronix: "Cache Aware Scheduling Merged For Linux 7.2 For Boosting Modern Intel & AMD CPUs"
https://www.phoronix.com/news/Linux-7.2-Scheduler - • Phoronix: "Linux Cache Aware Scheduling Extended For Even Better Performance: Up To 360% In MySQL"
https://www.phoronix.com/news/Extended-Cache-Aware-Sched - • Hygon CAS扩展补丁(RFC): https://lore.kernel.org/lkml/20260625030759.25928-1-wujianyong@hygon.cn/
strncpy API清除
- • Phoronix: "Linux Finally Eliminates The strncpy API After Six Years Of Work, 360+ Patches"
https://www.phoronix.com/news/Linux-7.2-Drops-strncpy
MGLRU内存管理优化
- • Phoronix: "MGLRU Improvement Yielding Nice Gains On Linux 7.2: MongoDB 30~100% Higher Throughput"
https://www.phoronix.com/news/Linux-7.2-MM - • 补丁系列: https://lore.kernel.org/lkml/20260428-mglru-reclaim-v7-0-02fabb92dc43@tencent.com/
后量子密码学
- • Phoronix: "Linux 7.2 Ready With IMA and EVM Post-Quantum ML-DSA Signature Support"
https://www.phoronix.com/news/Linux-7.2-Integrity
sched_ext重构
- • Phoronix: ""Disgusting" Linux sched_ext Source Code Restructured Following Complaint By Linus Torvalds"
https://www.phoronix.com/news/Linux-Sched-Ext-Restructured - • Linus Torvalds原始评论: https://lore.kernel.org/lkml/CAHk-=wghMm2c+AYEcwYY7drSVXB27DYqc-ZXpFiq=XFs-w59wA@mail.gmail.com/
AMD EPYC Sorano
- • Phoronix: "Linux 7.2 Showing Some Unexpected & Nice Performance Gains On AMD EPYC Sorano"
https://www.phoronix.com/news/Linux-7.2--EPYC-Sorano-Network
Perf工具安全
- • Phoronix: "Linux 7.2 Protects Against Crafted Perf Data From Going Rogue"
https://www.phoronix.com/news/Linux-7.2-Perf-Tools