v1
2026-07-14
引入优先级队列替代全局集群缓存 · v1
用优先级队列替代plist和全局锁,实现多swap设备IO公平分配,消除全局集群缓存,支持swap分层。
原始补丁链接
子 Patch(13)
1/13
mm/swap: remove unused parameter for reading swap header
移除 read_swap_header 中未使用的参数,仅做代码清理,无功能变化。
2/13
mm/swap: slightly cleanup the code for hibernation error handling
重构 pin_hibernation_swap_type() 错误路径为 goto out 模式,简化 unpin 和 find_first_swap 的返回流程。
3/13
mm/swap: cleanup and document swap device availability flag usage
重写 swap 设备标志和元数据处理,引入 swap_device_enable/disable 作为暴露/隔离设备的清晰边界,并添加生命周期注释。
4/13
mm/swap: introduce swap device iteration helper
引入 for_each_swap() 迭代辅助函数,统一 swap 设备遍历模式,为后续移除锁约定做准备。
5/13
mm/swap: change the swapon lock into a percpu rwsem
将 swapon_lock 从 spinlock 改为 percpu rwsem,使读者可并发执行,减少 swapon/swapoff 罕见操作对热路径的影响。
6/13
mm/swap: remove swapon mutex and update proc reader
移除冗余的 swapon_mutex,将 /proc/swaps 读取器转换为使用 swapon_rwsem,并统一使用 for_each_swap() 迭代。
7/13
mm/swap: consolidate swap inuse accounting helpers
内联 swap_usage_add/sub 辅助函数到唯一调用者,并重命名以反映其实际功能:跟踪每设备 inuse 页计数。
8/13
mm/swap: change back to use each swap device's percpu cluster
回退到每设备 percpu cluster,解决全局 cluster 导致的设备选择策略冲突、优先级反转和分配路径复杂化问题。
9/13
mm/swap: add priority queue for swap device allocation
引入基于优先级的环形队列替代 plist,消除 swap_avail_lock 的全局争用,每 CPU 维护独立迭代器实现无锁读取。
10/13
mm/swap: remove available list
移除已无用的 swap_avail_head 和 swap_avail_lock,__folio_throttle_swaprate() 改为在 swapon_rwsem 下遍历 swap_active_head。
11/13
mm/swap: perform sync discard on single device more proactively
实现单设备主动同步 discard,替代旧的全设备耗尽时全局 discard 工作区,利用设备内 cluster 缓存简化逻辑。
12/13
mm/swap: drop swap active plist
移除 swap_active_head plist,所有需要优先级排序的消费者已迁移到优先级队列,剩余用户只需找到任意可写设备。
13/13
lib/plist.c: remove requeue function
移除 plist_requeue 函数,其最后一个用户(swap 优先级队列)已被替换,清理无用代码。