-
zswap 用 pool id 为 zswap_entry 瘦身
zswap_entry 的 pool 指针改用 u8 pool id,pool 表换成按需分配 id 的 xarray,entry 从 56 缩至 48 字节,每 1GiB 省约 2MiB 元数据
-
按访问模式分组 memcg 结构体字段
memcg 字段挪动反复引入 false sharing 回归,把 struct mem_cgroup 与 struct mem_cgroup_per_node 的字段按访问模式分进命名 cacheline 组,memcg_struct_check() 在编译期校验布局契约,实测提升 0.8% 至 1.3%,无回退。
-
为 vmap drain 启用专用 unbound workqueue
vmap drain 此前经 system_wq 以 bound worker 运行,高 CPU 数机器上超 10ms 触发告警;迁到专用 WQ_UNBOUND 加 WQ_MEM_RECLAIM 队列并拆分父子队列,顺带简化 helper 调度
-
为 memcg memory.reclaim 增加显式回收目标
memory.reclaim 新增 goal=progress、goal=evict、goal=demote 三个显式目标,tiering 系统上 evict 让 demotion 不再计入完成量,demote 只做分层放置不驱逐,用户态控制器重获确定的回收语义
-
修复 MGLRU 下的 shadow node 预算
count_shadow_nodes() 经 lruvec_lru_size() 统计可驱逐页,而 MGLRU 不维护其依赖的 lru_zone_size 数组,shadow node 预算只剩零头致 workingset 保护失效;统计源换回 lruvec_page_state_local() 并把 dying memcg 统计重定向扩到所有层级后恢复
-
为 RSS 引入层级 per-CPU 计数器
引入层级 per-CPU 计数器通用库并替换 per-mm RSS 计数,近似误差以 O(N·logN) 为界,384 逻辑 CPU 上 /proc RSS 偏差从约 1GB 降到约 80MB
-
MADV_WILLNEED 预取私有文件映射的 COW swap 页
MADV_WILLNEED 对发生过 COW 的私有文件映射补走 PTE 遍历预取 swap 页,后续访问同步换入从 16718 页降为 0,访问耗时从 752 ms 降到 55 ms
-
修复 pmd_modify() 丢弃 dirty bit
pmd_modify() 剔除 _PAGE_DIRTY,可写脏 PMD 修改权限后脏状态凭空消失;补回 _PAGE_DIRTY 后,MADV_FREE 与 NUMA hinting 链路下的数据静默丢失随之消除
-
降低 FS-DAX pmem 的 struct page 开销
FS-DAX pmem 注册时 vmemmap 全部指向共享只读页,DAX fault 插入用户态映射前才物化私有副本,从未 fault 的 PFN 既不占 vmemmap 内存也跳过 struct page 初始化
-
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 落到指定节点