-
v1 不可用时 memcg 跳过非层级统计更新
memcg 非层级统计数组只有 v1 接口会读,CONFIG_MEMCG_V1=n 时从结构体编译移除,cgroup_no_v1= 封锁 memory 时 flush 取空指针跳过更新,整体 flush 耗时降低 2.2%
-
PTE 映射下 mmap 写的 sub-folio 脏页跟踪
借 folio_mkclean() 的 rmap 遍历回收 PTE 硬件脏位并逐段传给文件系统,缺页路径不再提前置脏整 folio,XFS 上 large folio 每个 folio 写一字节后 msync 的回写量从 512M 降至 1M
-
memblock 用二分查找定位候选区域
memblock_add_range() 与 memblock_isolate_range() 从 index 0 线性扫描改为二分定位第一个可能相交的 region,KHO 恢复 393k 页保留内存的耗时从约 268s 降至约 50ms
-
DMA 页分配改用精确分配
DMA 页分配的 buddy 回退从 get_order 整块分配改为 alloc_pages_exact_nid() 精确分配,非 2 的幂请求不再把取整后的尾部页一并占住
-
把 guest_memfd 后备内存绑定到 NUMA 节点
新增 GUEST_MEMFD_FLAG_BIND_NODE 创建标志,KVM 创建时为指定节点构建 MPOL_BIND 策略并装到整个 guest_memfd inode,不可映射的机密 guest_memfd 也能把全部 folio 落到指定节点
-
清理 folio 计数器与 flag 用法
把 MGLRU 散落的 open-coded 位操作收编为带 debug 检查的 helper,lru_zone_size 改用带符号计数并把下溢检查挪到读侧,收编过程暴露并修复潜伏四年的 generation 计数泄漏
-
分离迁移路径并携带迁移策略
migrate_pages 混合处理三类页改为按类分离三个迁移入口,LRU 批处理收进 LRU 引擎,新增调用者栈上的 migrate_control 把 mode 与 reason 一路带到 ->migrate_folio(),为缓存提示等策略维度留扩展点
-
在 default hierarchy 上跳过非层级的 memcg 统计
非层级 memcg 统计只服务 legacy v1 接口,default hierarchy 上只写不读,改为运行时判定跳过写入、迁回 v1 时从层级数组补齐,rstat flush 的 memcg 范围聚合降 4.1%
-
DAMON 支持 hugetlb 内存的访问监控
paddr 监控接纳 hugetlb folio,rmap walker 按整页 aging 并经 secondary MMU 拿到 guest 访问位;信号真实度修复(aging_flush)拆出,待量化数据补齐后另发
-
在 refault 压力下动态保护 readahead fault folio
引入 per-lruvec readahead/refault credit,file refault 累积 credit,fault 路径 file folio 消耗 credit 换活跃保护,Cassandra 读 p99 从约 9.2-9.5 ms 回落至约 5.8 ms
-
修复超额扫描与 ineligible folio 扫描
超额扫描计入扫描预算避免反复重扫,ineligible folio 一轮内跳过数量达到上限后停扫而非强制隔离,回收进度不再虚增,OOM 按时触发
-
移除针对 THP 的 min_free_kbytes 调整
移除为 THP 抬高 min_free_kbytes 的启发式与全部重算路径,min_free_kbytes 只由页分配器默认计算与 vm.min_free_kbytes sysctl 控制
-
加速 MGLRU 的 inc_min_seq() 并修复 cold/hot inversion
inc_min_seq() 的计数与搬移批量化,并修复两处 cold/hot inversion,512MB lruvec 单次 aging 平均耗时从 4.990 ms 降至 2.343 ms,arm64 PTE 路径从 7.644 ms 降至 2.964 ms
-
引入基于 autotuning 的 huge page collapsing 机制
DAMON 新增 hugepage_mem_bp metric 测 huge page 占比,复用 autotuning 调 quota,占比收敛至 10.26%(目标 10%)