🚀 Linux 性能优化月报

专注内核性能优化 | 数据周期: 最近30天

生成时间: 2026-03-06 15:33:27

📊 本月性能优化概览

总文章数: 14 篇 | 筛选标准: 性能评分≥8分,排除版本发布

本报告专注于 Linux 内核真正的性能优化,包括调度器改进、内存管理优化、BPF增强等核心技术。

调度器 selftests/sched_ext: Add -fms-extensions to bpf build flags 20分
为 sched_ext 的 BPF 测试代码添加了 -fms-extensions 编译选项,修复了在 Clang 17 编译器下的兼容性问题。这使得使用 Microsoft 扩展语法的 BPF 程序能够正确编译,确保测试套件在不同编译器环境下的可用性。
调度器 tools/sched_ext: Add -fms-extensions to bpf build flags 17分
为 sched_ext 的 BPF 测试代码添加了 -fms-extensions 编译选项,修复了在 Clang 17 编译器下的兼容性问题。这使得使用 Microsoft 扩展语法的 BPF 程序能够正确编译,确保测试套件在不同编译器环境下的可用性。
调度器 selftests/sched_ext: Fix peek_dsq.bpf.c compile error for clang 17 17分
为 sched_ext 的 BPF 测试代码添加了 -fms-extensions 编译选项,修复了在 Clang 17 编译器下的兼容性问题。这使得使用 Microsoft 扩展语法的 BPF 程序能够正确编译,确保测试套件在不同编译器环境下的可用性。
性能优化 [$] Reconsidering the multi-generational LRU 14分
重新审视多代 LRU(MGLRU)内存管理算法。该算法于 2022 年底合并到 Linux 6.1 内核,承诺提供更高效的页面置换性能,相比传统 LRU 能更好地识别工作集和冷数据。然而两年过去,MGLRU 的进展陷入停滞,许多发行版仍未默认启用。在即将举行的 LSFMM+BPF 峰会上,内存管理开发者将讨论 MGLRU 的未来:是继续改进还是完全移除。这关系到 Linux 内存管理的未来方向。
BPF/eBPF selftests/bpf: Fix a memory leak in xdp_flowtable test 14分
修复了 XDP flowtable 测试中的内存泄漏问题。在长时间运行的网络测试中,未正确释放的内存会导致系统内存占用持续增长,最终影响测试稳定性和系统可用性。此修复确保了网络数据路径测试的可靠性。
调度器 sched_ext: Fix starvation of scx_enable() under fair-class saturation 11分
修复了 sched_ext 调度器中严重的任务饥饿问题。当公平调度类(CFS)处于饱和状态时,scx_enable() 函数可能导致某些任务长时间无法获得 CPU 时间片,影响实时性要求高的应用。通过优化调度策略,确保在高负载情况下所有任务都能公平获得执行机会,避免优先级反转和延迟抖动。
调度器 sched_ext: Use READ_ONCE() for plain reads of scx_watchdog_timeout 11分
优化了 sched_ext 调度器对 watchdog 超时值的读取操作。在多核环境下,使用 READ_ONCE() 宏确保内存序正确性,防止编译器优化导致的竞态条件。这提升了调度器在极端负载下的稳定性,避免因时间检测不准确导致的误判和性能波动。
调度器 sched_ext: Use READ_ONCE() for the read side of dsq->nr update 11分
改进了 sched_ext 调度器中 dsq(Dispatch Queue)计数器的读取操作。通过使用 READ_ONCE() 确保读取操作的原子性和内存序,避免在多核并发访问时出现数据不一致。这提升了调度器的准确性和性能一致性,特别是在高并发场景下。
调度器 tools/sched_ext: fix strtoul() misuse in scx_hotplug_seq() 11分
修复了 sched_ext 在 CPU 热插拔场景下的序列号解析问题。scx_hotplug_seq() 函数中的 strtoul() 误用可能导致 CPU 动态添加/移除时序列号解析错误,影响系统的可扩展性和稳定性。此修复确保在云计算和数据中心环境中动态调整 CPU 配置时的可靠性。
BPF/eBPF bpf: Improve bounds when tnum has a single possible value 9分
改进了 BPF 验证器在处理 tnum(跟踪数值)时的边界检查逻辑。当 tnum 只有一个确定值时,验证器能够更精确地推导访问边界,减少误报并提升验证效率。这使得更复杂的 BPF 程序能够通过验证,同时保持内核安全性。
调度器 sched_ext: Remove redundant css_put() in scx_cgroup_init() 8分
移除了 sched_ext 中冗余的 css_put() 调用,优化了 cgroup 子系统的引用计数管理。减少了不必要的原子操作和锁竞争,降低了调度路径上的开销,提升了整体调度性能和可扩展性。
调度器 sched_ext: Replace naked scx_root dereferences in kobject callbacks 8分
修复了 sched_ext 中 kobject 回调函数对 scx_root 的裸指针解引用问题。通过引入适当的同步机制,避免了潜在的 use-after-free 和空指针解引用风险,提升了调度器的健壮性和安全性。
内存管理 mm/slab: initialize slab->stride early to avoid memory ordering issues 8分
优化了 slab 内存分配器中 stride 字段的初始化时机。通过提前初始化避免了多核环境下的内存序问题,确保 slab 分配在高速并发场景下的正确性和一致性。这提升了内存分配性能,减少了潜在的竞态条件。
调度器 sched_ext: Fix SCX_EFLAG_INITIALIZED being a no-op flag 8分
修复了 SCX_EFLAG_INITIALIZED 标志位无效的问题。该标志原本设计用于标记调度器初始化状态,但由于实现缺陷成为空操作。修复后确保了调度器状态管理的正确性,避免了潜在的竞态条件和初始化错误。