-
用 folio_mark_accessed 取代 folio_set_active
改用标记被访问而非设活跃让 readahead 带入的 cold folio 从次旧 generation 起步,不再挤占内存,系统态耗时降约 10%
-
优化 partial refill 后返回对象的路径
为 SLUB refill 后的剩余对象返回加乐观路径,利用 slab 刚取走空闲链表大概率无人改动直接整段接回,省去回填冷缓存行的开销
-
修复 defrag_mode 对不可回收分配的处理
清除不可回收分配慢路径残留的不碎片化标志、放开回退到其它迁移类型,避免 13 GB 空闲下仍分配失败致网络丢包
-
vrealloc 缩小时释放多余物理页
vrealloc 缩小时跨页边界取消映射并归还尾部页,让 vmalloc 占用紧贴实际使用量、不再白占至 vfree
-
移除 READ_ONLY_THP_FOR_FS 并为可写文件启用 file THP
移除只读配置让 file THP 的 3 条创建路径对可写文件全打通,扩大文件大页覆盖面并降低 TLB 未命中
-
swap table 第四阶段统一分配与降低静态元数据
把分散 swap 元数据收敛进统一 swap 表、分配计费合并为单一路径,1TB swap 静态元数据省约 512MB
-
用 RWF_DONTCACHE 提升写性能
把 DONTCACHE 写的回写从写者内联转交后台 flusher 并用 per-bdi 脏页计数器限定范围,让顺序写吞吐提升约 3 倍
-
EOF 处不再设置 PG_readahead
让预读抵达 EOF 即不再设标记,消除空转的异步预读并让末页纳入 mmap 批量映射
-
用 per-ctx 无锁 PRNG 取代 damon_rand
把 DAMON 采样热路径的加密级带锁随机数换成每上下文单个无锁 PRNG,区域数 2 万时 kdamond 单核占用从约 72% 降到 50%
-
把 freelist 构建推迟到新 slab 批量分配之后
SLUB 把新 slab freelist 构建推迟到对象发完之后只为剩余对象构建,省去分配期建好即弃的浪费,分配时间降约 42%~70%
-
改进 MGLRU 回收循环与脏 folio 处理
在 MGLRU 回收循环起始一次算清扫描预算并解耦老化、把脏页冲刷移入循环,让 MongoDB 吞吐提升约 36%
-
收紧 mmap_miss 命中计数
收紧未命中计数只计真正命中、不计缺页重试,让随机访问不再被误判为顺序,无用预读从数百 GiB 降到约 1 GiB
-
lru_add 排空时预先释放 dead folio
在 lru_add 排空前拣出死 folio 直接释放而不进 LRU,每机每分钟省约 260 万次 lruvec 锁获取
-
用批量清零替代 kernel_init_pages
把 init_on_alloc 的逐页临时映射清零改为整段批量清零,16GB HugeTLB 分配快约 2.7 倍