1. x86/mm 未合并

    仅在 CONFIG_DEBUG_VM 下编译 zapped entry 检查

    zapped entry 的 shadow stack 检查在 CONFIG_DEBUG_VM=n 时只剩空函数调用,SRSO Safe RET 让每次返回都预测失败,逐页 zap 白付分支代价;把 x86 的声明和定义收进 CONFIG_DEBUG_VM,关闭调试时回落到通用空 inline,1 GiB MADV_DONTNEED 匿名内存快 6%,shmem 快 8%,munmap 快 5%

  2. mm 未合并

    让 watermark 检查遵守 ALLOC_NOFRAGMENT

    defrag_mode 下高水位检查把其他 migratetype 的空闲页也算进来,compaction 误判成功、direct reclaim 提前停止;改为按请求的 migratetype 检查,compact_stall 从 30669 降到 7366,64K fault 分配从 7391 升到 20129,4K fallback 从 13832 降到 1339

  3. mm 未合并

    KSM 用 per-VMA lock 降低 mmap_lock 竞争

    KSM 的 VMA 查找与合并路径改用 per-VMA read lock,break_ksm 与 folio_walk 接入锁模式断言,进程退出用 per-VMA write lock 兜住 in-flight walk,同一 mm 的无关 mmap 与 munmap 不再全程阻塞 ksmd,4 个干扰线程下合并耗时 72.45 秒降至 36.61 秒

  4. mm 未合并

    MGLRU 最老 generation thrashing 时强制 aging

    MADV_RANDOM 映射的 page cache 缺页全部落进最老 file generation,驱逐与 refault 同速使 min_seq 停摆、上层 generation 的页永不老化;在最老 generation 的 refault 量超过 lruvec 全部 evictable 页时强制 aging,fio 复现中随机读 IOPS 从 223,364 回到 4,939,524,冷文件驻留从 600 MB 降到 115 MB

  5. mm 未合并

    vmscan 对 dirty folio 批量刷 TLB 降低多核 IPI 开销

    vmscan 把 dirty folio 攒成 folio_batch 整批刷 TLB,多核 IPI 大减,stress-ng bogo ops/s 提升 26.9%

  6. mm 未合并

    内联 zsmalloc 的 obj_malloc() 与 obj_free()

    把 obj_malloc 与 obj_free 标为 __always_inline、alloc_zspage 标为 noinline,让 fast path 内联展开而 slow path 保持独立,避免 AutoFDO 构建下 zs_malloc 从 254 条指令膨胀到 691 条

  7. mm 未合并

    writeback 关闭时 zswap 会拒绝跳过 anon folio

    在 shrink_folio_list() 里按批次预判 zswap 是否拒收,命中即 activate,省去 swap slot 分配与 unmap;3G 内存遍历的 minor faults 从约 78.6 万降到约 30.1 万

  1. mm 未合并

    把 refill_stock 的 uncharge 移出 memcg_stock.lock

    refill_stock() 在 memcg_stock.lock 内调用 memcg_uncharge()/drain_stock(),被 RPS 软中断同 CPU 撞锁后 TCP 吞吐塌陷;改为锁内只改槽位,锁外 uncharge 与 css_put,tcp_rr 吞吐提升 36.24%

  2. mm 未合并

    把 LRU size 统计更新移出 lru_lock 临界区

    folio batch 在 lru_lock 内不再逐 folio 更新 node 与 memcg 统计,改为按 LRU list 聚进栈上 batch,解锁后一次性应用,shmem 80 线程吞吐提升 30%

  3. sched 未合并

    按 LLC 粒度扩展 cache 感知聚合

    为每个 preferred LLC 构造按原始 NUMA 距离和三角数破平的固定 LLC 亲和序列,用 affinity gain 选源并按序列与容量判定迁移;schbench p99 11 档全部改善,最高约 80%,hackbench 多数配置改善,最高约 42%

  4. mm 未合并

    跳过已在迁移目标节点上的 folio

    target_nid 迁移路径先 isolate 同节点 folio 再原样 putback,白拿 LRU 锁、清 PG_lru,DAMON 还要加隔离统计;paddr 和无显式 dest 的 vaddr 在隔离前检查 folio_nid,同节点直接跳过;16 MiB 区域 guest 内核态 cycles 降约 90%,kdamond CPU 时间降约 76%

  5. sched 未合并

    细化 memory tiering 的晋升启发式

    tiering-only 下 free-space bypass 会晋升冷突发页,破坏 DRAM/CXL 容量划分;bypass 改为可关闭的 debugfs 开关,tiering fault 不再喂 AutoNUMA placement,新增 tiering 计数与 70% 窗口启发式调扫描周期;Redis 冷键突发吞吐 +21.5%,P99.9 -19.7%

  6. mm 未合并

    按页核算 per-block dirty folio 的脏页

    iomap 的 per-block dirty 位图让 large folio 可以只脏一小段,mm 却仍按整 folio 记账;改为按脏页数记账并在写回时按块位图释放,pgbench 平均吞吐提升 46.8%,CV 从 23.60% 降到 3.98%

  7. mm 未合并

    重构 zram zcomp 与压缩后端

    zcomp 拆成 per-CPU Read 与 Write stream,消除 Writer→Reader 优先级反转;Read stream 用 rw_semaphore 钉住、excl_lock 串行 mutable state,无状态后端共享解压,跨页对象用 per-request bounce buffer,有状态后端借用远端空闲 dstream;recompression 压缩侧改单例;exclusive zstd 读 IOPS 提升 2.7 倍,shared lz4 提升 50.9%,proxy execution 下最差读延迟仍低于 8.4ms,8 CPU zstd 配字典的 secondary stream 省约 5.33 MB