Linux 5.18 内核版本

经过两个月的开发,Linus Torvalds 发布了 Linux 内核 5.18。 最显着的变化包括:对过时功能进行了重大清理,宣布 Reiserfs FS 已过时,实施了用户进程跟踪事件,添加了对阻止 Intel IBT 漏洞利用的机制的支持,启用了缓冲区溢出检测模式使用 memcpy() 函数,添加了跟踪 fprobe 函数调用的机制,改进了 AMD Zen CPU 上任务调度程序的性能,包含了用于管理 Intel CPU 功能 (SDS) 的驱动程序,集成了一些补丁用于重组头文件,并已批准使用 C11 标准。

新版本包含来自 16206 名开发人员的 2127 个修复(在上一个版本中,有来自 14203 名开发人员的 1995 个修复),补丁大小为 108 MB(更改影响了 14235 个文件,添加了 1340982 行代码,删除了 593836 行代码)。 44 中引入的所有更改中大约 5.18% 与设备驱动程序相关,大约 16% 的更改与更新特定于硬件架构的代码相关,11% 与网络堆栈相关,3% 与文件系统相关,3% 与文件系统相关。与内部内核子系统相关。

内核5.18的主要创新:

  • 磁盘子系统、I/O 和文件系统
    • Btrfs 文件系统添加了对执行发送和接收操作时转发压缩数据的支持。 以前,当使用发送/接收时,发送端解压缩以压缩形式存储的数据,接收端在写入之前重新压缩它。 在 5.18 内核中,使用发送/接收调用的用户空间应用程序能够传输压缩数据而无需重新打包。 该功能的实现得益于新的 ioctl 操作 BTRFS_IOC_ENCODED_READ 和 BTRFS_IOC_ENCODED_WRITE,它们允许您直接读取和写入信息到盘区。

      此外,Btrfs 还提高了 fsync 性能。 添加了对整个存储进行重复数据删除和执行引用链接(通过创建现有数据的链接而不实际复制数据来克隆文件元数据)的功能,而不仅限于安装点。

    • 在直接 I/O 模式下,当 fscrypt 使用内联加密时,可以访问加密文件,其中加密和解密操作由驱动器控制器而不是内核执行。 对于常规内核加密,使用直接 I/O 访问加密文件仍然是不可能的,因为文件的访问绕过了内核中的缓冲机制。
    • NFS 服务器默认支持 NFSv3 协议,现在不需要单独启用,一般启用 NFS 即可使用。 NFSv3 被认为是 NFS 的主要且始终受支持的版本,将来可能会停止对 NFSv2 的支持。 读取目录内容的效率显着提高。
    • ReiserFS 文件系统已弃用,预计将于 2025 年删除。 弃用 ReiserFS 将减少维护与支持新挂载 API、iomap 和 tomes 相关的文件系统范围更改所需的工作量。
    • 对于F2FS文件系统,已经实现了映射挂载文件系统的用户ID的功能,用于将挂载的外部分区上的特定用户的文件与当前系统上的另一个用户的文件进行比较。
    • Device-mapper 处理程序中用于计算统计信息的代码已被重新​​设计,这显着提高了 dm-crypt 等处理程序中的统计准确性。
    • NVMe 设备现在支持 64 位校验和进行完整性检查。
    • 对于exfat文件系统,提出了一个新的挂载选项“keep_last_dots”,该选项禁用清除文件名末尾的点(在Windows中,默认情况下删除文件名末尾的点)。
    • EXT4 提高了 fast_commit 模式的性能并提高了可扩展性。 “mb_optimize_scan”挂载选项可以提高大型文件系统碎片情况下的性能,适用于处理带有扩展的文件。
    • 支持块设备的子系统中对写入流的支持已停止。 此功能是针对 SSD 提出的,但并未广泛普及,目前还没有使用中的设备支持此模式,并且将来也不太可能出现。
  • 内存和系统服务
    • 一组补丁的集成已经开始,通过重组头文件的层次结构和减少交叉依赖的数量,可以显着减少重建内核的时间。 内核 5.18 包含优化任务调度程序头文件 (kernel/sched) 结构的补丁。 与之前的版本相比,组装内核/调度/代码时的CPU时间消耗减少了61%,实际时间减少了3.9%(从2.95秒减少到2.84秒)。
    • 内核代码允许使用11年发布的C2011标准。 此前,添加到内核的代码必须符合 89 年制定的 ANSI C (C1989) 规范。 在 5.18 内核构建脚本中,“—std=gnu89”选项替换为“—std=gnu11 -Wno-shift-负值”。 考虑了使用 C17 标准的可能性,但在这种情况下,有必要增加 GCC 的最低支持版本,而包含 C11 支持符合 GCC 版本 (5.1) 的当前要求。
    • 采用 Zen 微架构改进了 AMD 处理器上的任务调度性能,为具有本地内存通道的每个节点提供多个末级缓存 (LLC)。 新版本消除了 NUMA 节点之间的 LLC 不平衡,从而显着提高了某些类型工作负载的性能。
    • 用于跟踪用户空间中的应用程序的工具已得到扩展。 新的内核版本增加了用户进程创建用户事件并将数据写入跟踪缓冲区的能力,可以通过标准内核跟踪实用程序(例如 ftrace 和 perf)查看这些数据。 用户空间跟踪事件与内核跟踪事件隔离。 可以通过文件/sys/kernel/debug/tracing/user_events_status查看事件状态,通过文件/sys/kernel/debug/tracing/user_events_data进行事件注册和数据记录。
    • 添加了跟踪(探测)函数调用的机制 - fprobe。 fprobe API 基于 ftrace,但仅受限于将回调处理程序附加到函数入口点和函数出口点的能力。 与 kprobes 和 kretprobes 不同,新机制允许您同时使用一个处理程序处理多个函数。
    • 已停止支持未配备内存管理单元 (MMU) 的旧版 ARM 处理器(ARMv4 和 ARMv5)。 保留对没有 MMU 的 ARMv7-M 系统的支持。
    • 晶心科技处理器中使用的类 RISC NDS32 架构的支持已停止。 由于缺乏维护以及主 Linux 内核中缺乏对 NDS32 支持的需求(其余用户使用硬件制造商的专门内核版本),该代码被删除。
    • 默认情况下,对于 alpha 和 m68k 体系结构禁用构建支持 a.out 可执行文件格式的内核,这些体系结构继续使用该格式。 对旧版 a.out 格式的支持可能很快就会从内核中完全删除。 自 2019 年以来一直在讨论删除 a.out 格式的计划。
    • PA-RISC 架构为 vDSO(虚拟动态共享对象)机制提供最低限度的支持,该机制提供用户空间中可用的一组有限的系统调用,而无需上下文切换。 vDSO 支持使得实现使用不可执行堆栈运行的能力成为可能。
    • 增加了对Intel HFI(硬件反馈接口)机制的支持,该机制允许硬件向内核传输有关每个CPU当前性能和能效的信息。
    • 添加了适用于英特尔 SDSi(软件定义芯片)机制的驱动程序,该驱动程序允许您控制处理器中附加功能的包含(例如,专用指令和附加高速缓存)。 这个想法是,可以以较低的价格提供芯片,并锁定高级功能,然后可以“购买”这些芯片并激活附加功能,而无需更换芯片的硬件。
    • 添加了 amd_hsmp 驱动程序以支持 AMD HSMP(主机系统管理端口)接口,该接口通过一组特殊寄存器提供对处理器管理功能的访问,这些寄存器出现在从 Fam19h 一代开始的 AMD EPYC 服务器处理器中。 例如,通过HSMP您可以获取功耗和温度数据、设置频率限制、激活各种性能增强模式以及管理内存参数。
    • io_uring 异步 I/O 接口实现 IORING_SETUP_SUBMIT_ALL 选项以在环形缓冲区中注册一组文件描述符,并实现 IORING_OP_MSG_RING 操作以将信号从一个环形缓冲区发送到另一个环形缓冲区。
    • DAMOS(基于数据访问监控的操作方案)机制允许在考虑内存访问频率的情况下释放内存,扩展了从用户空间监控内存操作的功能。
    • 第三系列补丁已与页面作品集概念的实现相集成,该页面作品集类似于复合页面,但改进了语义并更清晰地组织了工作。 使用 tomes 可以加快某些内核子系统中的内存管理速度。 在提议的补丁中,内部内存管理函数被转换为 folios,包括 get_user_pages() 函数的变体。 提供对在预读代码中创建大量卷的支持。
    • 汇编系统现在支持 USERCFLAGS 和 USERLDFLAGS 环境变量,您可以使用它们将附加标志传递给编译器和链接器。
    • В подсистеме eBPF в механизме BTF (BPF Type Format), предоставляющем информацию для проверки типов в псевдокоде BPF, реализована возможность добавления аннотаций к переменным, ссылающимся на области памяти в пространстве пользователя. Аннотации помогают системе верификации BPF-кода более качественно выявлять и проверять обращения к памяти.
    • 提出了一种用于存储加载的 BPF 程序的新内存分配处理程序,它允许在加载大量 BPF 程序的情况下更有效地使用内存。
    • madvise()系统调用中添加了MADV_DONTNEED_LOCKED标志,它提供了优化进程内存管理的工具,它补充了现有的MADV_DONTNEED标志,通过该标志可以提前通知内核即将释放的内存块,即该块不再需要并且可以被内核使用。 与 MADV_DONTNEED 不同,MADV_DONTNEED_LOCKED 标志的使用对于固定在 RAM 中的内存页面是允许的,当调用 madvise 时,这些内存页面将被逐出而不更改其固定状态,并且在后续访问该块并生成“页面”的情况下,这些页面将被逐出。错误,”返回并保留绑定。 此外,还添加了一项更改,以允许 MADV_DONTNEED 标志与 HugeTLB 中的大内存页一起使用。
  • 虚拟化和安全
    • 对于x86架构,增加了对Intel IBT(间接分支跟踪)命令流保护机制的支持,该机制可以防止使用面向返回的编程技术(ROP,Return-OrientedProgramming)的漏洞利用构建技术,其中漏洞利用以已经存在于内存中的以控制返回指令结尾的机器指令片段的调用链的形式形成(通常,这些是函数的结尾)。 所实现的保护方法的本质是通过在函数的开头添加特殊的 ENDBR 指令来阻止对函数体的间接转换,并且仅在转换到该指令的情况下才允许执行间接转换(间接转换)通过 JMP 和 CALL 进行的调用必须始终位于 ENDBR 指令上,该指令位于最开始的函数处)。
    • 在 memcpy()、memmove() 和 memset() 函数中启用对缓冲区边界进行更严格的检查,在启用 CONFIG_FORTIFY_SOURCE 模式时在编译时执行。 添加的更改归结为检查已知大小的结构元素是否超出边界。 值得注意的是,所实现的功能将允许阻止至少在过去三年中发现的所有与 memcpy() 相关的内核缓冲区溢出。
    • 添加了 RDRAND 伪随机数生成器更新实现的代码的第二部分,该代码负责 /dev/random 和 /dev/urandom 设备的操作。 新实现的显着之处在于统一了 /dev/random 和 /dev/urandom 的操作,增加了启动虚拟机时防止随机数流中出现重复项的保护,以及切换到使用 BLAKE2s 哈希函数而不是 SHA1熵混合操作。 该更改通过消除有问题的 SHA1 算法并消除 RNG 初始化向量的覆盖来提高伪随机数生成器的安全性。 由于BLAKE2s算法在性能上优于SHA1,因此它的使用也对性能产生了积极的影响。
    • 对于 ARM64 架构,添加了对新指针身份验证算法“QARMA3”的支持,该算法比 QARMA 算法更快,同时保持适当的安全级别。 该技术允许您使用专门的 ARM64 指令,通过存储在指针本身未使用的高位中的数字签名来验证返回地址。
    • 对于 ARM64 架构,已经实现了对汇编的支持,并在 GCC 12 中包含了一种保护模式,以防止在堆栈上发生缓冲区溢出时覆盖函数的返回地址。 保护的本质是在将控制权转移给函数之后将返回地址保存在单独的“影子”堆栈中,并在退出函数之前检索该地址。
    • 添加了一个新的密钥环 - “machine”,包含 shim 引导加载程序支持的系统所有者密钥(MOK,机器所有者密钥)。 这些密钥可用于对启动后阶段加载的内核组件(例如内核模块)进行数字签名。
    • 删除了对 TPM 的非对称私钥的支持,该私钥在 TPM 的旧版本中提供,存在已知的安全问题,并且在实践中并未广泛采用。
    • 添加了对 size_t 类型数据的整数溢出保护。 该代码包括处理程序 size_mul()、size_add() 和 size_sub(),它们允许您使用 size_t 类型安全地乘、加和减大小。
    • 构建内核时,启用“-Warray-bounds”和“-Wzero-length-bounds”标志,当索引超出数组边界以及使用零长度数组时,它们会显示警告。
    • virtio-crypto 设备添加了对使用 RSA 算法加密的支持。
  • 网络子系统
    • 在网桥的实现中,增加了对端口绑定模式(锁定模式)的支持,其中用户只能从授权的MAC地址通过端口发送流量。 还添加了使用多种结构来评估 STP(生成树协议)协议状态的功能。 以前,VLAN 只能直接映射到 STP (1:1),每个 VLAN 独立管理。 新版本增加了mst_enable参数,启用后,VLAN的状态由MST(Multiple Spanning Trees)模块控制,VLAN的绑定可以对应M:N模型。
    • 将工具集成到网络堆栈中以跟踪丢弃数据包的原因(原因代码)的工作仍在继续。 当与数据包关联的内存被释放时,会发送原因代码,并考虑到由于标头错误而丢弃数据包、rp_filter 欺骗检测、无效校验和、内存不足、触发 IPSec XFRM 规则、无效序列号 TCP 等情况。
    • 在 BPF_PROG_RUN 模式下,可以从用户空间启动的 BPF 程序传输网络数据包,其中 BPF 程序在内核中执行,但将结果返回到用户空间。 数据包使用 XDP(eXpress 数据路径)子系统进行传输。 支持实时数据包处理模式,其中 XDP 处理器可以将网络数据包动态重定向到网络堆栈或其他设备。 还可以创建外部流量的软件生成器或将网络帧替换到网络堆栈中。
    • 对于附加到网络 cgroup 的 BPF 程序,已经提出了辅助函数来显式设置系统调用的返回值,这使得能够传达有关系统调用阻塞原因的更完整的信息。
    • XDP(eXpress 数据路径)子系统添加了对放置在多个缓冲区中的分段数据包的支持,这允许您在 XDP 中处理巨型帧并使用 TSO/GRO(TCP 分段卸载/通用接收卸载)进行 XDP_REDIRECT。
    • 删除网络命名空间的过程显着加快,这是一些大流量的大型系统的需求。
  • Оборудование
    • amdgpu 驱动程序默认包含 FreeSync 自适应同步技术,可让您调整屏幕上信息的刷新率,确保在玩游戏和观看视频时图像流畅、无撕裂。 Aldebaran GPU 支持已宣布稳定。
    • i915 驱动程序增加了对 Intel Alderlake N 芯片和 Intel DG2-G12 独立显卡 (Arc Alchemist) 的支持。
    • nouveau 驱动程序为 DP/eDP 接口提供更高比特率的支持,并支持 lttprs(链路训练可调谐 PHY 中继器)电缆延长器。
    • 在驱动程序中的 drm (Direct Rendering Manager) 子系统中,armada、exynos、gma500、hyperv、imx、ingenic、mcde、mediatek、msm、omap、rcar-du、rockchip、sprd、sti、tegra、tilcdc、xen 和 vc4 参数支持添加了nomodeset,它允许您在内核级别禁用切换视频模式和使用硬件渲染加速工具,仅保留与系统帧缓冲区相关的功能。
    • 添加了对 ARM SoС Qualcomm Snapdragon 625/632(用于 LG Nexus 5X 和 Fairphone FP3 智能手机)、Samsung Exynos 850、Samsung Exynos 7885(用于 Samsung Galaxy A8)、Airoha (Mediatek/EcoNet) EN7523、Mediatek mt6582 (Prestigio PMT5008) 的支持平板电脑 3G)、Microchip Lan966、瑞萨 RZ/G2LC、RZ/V2L、Tesla FSD、TI K3/AM62 和 i.MXRTxxxx。
    • 添加了对 Broadcom (Raspberry Pi Zero 2 W)、Qualcomm (Google Herobrine R1 Chromebook、SHIFT6mq、Samsung Galaxy Book2)、Rockchip (Pine64 PineNote、Bananapi-R2-Pro、STM32 Emtrion emSBS、Samsung Galaxy Tab S) 的 ARM 设备和主板的支持、Prestigio PMT5008 3G 平板电脑)、Allwinner(A20-Marsboard)、Amlogic(Amediatek X96-AIR、CYX A95XF3-AIR、好创 H96-Max、Amlogic AQ222 和 OSMC Vero 4K+)、Aspeed(广达 S6Q、华擎 ROMED8HM3)、Marvell MVEBU / Armada(Ctera C200 V1 和 V2 NAS)、Mstar(DongShanPiOne、Miyoo Mini)、NXP i.MX(Protonic PRT8MM、emCON-MX8M Mini、Toradex Verdin、Gateworks GW7903)。
    • 添加了对音频系统和编解码器 AMD PDM、Atmel PDMC、Awinic AW8738、i.MX TLV320AIC31xx、Intel CS35L41、ESSX8336、Mediatek MT8181、nVidia Tegra234、Qualcomm SC7280、Renesas RZ/V2L、Texas Instruments TAS585M 的支持。 添加了 Intel AVS DSP 芯片声音驱动程序的初始实现。 更新了对 Intel ADL 和 Tegra234 的驱动程序支持,并进行了更改以改进对 Dell、HP、Lenovo、ASUS、Samsung 和 Clevo 设备的音频支持。

    与此同时,拉丁美洲自由软件基金会形成了完全自由的内核5.18版本——Linux-libre 5.18-gnu,清除了包含非自由组件或代码部分的固件和驱动程序的元素,其范围受到限制由制造商。 新版本清理了 MIPI DBI 面板、VPU Amphion、WiFi MediaTek MT7986 WMAC、Mediatek MT7921U (USB) 和 Realtek 8852a/8852c、Intel AVS 和 Texas Instruments TAS5805M 声音芯片的驱动程序。 还针对具有基于 AArch64 架构的处理器的各种 Qualcomm SoC 清理了 DTS 文件。 更新了 AMD GPU、MediaTek MT7915、Silicon Labs WF200+ WiFi、Mellanox Spectru 以太网、Realtek rtw8852c、Qualcomm Q6V5、Wolfson ADSP、MediaTek HCI UART 的驱动程序和子系统中的斑点清理代码。

来源: opennet.ru

添加评论