Linux 6.9 版本的 IO_uring 更新在几乎结束的合并窗口期间早期合并。这一轮又为这个精彩且创新的内核特性带来了一些新功能。
Linux 6.9 的 IO_uring 更新包括对每环 NAPI 的支持、对截断的支持、公开 SQPOLL 利用状态、使 task_work 内部循环更公平、multi-shot修复以及其他各种修复/清理。
由 Stefan Roesch 长期研究的 NAPI 忙轮询支持已经实现。利用 NAPI 忙轮询时,Stefan 测试的往返时间从 55 微秒降低到 38 微秒。补丁信息中有更多细节,供对这项新 IO_uring 功能感兴趣的人参考。
IO_uring 的截断(ftruncate)支持允许通过 IO_uring 进行原生截断,因此应用程序不再需要设置自己的线程池或卸载来进行非阻塞截断。
更多关于 Linux 6.9 的 IO_uring 更新的细节可以通过拉取请求查看,代码已经在今天的 Linux 6.9-rc1 版本发布前进入 Linux Git.
在行业安全问题达到历史新高的情况下,Linux 6.9 版本正在进一步加强其安全防护,增加了各种额外的安全检查和其他编译时防御措施,以确保最佳的安全实践。
Kees Cook 在 Linux 6.9 合并窗口开始时提交了一系列硬化更新。他总结说这是“相当正常的”,并且在不同的变化和改进方面“到处都是”。
Linux 6.9 正在重新引入未定义行为消毒器(UBSAN)有符号溢出消毒器,以继续测试和改进编译器端,并发现其他方法使该消毒器对每个人更有用。之前由于与“-fno-strict-overflow”编译器选项配对时实际上无效,有符号溢出消毒器被移除。但随着消毒器的改进以及希望更好地检查意外的有符号环绕,消毒器的使用正在被恢复。
硬化拉取还包括各种 Kconfig 更新、头文件更新、删除一个 13 年老的 CAP_SYS_ADMIN 向后兼容性检查,以及其他一些小的变化,都是为了安全硬化。
这次合并后的拉取列出了进一步硬化 Linux 6.9 的变化。
Linux 6.8 在 v6.5 版本中弃用了 SLAB 分配器,现在只留下 SLUB 来处理所有分配任务。对于 Linux 6.9,继续清理 SLAB 的移除,并对 SLUB 进行更多改进。
Vlastimil Babka 提交了 Linux 6.9 的 SLUB(SLAB)变更,并突出显示了以下几点:
–自由列表加载优化(Chengming Zhou)
当每个 CPU 的 slab 耗尽并从 CPU 部分列表中加载新的 slab 时,优化加载过程以避免 IRQ 启用/禁用周期。这在 “perf bench sched messaging” 测试中带来了 3.5% 的性能提升。
–SLAB 移除后的内核启动参数清理(Xiongwei Song)
由于我们有两种不同的主要 slab 实现,我们的启动参数前缀要么是 slab_ 要么是 slub_,随着两种实现都获得相同的功能(即 slab_nomerge vs slub_nomerge),一些参数后来成为别名。为了最终摆脱特定于实现的名称,现在所有规范和文档化的参数都以 slab_ 为前缀,而 slub_ 变体成为已弃用但仍在工作的别名。
–SLAB_ kmem_cache 创建标志清理(Vlastimil Babka)
标志有硬编码的 #define 值,添加新值时变得繁琐且容易出错。通过枚举分配值,该枚举负责提供唯一的位号。还弃用了仅由 SLAB 使用的 SLAB_MEM_SPREAD,因为自 SLAB 移除后它就是一个空操作。将其分配一个明确的零值。标志使用的移除是在各个子系统中独立处理的,计划在下一个版本中最终移除任何剩余的使用。
–杂项清理和修复(Chengming Zhou、Xiaolei Wang、Zheng Yejian)
包括移除未使用的代码或函数参数,以及修复内存泄漏。
这次拉取提供了构成 Linux 6.9 合并代码的完整补丁列表.
Linux 内核中长期存在的 speakup 驱动程序是一个语音合成器,它可以作为各种合成器硬件的接口,并且用户空间软件可以通过 /dev/synth 与合成器接口提交数据。在 Linux 6.9 版本中,speakup 驱动程序有了两项有用的改进。
首先,speakup 驱动程序修复了提交到 /dev/synth 的 8 位字符的问题。添加了对无符号字符的支持,以避免在向设备写入 8 位字符时出现乱码的情况。
Linux 6.9 的另一个显著新增功能是为 speakup 驱动程序添加了 /dev/synthu 设备。由于大多数应用程序现在使用 UTF-8 编码,/dev/synthu 是一个在 /dev/synth 之上的新接口,允许合成非拉丁1字符。新的 /dev/synthu 设备限制为 16 位 Unicode,就像 speakup 的其他部分一样,任何奇怪的输入或超过 16 位的将被自动丢弃。
不熟悉这个语音合成 Linux 内核辅助功能的人可以通过 Linux-Speakup.org 了解更多信息和使用方法。
这些 speakup 改进是作为 Linux 6.9 合并窗口的 char/misc 变更的一部分发送的。char/misc 拉取的其余部分是通常的小型和相当随机的驱动程序更新/修复。
uutils 的 Coreutils 0.0.25 新版本在本周末发布,这是用 Rust 编写的 GNU Coreutils 的替代品,用于 Linux 平台和其他系统上的常见工具。
在 v0.0.25 版本中,Rust Coreutils 自上一版本以来通过了额外的 15 个 GNU 测试套件用例。Rust Coreutils 继续朝着与 GNU Coreutils 完全兼容的目标努力,目标是通过所有测试。目前有 437 个测试通过,50 个被跳过,117 个失败。
v0.0.25 版本修复了各种标志,调整了各种错误消息以匹配 GNU 风格,改进了 Android CI,并进行了其他各种错误修复和兼容性增强。
更多关于 uutils Coreutils 0.0.25 版本的详细信息可以通过 GitHub 获得。
此外,推动 Rust Coreutils 进一步发展的是最近从德国的主权技术基金获得的资金支持。
Linux 6.9 版本的基于内核的虚拟机(KVM)变更继续增强开源 Linux 虚拟化软件堆栈的功能。
对于 x86 (x86_64) 上的 KVM,有一个触发模拟事件的优化。开发人员发现这为 VM-Exit 微基准测试提供了大约 10% 的性能改进。
由于重新编写了围绕 x86_64 上的“强制立即退出”的代码,使得供应商代码决定如何以及何时强制退出,因此也有一些改进。这允许对 AMD 和 Intel 处理器进行优化。
还有其他一些较小的优化和代码改进。KVM x86 Xen 模拟代码在 Linux 6.9 中也有所改进。
另一个值得注意的变化是,AMD 现在在 /proc/cpuinfo 中报告一个“ept_5level”标志,用于支持 5 级 EPT 分页的 VMX。这种用户空间查询 5 级分页支持的能力很重要,因为指示支持的 MSR 不容易被用户空间访问。需要这些信息,以便用户空间可以正确配置 AMD 5 级分页配置上的 KVM 虚拟机。
在 KVM RISC-V 方面,支持了 Ztso 和 Zacas 扩展。LoongArch 和 ARM 在这个周期中也看到了各种小的增强。
更多关于 Linux 6.9 的 KVM 变更的详细信息,请通过已经合并的拉取请求查看。Linux 6.9-rc1 应该在今天晚些时候发布,以结束 Linux 6.9 的合并窗口。
Sam Lantinga 今天发布了 SDL3 的预览版本,以鼓励开发者测试新的 SDL 3.0 API。
SDL3 在这个常用于跨平台游戏的跨平台硬件/软件抽象层方面有了许多改进。新增了 Vulkan 渲染器、存储 API、色彩空间和 HDR 相关改进、Steam Deck 的震动支持、子弹出窗口、优先选择 Wayland 而非 X11,并且移除了许多旧代码。
在今天的 SDL 3.0 预发布公告中,API 的新增功能被描述为:
–API 已被大幅重构,以便更易于使用和更一致
–2D 渲染 API 现在支持更高级的色彩空间和 HDR 渲染
–2D 渲染 API 现在有了 Vulkan 后端
–在 test/testffmpeg.c 中添加了使用 ffmpeg 的硬件加速视频播放示例
–形状窗口 API 已被透明窗口替代
–在 SDL_time.h 中添加了时间和日期功能
–在 SDL_camera.h 中添加了对网络摄像头视频捕捉的支持
–在 SDL_pen.h 中添加了对处理笔和平板的支持
–在 SDL_dialog.h 中添加了文件打开和保存对话框的支持
–在 SDL_filesystem.h 中提供了用于处理文件和目录的跨平台功能
–在 SDL_storage.h 中添加了用于处理用户和游戏数据的跨平台抽象
–main() 的处理已移至头文件库,可选的基于回调的程序流程可用
–在 SDL_properties.h 中添加了对简单对象属性的支持。这些属性可用于许多 SDL 对象,并可用于更高级的功能。
更多关于这个 SDL 3 开发者预览版本的下载和详细信息,请通过 GitHub 查看。
Linus Torvalds 刚刚发布了 Linux 6.9 的第一个候选版本,这标志着为期两周的合并窗口正式结束。
我将在接下来的几天里提供我通常的 Linux 内核特性概览,但长话短说,Linux 6.9 有很多重大改进。Linux 6.9 为当今的 4K 显示屏带来了对更大帧缓冲控制台字体的支持,AMD P-State 首选核心支持终于上游化,内核 SMB(KSMBD)文件服务器的持久文件句柄,FUSE 透传模式终于上游化,持续的 Intel Xe 驱动程序启用,更多的 Bcachefs 文件系统工作,Snakebyte 游戏手柄支持,AMD / Intel 笔记本电脑支持改进,Intel FRED 合并,更多的 AMD MI300 系列启用工作,IO_uring 的持续改进等等。
Linux 6.9-rc1 现在可以通过 Git 下载。
Linus Torvalds 在 6.9-rc1 的公告中写道:
“这次合并窗口看起来相当正常。如果你看看差异,你会认为所有变化的大部分又是 AMD GPU 头文件,你并不完全错。整个 6.9rc1 补丁的大约 40% 确实只是自动生成的 AMD GPU 定义。我希望这是不寻常的,但这已经是一种模式。
无论如何,虽然那是按纯行数计算的大量实际变化,但这些都只是基本上的,在大局中并不重要。
相比之下,有意义的是一些非常核心的更新。定时器子系统进行了相当大的重写,有了每个 CPU 的定时器轮,以提高定时器的性能,这对网络来说可能是个大事。另一个相当显著的核心更新是工作队列子系统,其中一个显著的新增功能是对 BH 工作队列的支持。这主要是因为它意味着我们终于有了摆脱任务小程序的方法。任务小程序接口基本上已经被弃用很长时间了,但我们从未真正有过任何好的替代品(线程中断处理程序是一个建议的用例,但在许多情况下并不现实)。”
请继续关注更多的 Linux 6.9 报道,Linux 6.9 稳定版将在大约两个月后发布。