v1
2026-09-18
memcgid 引用计数移入 objcg · v1
把 memcg 私有 ID 的引用计数从 memcg 移到 objcg,使正在消亡的 memcg 不再被 ID 引用钉住,从而能够正常释放。
原始补丁链接
子 Patch(4)
1/4
memcg: keep swap charging under RCU protection
swap charge 路径在持有 private ID 引用后不再提前释放 RCU 读锁,继续用 RCU 保护 memcg 计数和统计访问,并先保存 memcgid 供 swap entry 记录,为 ID 引用转 objcg 做准备。
2/4
memcg: base swap charge accounting on memcgid root status
改用 swap entry 携带的 memcgid 是否属于 root 决定 charge/uncharge,而非当前解析到的 memcg;避免 ID 重父后非 root entry 被跳过,导致 memsw/swap 计数泄漏。
3/4
memcg: manipulate memcg private ID references by ID
将 memcg private ID 的 get/put 改为直接接收 ID,新增 kill 拆分在线引用释放,使 swap uncharge/rollback 不再依赖 memcg 指针,为把 ID 引用搬到 objcg 并允许 memcg 释放铺路。
4/4
memcg: move memcg private ID refcount to objcg
把 memcgid 引用计数从 memcg/css 移到该 memcg 的 objcg 并存入全局 xarray,使 swap entry 不再钉住待释放 memcg;获取时比对 memcgid 返回 NULL,并为 LRU/workingset 走查加死亡检查。