📅 Linux 内核性能日报 - 2026-08-05

进展更新日 · 调度器 · 内核热路径 · 内存 · 性能工具

📊 今日概览

7
分析篇
3
进展更新
4
新增/新内容

🔄 今日进展说明

08-05 以"已有系列的新版本/进展"为主
今天 lore 数据到 08-05 02:58,全天无全新核心性能补丁。识别出 4 篇:其中 3 篇是已有分析主题的新版本(sched/fair NOHZ idle v4、preempt/NMI v4 完整系列、ceph folio 化完整系列)——按"已有重复不重新分析、有新更新则进展补充"原则,生成进展更新报告并关联旧报告;1 篇新内容(rtla/osnoise IPI 追踪)。

⚡ 调度器 / 内核热路径(3 篇)

在 SMT 超线程服务器上,NOHZ idle load balancer(负责替空闲 CPU 做均衡的 ILB)旧选核逻辑会去唤醒一个忙碌 core 的空闲 sibling,在 NVIDIA Vera(Olympus 核)上把正在计算的那个 sibling 的算力持续拉低;本补丁让 find_new_ilb() 优先选择整个 core 完全空闲的 CPU,并保留 fallback 兜底——GEMM 基准 6.2→9.4 TFLOP/s(+50%,作者自报未独立验证)。v4 移除冗余 this_cpu 检查(Prateek Nayak、Vincent Guittot),获 Mete Durlu Reviewed-by。
本报告是 08-04 对 preempt/irq NMI 优化的进展更新:作者 Boqun Feng 在 08-04 发布了完整的 v4 17 补丁系列(此前只分析了 git pull 中 2 个补丁),把"中断禁用层级"用 preempt_count 位域计数(local_interrupt_{disable,enable}()),为 Rust SpinLockIrq 铺路——为此把 NMI 嵌套深度从 4 bit 位域迁到 per-CPU 计数器、腾位给 HARDIRQ_DISABLE 计数字段,并新增 HAS_SEPARATE_PREEMPT_RESCHED_BITS 让 arm64/s390/x86 的"需要重调度"标志与计数分离。08-04 分析的"中断开关省一次 preempt_count 读"优化补丁已按 Peter Zijlstra 意见整体删除。补丁无基准数据,性能收益为机制层面逻辑分析(解读(AI 分析))。
在 CPU 隔离 / 实时延迟分析场景下,IPI(跨处理器中断)打到"本应隔离"的 CPU 上是延迟毛刺的常见元凶,但单个 IPI 往往不触发延迟阈值,只能在 24 小时长跑 timerlat 的尾端才暴露;本系列为 rtla/osnoise 工具新增 --ipi 选项,通过使能 ipi_send_cpu/ipi_send_cpumask 内核 trace 事件、在内核侧按被监控 CPU 过滤、并在用户态按 CPU 累加计数,把 IPI 干扰从 IRQ 计数中单独拆出一列,帮助运维快速定位隔离配置失误——纯用户态工具增强(非内核补丁),无性能基准数据,价值在"诊断能力增强"而非直接提升吞吐或延迟。

🚀 新增性能优化补丁(3 篇)

在 eBPF 可扩容哈希表(BPF_MAP_TYPE_RHASH)的高频查找/更新/删除路径上,当 map 的 key 恰好是 4 或 8 字节(等于一个机器字长)时,把哈希与比较从"通用 jhash 哈希 + memcmp 比较的函数调用/派发"换成由 static const rhashtable_params 驱动的编译期内联 XOR-fold 哈希与单字相等比较,消除每次操作 jhash 间接派发的指令与调用开销;补丁未提供基准数据,收益为机制层面逻辑分析(解读(AI 分析))。Linux 7.2 合入。
在内存受限(memcg 1GB)且大量读取文件页的构建类负载下,MGLRU 原本在每次缺页时就把读入的页标记为活跃(folio_set_active()),导致预读带进来的冷页挤占"受保护"的年轻代、把真正热的工作集挤出内存,引发大量换入换出与 refault;本补丁改用 folio_mark_accessed(),让缺页读入的文件页从"第二旧代"冷起步、只有被真实复用才提升到活跃代——作者在 x86 内核构建(20 线程)实测换入页 -57%、换出页 -47%、内核态 CPU 时间 -9.4%(作者自报,未独立验证)。Linux 7.2 合入。
mm/slab: introduce kmalloc_flags() ★★★ 内存分配器
slab 分配器在为自己维护簿记结构(per-CPU 的 sheaf 对象容器、对象扩展 obj_ext 数组)而发起嵌套 kmalloc 时,分配可能递归回同一个分配器、或在不该自旋的上下文里自旋等待锁;本补丁引入一个能接收内部 alloc_flags 的 kmalloc_flags() 分配入口,使嵌套分配可同时携带"禁止递归 / 免对象扩展 / 非自旋"三类内部策略,并按 alloc_flags 自动分流到普通自旋路径或非自旋 kmalloc_nolock() 路径,为系列彻底移除 __GFP_NO_OBJ_EXT 铺路;补丁未提供基准数据,收益为逻辑分析(解读(AI 分析))。Linux 7.2 合入。

🧠 内存管理(1 篇)

在内核把内存管理 API 从单页 struct page 统一到复合页 struct folio 的大方向下,ceph 是少数仍以 page 操作写回路径的重量级文件系统;本系列(v2,10 补丁)把 ceph 的快照写回等待、数据长度计算、提交写与完成清理等整条写回路径改为直接操作 folio,并删除因此失去全部调用者的 wait_on_page_writeback()、thp_size()、thp_order() 三个 mm 兼容 API——纯重构、作者明确声明无功能变化,未提供性能基准,从减少 page↔folio 往返与缩小 mm API 表面积角度的收益为逻辑推断(解读(AI 分析))。

ℹ️ 生成信息

数据来源:kernel-lore MCP lore_message/lore_eq 串行检索 + 本地 lore 分片 git 存储(逐字 diff)+ 本地内核 git
窗口:2026-08-05(北京时间,lore 数据到 08-05 02:58 UTC+8)· 全子系统性能信号扫描 → 判定四问精排 → 精选 4 篇
每篇按 analyzing-patch-common 新 9 章节结构(系列整体分析 / 性能影响方法论 / 风险落地场景 / 图表决策)
由 reporting-daily-kernel 工作流生成 · 已有重复主题以进展更新形式关联旧报告
⚠️ 免责声明

本站内容均由 AI 基于公开知识辅助生成,仅供学习参考,请勿直接引用作为依据。作者不对信息的准确性、完整性及适用性作保证,亦不对因使用本站内容产生的任何损失承担责任。