v5 2026-09-01

将memcg stock移到page_counter · v5

重构memcg逐CPU计费缓存stock,从mem_cgroup移到page_counter,用raw_spinlock_t与异步drain,降低charge/uncharge热路径开销。

原始补丁链接

子 Patch(7)

1/7
mm/memcontrol: flatten try_charge_memcg control flow
扁平化 try_charge_memcg 中嵌套的 memsw/memory page_counter 操作,为两者分离成功/失败路径,为后续 stock 化做准备;无功能变化。
2/7
mm/page_counter: report the number of pages charged
为 page_counter_try_charge() 增加 @nr_charged 参数返回实际计入层级的页数;try_charge_memcg 用它更新 memcg_nr_pages_over_high,应对 stock 不增长层级的情况。
3/7
mm/page_counter: introduce per-page_counter stock
将 memcg per-cpu stock 下推到 page_counter 层,每个 counter 独立缓存;消除 7 memcg 上限、整 CPU 全 drain 和扩展性问题。
4/7
mm/page_counter: use stock in page_counter_try_charge
page_counter_try_charge() 优先使用 stock:先限流检查,贪心从层级 refill,失败精确重试,多余回充;NMI/锁竞争/大批量退回层级。暂未启用,行为不变。
5/7
mm/page_counter: introduce an asynchronous drainer
用 per-page_counter 异步 drain worker 替代 per-cpu memcg stock 排干;一次遍历所有 CPU 只清目标 counter,避免误伤其他 memcg,并合并重复请求。
6/7
mm/memcontrol: convert memcg to use page_counter_stock
memcg 改用 page_counter_stock:每个非 root memcg 每 CPU 16 字节 GFP_KERNEL_ACCOUNT 分配;移除 !allow_spinning 特例,v1 memsw.usage 语义变化。
7/7
mm/memcontrol: add stock to the memsw page_counter
On Tue, 1 Sep 2026 11:40:31 +0200 Michal Koutný mkoutny@suse.com wrote: > Hello Joshua. > > On Mon, Aug 31, 2026 at 09:37:51AM -0700, Joshua Hahn joshua.hahnjy@gmail.com wrote: > > Before this se