当前位置:首页 > 焦点 > 腾讯工程师出手!Linux多交换设备I/O调度大重构:彻底干掉全局锁 正文

腾讯工程师出手!Linux多交换设备I/O调度大重构:彻底干掉全局锁

来源:星锐云联资讯网   作者:知识   时间:2026-07-17 04:31:49

快科技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到全局缓存的彻底演进困境

在理解新方案之前,需回顾交换设备管理的演变历程:

  1. 早期设计:每个交换设备独立维护自己的percpu集群缓存,以减少竞争。
  2. 中期优化:为减少频繁修改plist的开销,后续提交将集群缓存移至全局作用域,实现所有设备共享单一全局缓存。
  3. 当前困境
  4. 快慢路径割裂:快速交换分配直接使用每个CPU的集群缓存,而设备轮换仍由全局plist处理。
  5. 锁竞争严重:plist轮换依赖plist_requeue()函数,必须持有swap_avail_lock,导致所有CPU在此锁上产生激烈争用。
  6. 架构冲突:位于设备选择之上的全局CPU集群缓存,与“交换分层”和“分层交换分配”等现代概念存在根本性逻辑冲突。
  7. 设计局限:为避免触碰plist这一“慢速路径”,开发者不得不采用各种变通方案,导致代码复杂且难以维护。

新方案:Per-CPU RWSEM与优先级队列

新补丁通过以下设计彻底解决了上述问题:

  • 统一保护机制:所有交换设备以及新引入的percpu读取器优先级队列,统一由percpu rwsem(读写信号量)进行保护。
  • 提升可扩展性:通过细粒度的锁机制,大幅降低了CPU间的锁竞争,显著提升了多核环境下的可扩展性。
  • 面向未来:这一架构不仅解决了现有痛点,也为未来引入交换分层等更高级的I/O调度策略奠定了坚实基础。

标签:

责任编辑:时尚