v2
2026-09-07
mm: restore per-memcg reclaim for NONSLAB shrinkers under nokmem · v2
修复 nokmem 下 THP/zswap shrinker 变非 memcg 感知:恢复 SHRINKER_NONSLAB,list_lru 改用 memcg ID 索引。
原始补丁链接
子 Patch(4)
1/4
mm: memcontrol: drop kmemcg_id and use the memcg ID for list_lru indexing
kmemcg_id is a copy of the memcg ID assigned in memcg_online_kmem(), and is only used as the list_lru xarray index. With cgroup.memory=nokmem the assignment never happens, so every memcg resolves to
2/4
mm: list_lru: keep per-memcg lists with nokmem for NONSLAB-backed lrus
With cgroup.memory=nokmem, __list_lru_init() collapses every list_lru into per-node lists. That is fine for slab objects, which are not charged per memcg without kmem accounting. But a lru backed by
3/4
mm: thp: restore SHRINKER_NONSLAB on the deferred split shrinker
On a system booted with cgroup.memory=nokmem, the deferred split shrinker is quietly demoted to a non-memcg-aware one. As a result, partially unmapped THPs are only split under global reclaim; memcg
4/4
mm: zswap: mark the zswap shrinker SHRINKER_NONSLAB
zswap shrinker 标记 SHRINKER_NONSLAB,cgroup.memory=nokmem 下不会被误当 slab shrinker 而降级,memcg reclaim 仍能按 objcg 回写本 cgroup 的 zswap 页。