-
加速 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
-
修复 PMD 未共享时过宽的 MMU notifier 范围
hugetlb 打洞仅凭可能共享检测就把 MMU notifier 扩到 PUD 边界,KVM 收到 1G 无效化并 zap 无关映射;改为持锁检查 PMD 表实际共享才扩展,Redis-in-VM 的 P99 QPS 劣化从 7.09% 降到 1.45%
-
引入基于 autotuning 的 huge page collapsing 机制
DAMON 新增 hugepage_mem_bp metric 测 huge page 占比,复用 autotuning 调 quota,占比收敛至 10.26%(目标 10%)
-
把 stock 从 mem_cgroup 下沉到 page_counter
把 per-cpu charge stock 从 mem_cgroup 下沉到 page_counter,消除每 cpu 7 槽上限与跨 memcg 连带 drain,memsw 获独立 stock,小批量缺页吞吐最高 +107%
-
优化 ZONE_DEVICE 的 memmap 初始化
用首页播种模板、其余页只刷差异字段再整块复制并配 non-temporal stores 绕 cache 初始化 ZONE_DEVICE memmap,耗时最高降约 67%
-
per-VMA lock 无条件使用与清理
让 per-VMA lock 无条件可用并新增 vma_start_read_unlocked(),fast path 完全避开 mmap_lock
-
swap 不可用时避免拆分 large folio
swap 不可用时按失败原因区分,vmscan 与 shmem 两路只在拆小有望放下时才拆,无 swap 场景的 MADV_PAGEOUT 中位延迟从 743.8ms 降至 181.7ms
-
修复 last region 的无条件跳过
DAMOS quota 游标在 last region 处不再附带无条件跳过,到达时只重置游标、按位置关系判定跳过,修复 last region 从未处理却被永久漏掉
-
保留仍被映射的 dropbehind folio
仍被映射的 dropbehind folio 在 writeback 完成后免于淘汰,映射访问免去重新 fault-in 与重读 I/O
-
引入按优先级划分的分配队列
让 swap 分配的同优先级设备组成只读静态 ring 由 per-CPU 自行轮转、锁换 percpu rwsem,消除全局 plist 链表头争用
-
为 /dev/zero 与 /dev/full splice 全局 zero page
把 /dev/zero 与 /dev/full 的 splice_read 从逐 buffer 分配并清零新页改为直接引用全局 zero page,省去页分配与清零;shmem 的 zero-page splice helper 上移 fs/splice.c 共享
-
停止在 interleave 路径上拷贝状态
interleave 的节点选择器与批量分配器不再在 fault 路径拷贝 nodemask 与节点权重表,权重表改用 SRCU 就地遍历,nodemask 直接遍历并补边界检查,热点函数栈占用降 62% 至 81%
-
为 arm64 添加内核复制特性
按 NUMA 节点复制内核 text 与 rodata(含模块),各节点 CPU 从本地内存取指;Kunpeng 920 四节点微基准最远节点执行耗时降 70%,客户生产环境 CEPH 与 StarRocksDB 提升 5%
-
由 zswap 支撑的可扩展 swap 设备
xswap 解耦 swap slot 与物理后端,换出页只存 zswap,sysfs 创建销毁,cluster_info 按需伸缩,查找 O(1)