-
kmemleak 批量扫描 struct page 数组
kmemleak 的 struct page 扫描由每页取一次锁改为按 MAX_SCAN_SIZE 攒段批量扫描,struct page 阶段的 scan_block 调用从 4390k 次降到 69k 次,debug 内核整轮扫描快约 20%
-
MADV_PAGEOUT 的页在 swap 写回完成时即释放
MADV_PAGEOUT 在异步 swap 设备上只打 PG_reclaim 标记并不真正释放内存,改为隔离时打 dropbehind 标记,写回完成即从 swap cache 摘下,内存随每次写完成立即回收
-
zswap writeback 完成后及时释放 cold folio
扩展 dropbehind 到 swap cache folio,zswap 写回完成即释放 cold folio,MySQL OLTP +6.1%、内核构建 -3.6%
-
通过挂载到 cgroup 的 struct_ops 定制 memcg 策略
新增可挂到 cgroup 的 struct_ops 类型 bpf_memcg_ops,首个成员 high_policy 让 BPF 决定 memory.high 在何处执行;示例标记持 cgroupfs kernfs 锁的任务并把内联回收延后到返回用户态,锁最长持有时间从 2.049 秒降到 199 微秒,旁观负载吞吐恢复
-
把 memcgid 引用计数移入 objcg 让 dying memcg 不再被钉住
memcgid 引用计数从 css 移入 objcg,xarray 改持 objcg 引用,offline 时 reparent 让残留 ID 引用解析到祖先,换出页不再钉住 dying memcg
-
从 barn 补充预填充的 sheaf
sheaf 补充此前只从 partial slab 取对象,barn 的 full 列表饱和后 RCU sheaf 只能 flush 回 slab,本补丁让补充优先从 barn 取并引入 partial sheaf 收留剩余对象,will-it-scale mmap1 吞吐提升 24.2%,page allocator churn 下降 97.76%
-
改变 pfn range 时优化 zone 连续性检查
zone 新增 pages_with_online_memmap 计数代替全 zone 扫描判定连续,256G/512G 插拔耗时降 64%-81%
-
内核在线更新期间不间断运行的孤儿虚拟机
KHO/LUO 已能跨 kexec 保留 guest RAM 与设备状态,但物理 CPU 会被复位,vCPU 在整个 blackout 窗口被迫停顿。本系列引入四层架构:内核内 vCPU 状态 LUO 保留、cpu_preserve 物理 CPU 保留、oncore 核上时间片调度、KVM Caretaker 执行引擎,让 VM 在宿主机内核 live update 期间于保留 CPU 上不间断执行,覆盖 Intel VMX、AMD SVM 与 ARM64 VHE,新内核启动后经控制块状态机回收 vCPU 恢复正常执行
-
把错过轮转的 folio 放到 LRU 尾部
传统 active/inactive LRU 回收中,异步 swap 设备写回快于回收批次处理时 folio_rotate_reclaimable() 落空,已写回的干净 folio 被放回 LRU 头部造成冷热反转。本 patch 给 move_folios_to_lru() 增加 do_rotate 参数,在 shrink_inactive_list() 放回路径把疑似错过轮转的 folio 改放 LRU 尾部,测试环境空闲内存从 299Mi 升到 322Mi,swap 已用从 678Mi 降到 328Mi
-
让 xswap 页写回物理 swap 后端
xswap 基础系列中 swapout 页全部留在 zswap 池,池满拒绝后页无处可去形成 livelock,且按物理 swap 计费名不符实。本系列为 xswap slot 引入物理后端:zswap 拒绝时在最高优先级真实 swap 设备取 slot 一页一次 IO 写入,两侧 swap table 互相登记,读回跟随指针从后端读,配套 swapoff 回读、冗余 slot 回收、large folio 连续预留与 THP swapin,计费改为拿到后端才收,memory.swap.current 只计真实磁盘占用
-
WP fault 时一次性复用整个 exclusive large folio
fork 后父进程 WP fault 的复用检查对整个 large folio 成立却只处置触发页,本系列在确认 folio 为 exclusive 后把 VMA 内映射它的整段 PTE 成批标记 exclusive 并置可写,64K folio 上 256 MiB 逐页写的 WP fault 从 65601 次降到 4164 次、耗时从 30.8 ms 降到 5.7 ms,Redis BGSAVE 后 redis-server 的 CPU 时间降约 10%
-
为 shmem 增加 mTHP collapse 支持
khugepaged 此前只能把 shmem 折叠成 PMD 大小的 THP,本系列沿用匿名 mTHP collapse 的 bitmap 策略让 shmem 可按多阶折叠,扫描时记下哪些页已填充内容、扫完按实况选择最有效阶数,只开非 PMD 阶的配置也能唤醒折叠
-
为 VM 统计接口新增合成性能基准
新增 KUnit 模块 vmstat_kunit,对热路径高频调用的 VM 统计接口做 10000 次循环的双时钟计时,量化单次操作的 cycle 与纳秒开销,为改进或回归分析提供可重复的合成基准
-
在 cgroup v2 上实现 memsw 限制
为 cgroup v2 实现 v1 已有的内存加 swap 合并限制,新增 memory.memsw.current 与 memory.memsw.max,并为此把 page_counter 的 protection 字段拆出独立结构使其从 192 字节降到 128 字节,抵消了拆分计数器的内存成本