Linux 5.19 内核版本

经过两个月的开发,Linus Torvalds 发布了 Linux 内核 5.19。 最显着的变化包括:支持 LoongArch 处理器架构、集成“BIG TCP”补丁、fscache 中的按需模式、删除代码以支持 a.out 格式、使用 ZSTD 进行固件压缩的能力、用于管理用户空间的内存驱逐,提高伪随机数生成器的可靠性和性能,支持 Intel IFS(现场扫描)、AMD SEV-SNP(安全嵌套分页)、Intel TDX(可信域扩展)和 ARM SME(可扩展矩阵扩展)扩展。

Linus 在公告中表示,下一个内核版本很可能会编号为 6.0,因为 5.x 分支已经积累了足够的版本来更改版本号中的第一个数字。 编号变更是出于美观原因而进行的,是缓解因系列中大量问题积累而产生的不适的正式步骤。

Linus 还提到,他使用基于 ARM64 架构(Apple Silicon)的 Apple 笔记本电脑以及基于 Asahi Linux 发行版的 Linux 环境来创建该版本。 这不是 Linus 的主要工作站,但他使用该平台来测试其对内核工作的适用性,并确保他可以在携带轻便笔记本电脑旅行时生成内核版本。 此前,也就是多年前,Linus 有过使用苹果设备进行开发的经验——他曾经使用过一台基于 ppc970 CPU 的 PC 和一台 Macbook Air 笔记本电脑。

新版本包括来自 16401 名开发人员的 2190 个修复(在上一个版本中,有来自 16206 名开发人员的 2127 个修复),补丁大小为 90 MB(更改影响了 13847 个文件,添加了 1149456 行代码,删除了 349177 行代码)。 39 中引入的所有更改中大约 5.19% 与设备驱动程序相关,大约 21% 的更改与更新特定于硬件架构的代码相关,11% 与网络堆栈相关,4% 与文件系统相关,3% 与文件系统相关。与内部内核子系统相关。

内核5.19的主要创新:

  • 磁盘子系统、I/O 和文件系统
    • 用于只读分区的EROFS(增强型只读文件系统)文件系统已转换为使用提供数据缓存的fscache 子系统。 这一变化显着提高了从基于 EROFS 的映像启动大量容器的系统的性能。
    • fscache子系统添加了按需读取模式,用于优化EROFS。 新模式允许您从本地系统中的 FS 映像组织读取缓存。 最初可用的操作模式主要是将通过网络文件系统传输的数据缓存在本地文件系统中,而“按需”模式则将检索数据并将其写入缓存的功能委托给单独的服务器。后台进程运行在用户空间。
    • XFS 提供了在 i 节点中存储数十亿个扩展属性的能力。 一个文件的最大扩展数已从 4 亿个增加到 247 个。实现了一种模式,可以同时自动更新多个扩展文件属性。
    • Btrfs 文件系统优化了锁的工作,在 nowait 模式下直接写入时,性能提高了大约 7%。 NOCOW 模式(无写时复制)操作性能提高约 3%。 运行“发送”命令时页面缓存上的负载已减少。 子页面的最小大小已从 64K 减少到 4K(可以使用小于内核页面的子页面)。 已从使用基数树过渡到使用 XArrays 算法。
    • NFS 服务器中添加了一种模式,以延长对已停止响应请求的客户端设置的锁定状态的保留。 新模式允许您将锁清除延迟最多一天,除非另一个客户端请求竞争锁。 正常模式下,客户端停止响应90秒后阻塞解除。
    • fanotify FS 中的事件跟踪子系统实现了 FAN_MARK_EVICTABLE 标志,您可以使用该标志禁用在缓存中固定目标 i 节点,例如,忽略子分支而不将其部分固定在缓存中。
    • FAT32 文件系统的驱动程序添加了对通过 statx 系统调用获取有关文件创建时间的信息的支持,并实现了更高效、功能更强大的 stat() 版本,该版本返回有关文件的扩展信息。
    • 对 exFAT 驱动程序进行了重大优化,允许在“dirsync”模式处于活动状态时同时清除一组扇区,而不是按顺序逐个扇区清除。 通过减少优化后的块请求数量,在 SD 卡上创建大量目录的性能提高了 73-85% 以上,具体取决于集群大小。
    • 内核包含对 ntfs3 驱动程序的第一个纠正性更新。 自去年3月ntfs5.15包含在XNUMX内核中以来,驱动程序一直没有更新,与开发人员的沟通也已丢失,但开发人员现在已恢复发布更改。 提议的补丁消除了导致内存泄漏和崩溃的错误,解决了 xfstests 执行的问题,清理了未使用的代码,并修复了拼写错误。
    • 对于OverlayFS,已经实现了映射已挂载文件系统的用户ID的功能,用于将已挂载的外部分区上的特定用户的文件与当前系统上的另一个用户进行匹配。
  • 内存和系统服务
    • 新增对龙芯3 5000处理器中使用的LoongArch指令集架构的初步支持,该架构实现了新的RISC ISA,类似于MIPS和RISC-V。 LoongArch 架构提供三种版本:精简 32 位 (LA32R)、常规 32 位 (LA32S) 和 64 位 (LA64)。
    • 删除了支持 a.out 可执行文件格式的代码,该格式在版本 5.1 中已弃用。 a.out 格式在 Linux 系统上早已被弃用,并且默认 Linux 配置中的现代工具不支持生成 a.out 文件。 a.out 文件的加载器可以完全在用户空间中实现。
    • 已停止支持特定于 x86 的引导选项:nosp、nosmap、nosmep、noexec 和 noclflush)。
    • 对过时的 CPU h8300 架构(瑞萨 H8/300)的支持已停止,该架构长期以来一直不受支持。
    • 与响应分割锁(“分割锁”)检测相关的扩展功能,该分割锁在访问内存中未对齐的数据时发生,因为执行原子指令时,数据会跨越两个 CPU 缓存行。 这种阻塞会导致性能显着下降。 如果以前默认情况下内核会发出警告,其中包含有关导致阻塞的进程的信息,那么现在有问题的进程将进一步减慢以保持系统其余部分的性能。
    • 添加了对 Intel 处理器中实现的 IFS(现场扫描)机制的支持,该机制允许您运行低级 CPU 诊断测试,该测试可以识别基于纠错码 (ECC) 或奇偶校验位的标准工具未检测到的问题。 执行的测试以可下载固件的形式进行,其设计与微代码更新类似。 测试结果可通过 sysfs 获得。
    • 添加了将 bootconfig 文件嵌入到内核中的功能,除了命令行选项之外,还允许通过设置文件确定内核参数。 嵌入是使用汇编选项“CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»”执行的。 以前,bootconfig 是通过附加到 initrd 映像来确定的。 集成到内核中允许在没有 initrd 的配置中使用 bootconfig。
    • 已实现下载使用 Zstandard 算法压缩的固件的功能。 sysfs 中添加了一组控制文件 /sys/class/firmware/*,允许您从用户空间启动固件加载。
    • io_uring 异步 I/O 接口提供了一个新标志 IORING_RECVSEND_POLL_FIRST,设置该标志后,将首先使用轮询发送要处理的网络操作,这可以在可以接受延迟处理操作的情况下节省资源。 io_uring还添加了对socket()系统调用的支持,提出了新标志来简化文件描述符的管理,添加了“多镜头”模式以在accept()调用中一次接受多个连接,并添加了转发NVMe的操作直接向设备发出命令。
    • Xtensa 架构提供对 KCSAN(Kernel Concurrency Sanitizer)调试工具的支持,该工具旨在动态检测内核内的竞争条件。 还添加了对睡眠模式和协处理器的支持。
    • 针对m68k架构(Motorola 68000),实现了基于Android Goldfish模拟器的虚拟机(平台模拟器)。
    • 对于AArch64架构,已经实现了对Armv9-A SME(可扩展矩阵扩展)扩展的支持。
    • eBPF 子系统允许在映射结构中存储类型化指针,并且还添加了对动态指针的支持。
    • 提出了一种新的主​​动内存回收机制,支持使用 memory.reclaim 文件进行用户空间控制。 将数字写入指定文件将尝试从与 cgroup 关联的集合中逐出相应数量的字节。
    • 提高了使用 zswap 机制压缩交换分区中的数据时内存使用的准确性。
    • 对于RISC-V架构,提供了在32位系统上运行64位可执行文件的支持,添加了将限制性属性绑定到内存页的模式(例如禁用缓存),并实现了kexec_file_load()函数。
    • 对 32 位 Armv4T 和 Armv5 系统的支持的实现适用于适用于不同 ARM 系统的通用多平台内核构建。
  • 虚拟化和安全
    • EFI 子系统实现了将秘密信息秘密传输到客户系统而不将其泄露给主机系统的能力。 数据通过 securityfs 中的 security/coco 目录提供。
    • 锁定保护模式限制 root 用户对内核的访问并阻止 UEFI 安全启动绕过路径,消除了允许通过操纵内核调试器绕过保护的漏洞。
    • 其中包括旨在提高伪随机数生成器的可靠性和性能的补丁。
    • 使用 Clang 15 构建时,实现了对随机化内核结构机制的支持。
    • Landlock 机制允许您限制一组进程与外部环境的交互,并提供对允许您控制文件重命名操作执行的规则的支持。
    • IMA(完整性测量架构)子系统旨在使用数字签名和哈希来验证操作系统组件的完整性,现已切换为使用 fs-verity 模块进行文件验证。
    • 禁用对 eBPF 子系统的非特权访问时的操作逻辑已更改 - 以前与 bpf() 系统调用关联的所有命令都被禁用,并且从版本 5.19 开始,保留对不会导致创建对象的命令的访问。 此行为需要特权进程来加载 BPF 程序,但随后非特权进程可以与该程序交互。
    • 添加了对 AMD SEV-SNP(安全嵌套分页)扩展的支持,该扩展提供嵌套内存页表的安全工作,并防止对 AMD EPYC 处理器的“undeSErVed”和“SEVerity”攻击,从而允许绕过 AMD SEV(安全加密虚拟化) )保护机制。
    • 添加了对 Intel TDX(可信域扩展)机制的支持,该机制允许您阻止第三方尝试访问虚拟机的加密内存。
    • 用于模拟块设备的 virtio-blk 驱动程序增加了对使用轮询的 I/O 的支持,根据测试,这已将延迟减少了约 10%。
  • 网络子系统
    • 该软件包包括一系列 BIG TCP 补丁,允许您将 TCP 数据包的最大数据包大小增加到 4GB,以优化高速内部数据中心网络的运行。 通过实施“巨型”数据包,实现了 16 位标头字段大小的数据包大小的类似增加,其 IP 标头中的大小设置为 0,实际大小以单独的 32 位传输单独附加标头中的字段。 在性能测试中,将数据包大小设置为 185 KB 可将吞吐量提高 50%,并显着降低数据传输延迟。
    • 将工具集成到网络堆栈中以跟踪丢弃数据包的原因(原因代码)的工作仍在继续。 当与数据包关联的内存被释放时,会发送原因代码,并考虑到由于标头错误而丢弃数据包、rp_filter 欺骗检测、无效校验和、内存不足、触发 IPSec XFRM 规则、无效序列号 TCP 等情况。
    • 添加了对在无法使用某些 MPTCP 功能的情况下回退 MPTCP(多路径 TCP)连接以使用常规 TCP 的支持。 MPTCP 是 TCP 协议的扩展,用于组织 TCP 连接的操作,通过与不同 IP 地址关联的不同网络接口沿着多条路由同时传送数据包。 添加了 API 以从用户空间控制 MPTCP 流。
  • Оборудование
    • 添加了超过 420k 行与 amdgpu 驱动程序相关的代码,其中约 400k 行是为 AMD GPU 驱动程序中的 ASIC 寄存器数据自动生成的头文件,另外 22.5k 行提供了对 AMD SoC21 支持的初步实现。 AMD GPU 的驱动程序总大小超过 4 万行代码。 除了SoC21之外,AMD驱动程序还包括对SMU 13.x(系统管理单元)的支持,更新了对USB-C和GPUVM的支持,并准备支持下一代RDNA3(RX 7000)和CDNA(AMD Instinct)平台。
    • i915 驱动程序(Intel)扩展了与电源管理相关的功能。 添加了笔记本电脑上使用的 Intel DG2 (Arc Alchemist) GPU 的标识符,为 Intel Raptor Lake-P (RPL-P) 平台提供了初步支持,添加了有关 Arctic Sound-M 显卡的信息),为计算引擎实现了 ABI,添加了DG2卡支持Tile4格式;对于基于Haswell微架构的系统,实现了DisplayPort HDR支持。
    • Nouveau 驱动程序已切换为使用 drm_gem_plane_helper_prepare_fb 处理程序;静态内存分配已应用于某些结构和变量。 至于 NVIDIA 在 Nouveau 中使用开源内核模块的情况,到目前为止的工作归结为识别和消除错误。 未来,已发布的固件计划用于提高驱动程序性能。
    • 添加了基于M1芯片的Apple电脑使用的NVMe控制器的驱动程序。

与此同时,拉丁美洲自由软件基金会形成了完全自由内核 5.19 的版本 - Linux-libre 5.19-gnu,清除了包含非自由组件或代码段的固件和驱动程序元素,其范围为受制造商限制。 新版本清理了 pureLiFi X/XL/XC 和 TI AMx3 Wkup-M3 IPC 的驱动程序。 更新了 Silicon Labs WFX、AMD amdgpu、Qualcomm WCNSS 外设图像加载器、Realtek 蓝牙、Mellanox Spectrum、Marvell WiFi-Ex、Intel AVS、IFS、pu3-imgu 驱动程序和子系统中的斑点清理代码。 已实现 Qualcomm AArch64 devicetree 文件的处理。 添加了对新的 Sound Open Firmware 组件命名方案的支持。 停止清理 ATM 大使驱动程序,该驱动程序已从内核中删除。 HDCP 和 Mellanox Core 中的 blob 清理管理已移至单独的 kconfig 标签。

来源: opennet.ru

添加评论