系统极客一直在努力
专注操作系统及软件使用技能

Linux 7.2 内核发布:引入缓存感知调度,ext4、Btrfs 读写提速

Linux

Linux 7.2 内核正式发布!主要带来了缓存感知调度(Cache-aware scheduling)、ext4 和 Btrfs 文件系统性能优化,以及一批新的笔记本与外设硬件驱动。

在为期 9 周的开发周期里,合并窗口共有超过 2100 位开发者参与贡献。LWN 统计 commit 发现,Linux Kernel 7.2 中大约有 5% 的提交带有assisted-by标签,标明这些提交使用了 AI 辅助。

本次更新在加增新特性的同时,还清理了不少历史包袱:删除了 13000 多行老旧的 i486 CPU 模拟代码,移除了已有 40 年历史的 Hercules 显卡驱动、AppleTalk 网络协议,以及 ISA 与 PCMCIA 架构下的 ARCnet 驱动。

因部分 AMD 显卡出现性能回退,原本计划随 7.2 内核上线的「更公平的 GPU 调度器」在最后一刻被回退,调度逻辑暂时切回原来的 FIFO 机制。

Linux 7.2 内核主要更新

缓存感知调度

Linux Kernel 7.2 的任务调度器引入了缓存感知能力,能识别出属于同一个进程的线程,并优先把它们安排在共享同一级缓存的核心上运行。

  • 之前的调度器在分配负载时,只看 CPU 核心之间是否均衡,并不检查不同核心上的线程是否在共享内存。这会导致不同核心反复重新拉取或同步同一份数据,产生缓存颠簸(Cache bouncing)。
  • 为了防止单个进程占满同一个缓存域(Cache domain)拖慢系统,内核增加了约束:当某个进程占用的 CPU 时间超过 25%,或者占用该域负载超过 33% 时,调度器就不会再往这个缓存域迁移更多线程。

拥有多个缓存域的 AMD 和 Intel 处理器受益最大,实际收益取决于具体的 CPU 架构和负载类型。

管道写锁优化

|管道「写操作」的加锁逻辑进行了调整,缩短了写入过程中「持有锁」的时间。这项改动在特定场景下,能带来 6%~28% 的性能提升,写入延迟降低 5%~22%。

内存吃紧时,改善更加明显:在高频依赖管道通信和脚本批处理的场景下,能稳定降低排队等待时间。日常桌面操作很难直接感知到这个变化。

MGLRU 内存回收路径收紧

Linux 7.2 内核对多代 LRU(MGLRU)算法进行了优化,理顺并收紧了内存回收循环以及脏页(Dirty pages)的回写路径。

在 YCSB 测试的 MongoDB 负载下,吞吐最高提升了约 30%,并减少了内存吃紧时意外触发 OOM 杀进程的情况。

ext4 文件系统优化

ext4 修复了高负载下的锁争用与死锁问题。核心改动在快速提交(Fast commit)机制上,移除了重负载下的锁争用,相关统计信息现在可以使用/proc/fs/ext4/*/fc_info查看。

另一处和 XFS 共用的改动,是去掉了内核iomap层中多余的一步内存清理操作。在使用io_uring轮询模式的 NVMe 固态硬盘上,4KB 随机小文件读取性能提升了约 5%。

此外,目录查找现在会按「4 字节块」处理数据,在包含大量文件的深层或密集文件夹中,文件检索速度会更快。

NTFS、exFAT 与 Btrfs

  • NTFS:补齐了对原生 Windows 符号链接的支持,修复了此前符号链接有时显示为 0 字节文件的 bug,并增强了对磁盘元数据损坏的容错处理。
  • exFAT:改用内核的iomap框架,重负载下的写入速度明显提升,最高写入增幅达 87%。
  • Btrfs:从 Linux 6.17 开始试验的 Large folios 特性在 7.2 中改成了默认开启,允许文件系统以更大的内存块管理数据,降低元数据开销。同时,Direct I/O 不再强制串行执行,写入性能最高提升了约 59%;对单次回写请求的大小设了上限之后,顺序写入性能也提升了 15%。

USB4 点对点线缆直连传输

Linux 7.2 新增了 USB4STREAM 协议支持。两台设备通过 USB4 或雷电线缆直连时,不需要配置网络就能直接互传数据,该协议也能和现有雷电网络并存。

新驱动会在两端系统上生成/dev/tbstreamX设备文件,直接使用catechodd等基础工具,就能通过线缆传输数据。

/proc 状态文件读取加速

在用于展示系统状态的虚拟文件系统中,/proc/filesystems(记录支持的文件系统)和/proc/interrupts(记录硬件中断)的生成逻辑进行到了重构。

/proc/filesystems为例,内核把原来每次读取时,实时构建的逻辑改成了预先生成,单进程读取速度最高提升了 140%。在 20 个进程并发读取时,提速最高达 444%。这样能直接减轻各类高频采集系统状态的监控工具和运维脚本的开销。

Linux Kernel 7.2 硬件与驱动支持

笔记本适配

  • 充电管理:Uniwill 驱动(TUXEDO 电脑使用)支持电池充电模式切换;Microsoft Surface 驱动新增了对 Surface Pro 12 英寸版本的支持;联想拯救者(Legion)更多机型支持通过wmi驱动设置充电上限。
  • 输入与屏幕:支持 HP ZBook Ultra G1a 上的 AMD ISP4 摄像头;适配了一批 Wacom W9000 系列压感触控屏,常用于带手写笔的二合一设备。
  • 音频修复:修复了 HyperX OMEN 16-ap1xxx(AMD Ryzen 7/9 平台)的内置麦克风阵列问题;解决了联想 Yoga 7 16IAP7 和 Legion 7i 16IAX7 的音频异常。
  • 老硬件与新平台:初代 Microsoft Surface RT 平板(Model 1516)在 7.2 内核下可以正常读取电池容量和充电状态;搭载 Apple M3 芯片的 MacBook Pro、MacBook Air 和 iMac,现在支持引导进入控制台,Asahi Linux 的适配工作仍在推进。

外设与网络设备

  • 控制器与外设:修复了 Rakk Dasig X 鼠标侧键因 HID 报告描述符错误导致无法使用的问题;补上了 PlayStation DualSense Edge 手柄背键支持;Valve 提交的 OneXPlayer 配置驱动现已合并进主线;第三方 HORI 无线 Switch 手柄支持免驱即插即用。
  • 网络芯片:支持 10Gbps USB 网卡常用的 Realtek RTL8159 芯片,以及水星 MA60XNB、网件 Nighthawk A8500 等 Wi-Fi 7 无线网卡;新增集成蓝牙的 Realtek 8922AU 和 8922AE 驱动;支持主板常见的联发科 MT7927(Filogic 380)芯片,提供了完整的 Wi-Fi 7(6GHz 频段 2+ Gbps)与蓝牙 5.4 支持。
  • 主板监控:华硕、华擎多款桌面主板(包括华擎 Z890 Pro-A)新增了温度与风扇转速监控支持,并加入了 ARCTIC 风扇控制器驱动。

Linux 7.2 其余改动速览

  • khugepaged支持将内存合并为多种大页尺寸(Multi-size THP);
  • Landlock安全模块新增了对 UDP bind、connect 和 send 的访问控制;
  • openat2()系统调用新增标志位,允许程序显式拒绝打开设备文件;
  • NFS 与 ksmbd 服务端支持向客户端报告大小写不敏感的文件系统;
  • 废弃了近期曝出安全隐患的AF_ALG密码学接口;
  • 内核源码树彻底移除了容易引发缓冲区溢出的strncpy()
  • AMDGPU 初步支持 HDMI 2.1 FRL 模式;
  • 修复了 PCIe 2.5 GT/s 链路速率协商异常;
  • 新增了对 AMD Zen 6 EPYC 处理器的初步支持;
  • Intel TDX 支持免重启更新运行时模块;
  • 推进 Wi-Fi 8(802.11bn)前期基础协议支持;
  • Swap 映射表优化进入到第 4 阶段;
  • sched_ext引入子调度器提供底层架构支持;
  • 优化了基于RWF_DONTCACHE标志的写入性能。

Linux Kernel 7.2 的完整变更细节请阅读 LWN 的合并报告第 1 部分第 2 部分,或者直接查看内核源码仓库的 commit 记录

赞(0)
分享到

评论 抢沙发