腾讯工程师出手!Linux多交换设备I/O调度大重构:彻底干掉全局锁
麦享科技7月14日消息,腾讯工程师Kairui Song近日向Linux内核提交了一组RFC补丁,旨在彻底重构多个交换设备的I/O分配机制。
对于使用交换分层或分层交换处理的复杂服务器场景,这套方案有望显著改善系统性能与可扩展性。

这套补丁引入了一种全新的方法来公平分配多交换设备的I/O负载。其核心改动是完全移除可变的plist和全局锁,进而取消了全局集群缓存。这样一来,分配和轮换可以更加自由地进行。
作为依赖项,该系列还清理并重构了交换设备管理的锁定模式。
此前,每个交换设备都有自己的percpu集群缓存。后来一个提交将集群缓存移到了全局作用域,让所有设备共享同一个全局缓存,以减少对plist的频繁修改。
快速交换分配直接使用每个CPU的集群缓存,设备轮换仍由plist处理。这种设计虽然可行,却引发了多个长期存在的问题。
其中最关键的是,位于设备选择之上的全局CPU集群缓存,与交换分层和分层交换分配等概念存在根本冲突。
plist本身需要plist_requeue()函数来轮换设备以实现轮询,这需要持有swap_avail_lock锁,所有CPU都会争用这把锁。
此外,轮换被认为是慢速路径,为了不触碰plist而采用快慢路径设计,导致了诸多变通方案和设计局限。
新补丁将所有交换设备和新引入的percpu读取器优先级队列,统一由percpu rwsem保护,从而大幅提高了可扩展性。这一设计也为未来的交换分层等新想法做好了铺垫。

💡 网购省钱小技巧
下单前先查历史价格,再领隐藏优惠券,还能享受购物返利,让每一次购物都更划算。
麦享科技

麦享生活微信小程序   麦享生活微信公众号