发布于2026-08-04 阅读(0)
扫一扫,手机访问
话说,前几天Linux内核社区收到了一组来自腾讯工程师Kairui Song的RFC补丁——目标很明确:对多个交换设备的I/O分配机制进行彻底重构。对于使用交换分层或分层交换的复杂服务器场景来说,这套方案可能带来性能与可扩展性的显著提升。

这套补丁的核心,是引入了一种全新方法,来公平分配多个交换设备的I/O负载。改动最关键的,就是完全砍掉了可变的plist和全局锁,进而取消了全局集群缓存。这么一来,分配和轮换的灵活性就大大提升了。作为配套依赖项,补丁系列还顺便清理并重构了交换设备管理的锁定模式。
有必要回顾一下之前的设计。每个交换设备原本都有自己的percpu集群缓存,后来有个提交把集群缓存移到了全局作用域,让所有设备共享同一个全局缓存,以减少对plist的频繁修改。快速交换分配直接走每个CPU的集群缓存,设备轮换则仍由plist负责。看起来挺合理,但实际上埋下了好几个长期问题。
其中最关键的是:位于设备选择之上的全局CPU集群缓存,与交换分层和分层交换分配等概念之间存在根本性冲突。plist本身需要plist_requeue()函数来轮换设备以实现轮询,这就得持有swap_a vail_lock锁——所有CPU都会跑来抢这把锁,竞争非常激烈。而且,轮换被认定为慢速路径,为了不触碰plist而引入的快慢路径设计,又带来了不少变通方案和设计局限,绕来绕去反而更复杂。
新补丁的做法更干脆:将所有交换设备和新引入的percpu读取器优先级队列,统一由percpu rwsem保护。这一改动直接大幅提升了可扩展性,也为未来引入交换分层等新想法做好了铺垫。

从技术角度看,这组补丁带来的不仅是性能改进,更是一次架构层面的清理——把多年积攒下来的多处变通和妥协,一次性梳理干净。对于关注Linux内核I/O子系统的开发者来说,值得仔细看看其中的设计思路。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9