v22
2026-09-05
RSS分层percpu计数器 · v22
引入分层 per-CPU 计数器,改进 RSS 计数精度并调整 mm_struct/cpumask 布局以满足新计数需求。
原始补丁链接
子 Patch(10)
1/10
lib: introduce hierarchical per-cpu counters
引入分级 percpu 计数器(HPCC),用树形结构限制近似误差,减少多核下 RSS 计数更新的竞争,为后续替换 mm RSS 计数提供基础。
2/10
lib: test hierarchical per-cpu counters
新增 HPCC 的 KUnit 测试:覆盖单线程与并发更新,用原子计数器校验精确和,并验证近似比较与误差范围边界。
3/10
mm: improve RSS counter approximation accuracy for proc interfaces
将 mm 的 RSS 跟踪改用分级 percpu 计数器,降低多核系统上的近似误差,提升 /proc 接口 RSS 值准确性,替代原有 per-cpu 计数方案。
4/10
mm: reorder mm_struct flexible array to place mm_cpumask first
调整 mm_struct 中 flexible array 顺序,将 mm_cpumask 放到最前,避免其偏移依赖 HPCC 初始化;mm_cpumask() 不再受 percpu_counter_tree_subsystem_init 时序影响。
5/10
init: move percpu_counter_tree_subsystem_init() earlier in boot
将 percpu_counter_tree_subsystem_init() 提前到 setup_nr_cpu_ids() 之后,因它只依赖 nr_cpu_ids,确保 mm_cache_init 首次调用 items_size 时值已正确。
6/10
lib: inline percpu_counter_tree_items_size with boot-safety sentinel
把 percpu_counter_tree_items_size 改为 static inline,直接读 __ro_after_init 变量,并以 SIZE_MAX 作哨兵;未初始化时 WARN_ON_ONCE 警告并避免静默计算错误偏移。
7/10
lib/hpcc: Document that accuracy is a property of settled counters
仅文档:说明 HPCC 精度界只针对已稳定(Settled)的树;两个计数器比较是各自独立读取,不保证同一时刻。拒绝增加 preempt_disable 或双 pre/post 计数。
8/10
lib/hpcc: Clarify accuracy range documentation
在 compare_delta() 添加近似范围的 ASCII/视觉注释,明确各区间含义,防止评审者被代码误导;仅文档改动。
9/10
lib/hpcc: Introduce wrapped delta helper
引入 wrapped_delta() 辅助函数,用无符号减法实现溢出安全的差值,用于计数器比较;并注明两个计数器差值必须小于 LONG_MAX,否则结果未定义。
10/10
lib/tests/hpcc: Fix hotplug, module unload, and error handling
修复 HPCC 测试中的热插拔、模块卸载与错误路径:处理 ERR_PTR/泄漏/锁/分配大小/worker 丢失,需 kthread_stop 配合 completion 和 task 引用确保工作完成。