腾讯工程师出手!Linux多交换设备I/O调度大重构:彻底干掉全局锁
快科技7月14日讯,腾讯腾讯工程师Kairui Song近日向Linux内核社区提交了一组RFC(Request for Comments)补丁,工程干掉旨在对多交换设备的师出手L锁I/O分配机制进行深度重构。这一举措有望解决长期困扰复杂服务器场景的多交O调度性能瓶颈,特别是换设在涉及交换分层(Swap Layering)或分层交换处理的环境中,将显著提升系统的重构整体性能与可扩展性。

核心变革:告别全局锁与可变plist
此次补丁的彻底核心在于引入了一种全新的I/O负载公平分配机制。其关键改动包括:
- 彻底移除全局锁:消除了传统设计中导致CPU争用的全局
swap_avail_lock。 - 废弃可变plist:不再依赖传统的腾讯优先级列表(plist)进行全局管理。
- 取消全局集群缓存:解耦了设备间的工程干掉缓存依赖,使I/O分配和轮换操作更加灵活自由。师出手L锁
作为配套措施,多交O调度该系列补丁还清理并重构了交换设备管理的换设锁定模式,为底层架构的重构轻量化铺平道路。
历史痛点:从Per-CPU到全局缓存的彻底演进困境
在理解新方案之前,需回顾交换设备管理的演变历程:
- 早期设计:每个交换设备独立维护自己的
percpu集群缓存,以减少竞争。 - 中期优化:为减少频繁修改plist的开销,后续提交将集群缓存移至全局作用域,实现所有设备共享单一全局缓存。
- 当前困境:
- 快慢路径割裂:快速交换分配直接使用每个CPU的集群缓存,而设备轮换仍由全局plist处理。
- 锁竞争严重:plist轮换依赖
plist_requeue()函数,必须持有swap_avail_lock,导致所有CPU在此锁上产生激烈争用。 - 架构冲突:位于设备选择之上的全局CPU集群缓存,与“交换分层”和“分层交换分配”等现代概念存在根本性逻辑冲突。
- 设计局限:为避免触碰plist这一“慢速路径”,开发者不得不采用各种变通方案,导致代码复杂且难以维护。
新方案:Per-CPU RWSEM与优先级队列
新补丁通过以下设计彻底解决了上述问题:
- 统一保护机制:所有交换设备以及新引入的
percpu读取器优先级队列,统一由percpu rwsem(读写信号量)进行保护。 - 提升可扩展性:通过细粒度的锁机制,大幅降低了CPU间的锁竞争,显著提升了多核环境下的可扩展性。
- 面向未来:这一架构不仅解决了现有痛点,也为未来引入交换分层等更高级的I/O调度策略奠定了坚实基础。

本文地址:https://www.xyaji.com/html/738d81998442.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。