经过两个月的开发,Linus Torvalds 发布了内核。 Linux 6.17. 其中最显著的变化包括:改进了 Btrfs 性能、file_getattr() 和 file_setattr() 系统调用、统一了任务调度器中的单处理器和多处理器配置、带有内存访问统计信息的 DAMON_STAT 模块、支持 ARM64 系统上的实时补丁、通过 AF_UNIX 套接字发送核心转储、通过 cgroup 限制 SCHED_EXT、简化了针对 CPU 漏洞的保护配置、在 Clang 中构建并初始化堆栈上的变量、防止 /proc 欺骗、扩展了 RV(运行时验证)子系统、通过 AppArmor 限制 AF_UNIX 套接字、TCP DualPI2 拥塞控制算法。
新版本包含来自 2118 位开发人员的 14334 个修复,补丁大小为 46 MB(更改影响了 12841 个文件,增加了 646654 行代码,删除了 398782 行代码)。上一版本包含来自 2145 位开发人员的 15924 个修复,补丁大小为 50 MB。6.17 中约 43% 的更改与设备驱动程序相关,约 12% 的更改与特定于硬件架构的代码更新相关,14% 与网络堆栈相关,4% 与文件系统相关,3% 与内部内核子系统相关。
内核 6.17(1、2、3)的主要新功能:
- 磁盘子系统、I/O 和文件系统
- Btrfs 现推出对大型 Folio 的实验性支持,这降低了系统开销并提升了某些操作的性能。新增了对释放空间分配位图请求的缓存功能,将空文件创建性能提升了 20%。在使用数据压缩的系统中,预读性能也得到了提升。XArray 结构中的键现在更加密集,从而提升了区段树节点的存储紧凑度,并将叶节点数量减少了 50-70%。此外,还为碎片整理后的区段提供了额外的压缩设置。
- ext4 文件系统现在支持带有 RWF_DONTCACHE 标志的缓冲 I/O,这会导致操作完成后立即从页面缓存中删除数据。
- EROFS 文件系统现在支持元数据压缩。
- NFS 服务器现在可以将写入操作委托给以只写模式打开文件的客户端。
- fallocate() 系统调用中新增了 FALLOC_FL_WRITE_ZEROES 标志。该标志允许使用 WRITE_ZERO 命令对文件中的指定范围进行零填充。部分 SSD 支持该命令,无需 I/O 操作即可完成零填充。此选项目前仅适用于 ext4 文件系统。
- 添加了 file_getattr() 和 file_setattr() 系统调用来操作给定文件的 inode 属性。
- 用于以批处理模式处理光学媒体的“pktcdvd”驱动程序(于 2016 年被标记为过时)已被删除。
- 内核中的 Bcachefs 文件系统 Linux Bcachefs 已转为外部维护模式,这意味着对 Bcachefs 的更改将不再被主内核接受,但文件系统本身仍保留在内核代码库中。在 Kent Overstreet 证明他能够与其他内核开发者正确协作并遵守既定的开发准则之前,Bcachefs 的开发工作将在内核代码库之外进行。
- 内存和系统服务
- 任务调度程序已移除对单处理器配置的支持。在单处理器系统上,现在应使用为多处理器 (SMP) 系统构建的内核。单处理器和多处理器系统的代码已统一,并移除了对 CONFIG_SMP 内核参数的不必要依赖。
- 添加了 DAMON_STAT(数据访问监控结果统计)内核模块。它允许使用 DAMON(数据访问监控)子系统监控 RAM 访问。该模块提供有关非活动状态(memory_idle_ms_percentiles)和预估内存带宽(estimated_memory_bandwidth)的统计信息。
- 在采用 ARM64 架构的系统中,已经实现了对 Live patch 的支持,允许您将修复程序应用到内核。 Linux 无需重启或停止系统,即可即时执行。
- 内核源代码附带的极简 C 库 nolibc Linux 并为基本系统调用提供封装,支持 SuperH、x32、MIPS n32 和 MIPS n34 架构。
- 通过 AF_UNIX 套接字发送核心转储内容的功能已得到扩展,从而允许用户空间中创建更安全的核心转储处理程序,这些处理程序不依赖于内核调用特权进程。新版本添加了一个用于创建核心转储的协议。 服务器能够管理任务级别的核心转储处理。例如,可以忽略某些进程的核心转储,而通过套接字传递其他进程的核心转储。我们还开发了一个独立的用于核心转储管理的原型服务器。
- 添加了内核命令行选项“crashkernel=size,cma”,通过 CMA(连续内存分配器)保留内存空间来存储内核崩溃转储。
- pidfd 机制已扩展,允许使用进程特定的标识符,与 pid 不同,这些标识符不可重新赋值。新增了从用户空间将扩展属性绑定到 pidfd 的功能。现在可以通过 open_by_handle_at() 函数打开 pidfd 的文件描述符,而无需绑定到文件系统。内核使用 pidfd 创建的内部信息现在绑定到进程本身,而不是 pidfd,并且在同一进程重新打开时会保留。
- 用于读取扩展文件属性的 bpf_cgroup_read_xattr() 函数已添加到 BPF 子系统。BPF 程序现在支持标准字符串操作,例如 bpf_strcmp、bpf_strnchr、bpf_strchrnul、bpf_strlen 和 bpf_strspn,这些操作均以只读模式运行。标准 stdout 和 stderr 流现在可用于与用户空间组件交互。对于基于 LoongArch 架构的系统,BPF 现在支持动态代码修改、BPF trampoline 机制(可减少内核和 BPF 程序之间的调用开销),以及启动使用 struct_ops 通过 BPF 创建内核函数处理程序的程序。
- 计时系统现在支持辅助时钟,辅助时钟不连接到常规系统时钟并按照自己的节奏运行(以前,所有时钟都以相同的节奏运行,仅在偏移量上有所不同)。
- 已添加对代理执行的初始支持,以缓解优先级反转问题。代理执行允许等待锁释放的任务将其执行上下文转移给持有锁的任务,从而加快锁的释放速度。
- 继续从 Rust-for- 分支迁移更改Linux与使用 Rust 作为第二语言开发驱动程序和内核模块相关的功能(Rust 支持默认情况下未启用,并且不会将 Rust 包含在所需的内核构建依赖项中)。新增了用于管理电压和电流调节器、固件属性、I/O 资源和 I/O 内存的抽象层。“warn_on!()”宏已实现。新增了 UserPtr 类型,用于用户空间指针。工作队列、uaccess、dma、时间和列表模块的功能已扩展。新增了“bits”模块,其中包含“bit”和“genmask”函数。
- 计算 CRC 校验和的代码已重写,并添加了生成 SHA-1 和 SHA-2 哈希值的新调用。此外,还添加了针对硬件的优化。在支持 VPCLMULQDQ(向量无进位四字乘法)扩展的新 x86_64 CPU 上,crc32c() 函数的性能得到了提升。
- 对于 S390 系统,已经实现了对交换和迁移大内存页面(透明大页面)的支持。
- 新增了在内存不足时针对特定 NUMA 节点配置内存页面回收 (proactive-reclaim) 积极性的功能。这允许您选择要应用更积极内存回收的 NUMA 节点。例如,“echo "512M swappiness=10" > /sys/devices/system/node/node1/reclaim”。
- SCHED_EXT 机制允许使用 BPF 创建 CPU 调度程序,现在新增了通过 cgroup 管理吞吐量的功能。例如,可以使用 cpu.max 参数来限制 CPU 负载。
- 自动将 tracefs 虚拟文件系统挂载到 /sys/kernel/debug/tracing 目录的功能已被弃用;应该使用 /sys/kernel/tracing 来代替。
- 虚拟化和安全
- 新增了启用功能 通过选择可阻止的攻击向量来防御 CPU 漏洞 该方法无需在设置中指定具体的漏洞,而是根据隔离违规的类型选择阻止方法:用户与内核之间(用户-内核)、用户与其他用户之间(用户-用户)、客户机系统与宿主机环境之间(客户机-宿主机)、不同客户机系统之间(客户机-客户机)以及不同线程之间(跨线程)。该方法允许用户仅针对真正关心的漏洞类别激活保护。例如,云环境所有者可以启用客户机-宿主机和客户机-客户机模式,这将激活针对以下漏洞的保护方法:BHI、GD、L1TF、MDS、MMIO、Retbleed、RFDS、Spectre_v2、SRBDS、SRSO 和 TAA。
- 添加了使用堆栈深度跟踪模式使用 Clang 编译器进行构建的支持,该模式会初始化堆栈中存储的所有变量。此初始化可防止内核信息通过未初始化的变量泄露,这些变量可能包含堆栈中先前存储的数据的残留。此前,类似的功能是通过 STACKLEAK GCC 插件支持的。
- 新增了针对攻击者通过“绑定”模式挂载来欺骗 /proc 文件系统的防护措施。/proc 根 inode 编号现已固定(PROCFS_ROOT_INO),可由用户空间进程进行验证。
- RV(运行时验证)子系统旨在验证高可靠性系统的正常运行,现已更新,新增用于跟踪实时应用程序中常见问题的 rtapp(实时应用程序监视器)监控组件,以及用于测试任务调度程序的 rp、sssw 和 opid 组件。新增了创建使用线性时序逻辑而非确定性自动机来确定行为模型的监控组件的功能。验证在运行时执行,方法是将处理程序附加到跟踪点,跟踪点会将实际执行进度与定义预期系统行为的预定义参考模型进行比较。
- AppArmor 系统已更新,支持 AF_UNIX 套接字的访问控制。
- ARM 系统上的 KVM 虚拟机管理程序实现了对 GICv5 中断控制器的支持。
- 添加了 CONFIG_KVM_IOAPIC 设置以禁用对 KVM 中的 APIC、PIC 和 PIT 仿真的支持。
- 增加了针对 VMSCAPE 漏洞的保护。
- 添加了 ioctl 命令 FS_IOC_GETLBMD_CAP 以从用户空间获取有关对文件应用完整性保护工具的信息。
- /sys/fs/selinux/user 接口已被弃用;现在访问它会引入五秒的延迟并在日志中打印警告。
- 网络子系统
- PSE(供电设备)技术用于通过以太网为 IP 摄像头和无线接入点等设备供电,现已增强支持可配置的功率预算策略(总可用功率)。这些策略允许您优先关闭哪些端口以防止过载。
- MCTP(管理组件传输协议)实现现已支持网关路由。例如,以下规则使用地址 0x1d(直接分配给端点 ID 9)通过设备 mctpi2c0 将数据包路由到端点 ID 10。mctp route add 9 via mctpi2c0 mctp neigh add 9 dev mctpi2c0 lladdr 0x1d mctp route add 10 gw 9
- 对于 UNIX 套接字 (AF_UNIX),实现了 SO_INC 选项;对于 VSOCK 地址族,实现了 SIOCINQ 选项。这些选项类似于 TCP 的 TCP_INQ 选项,允许通过控制消息获取套接字上可读取字节数的信息。
- TCP 现在严格执行通告的接收窗口大小,该大小决定了在收到另一端 ACK 之前允许发送的数据量。之前,内核会继续处理超出通告接收窗口的数据,但现在将停止这样做。
- MPTCP(多路径 TCP)现在支持 TCP_MAXSEG 套接字选项,用于限制发送数据段的最大大小。MPTCP 是 TCP 协议的扩展,用于通过绑定到不同 IP 地址的不同网络接口,同时沿多条路由传送数据包。
- 增加了对 TCP DualPI2 拥塞控制算法 (RFC 9332) 的支持,该算法允许使用可扩展拥塞控制器来处理具有高服务质量要求的流量(例如 TCP-Prague 和 DCTCP),而不会导致拥塞控制器(例如 Reno 和 Cubic)处理的经典流量的性能下降。
- 添加了 sysctl“force_forwarding”,可用于在具有 IPv6 的选定网络接口上启用流量转发。
- 已移除对 RFC 6675 中描述的选择性确认 (SACK) 数据包丢失检测算法的支持。此算法已于 2018 年弃用。建议使用 RACK-TLP 算法来检测 TCP 数据包丢失。
- Оборудование
- 基于英特尔 Xe 架构的 GPU 的 Xe DRM(直接渲染管理器)驱动程序的开发工作仍在继续,该驱动程序用于英特尔 Arc 系列显卡和集成显卡,从 Tiger Lake 处理器开始。新版本默认支持基于 Panthor Lake 微架构的芯片,并增加了对 WildCat Lake 微架构的支持。
- 适用于 GFX9.x GPU 的 AMDGPU 驱动程序现已支持 Cleaner Shader 机制,该机制会在重新使用 GPU 内存之前对其进行清理,以防止其他进程遗留的数据泄漏。待机模式支持已得到改进。新增了在 AMD SR-IOV 环境中进入待机模式的功能。背光控制也得到了改进。
- i915 驱动程序现在支持 drm_panic 机制,当发生崩溃时,该机制会显示类似“蓝屏死机”的错误信息。此外,还增加了对 Wildcat Lake 系列芯片中使用的显示控制器的支持。
- NVIDIA 继续集成 Nova 驱动程序组件,用于搭载 GSP 固件的 NVIDIA GPU,该组件自基于 Turing 微架构的 NVIDIA GeForce RTX 2000 系列起开始使用。该驱动程序采用 Rust 编写。新版本添加了 DMA 抽象层,实现了 VBIOS 解析器,添加了用于配置帧缓冲区的代码,并支持 Falcon 模式下的加速加载。
- adreno 驱动程序已更新,支持 Qualcomm Adreno x1-45 和 x1-85 GPU。
- msm 驱动程序现在支持 Adreno SM8750 GPU 和视频内存映射(VM_BIND)。
- panfrost 驱动程序已更新,以支持 Mediatek mt8370 SoC 中使用的 Mali GPU。
- lima 驱动程序已更新,以支持 Rockchip RK3528 SoC 中使用的 GPU。
- 添加了 mtd(内存技术设备)驱动程序,用于访问集成到英特尔 GPU 中的 NVM 内存。
- 增加了对以下音频系统的支持:ASoC IMX WM8524、AMD ACP7.2、SoundWire ACP 7.1、Fairphone 4 & 5、Qualcomm QCS8275、Framework Laptop 13 (AMD Ryzen AI 300)、CS35L41 HDA(用于华硕笔记本电脑)、Richtek RTQ9124、TI TAS5753、HP EliteBook x360 830 G6、EliteBook 830 G6、LG 16Z90R-A、HP 15-fc000。高清音频代码已重新整理。
- 增加了对 ARM 主板、SoC 和设备的支持:NVIDIA Tegra264、Marvell PXA1908(Marvell 首款用于智能手机的 64 位芯片)、CIX P1、Axiado AX3000、Sophgo SG2000(结合了 ARM 和 RISC-V 内核)、联发科 mt6572、exynos2200(用于三星 Galaxy S22)、瑞萨 R-Car V4M-7、TI am62d2 和 Sophgo sg2042、基于联发科 mt8186 和高通骁龙 X1 的笔记本电脑、基于 mt6572、tegra30 和 msm8976 SoC 的智能手机和平板电脑。
与此同时,拉丁美洲自由软件基金会创建了一个完全自由的内核 6.17 版本—— Linux-libre 6.17-gnu 版本已清理固件和驱动程序中包含非自由组件或受限范围代码段的元素。6.17 版本更新了 amdgpu、prueth、iwlwifi、btusb、pci mhi host、adreno a6xx、nova-core 和 Intel AVS 驱动程序中的 blob 清理代码。ARM 芯片和 Intel IPU7 的设备树 (.dts) 文件中的 blob 名称已被清理。新的 pci hda 驱动程序中已禁用 blob 加载。QLogic infiniband 驱动程序已从内核中移除,因此已停止对其进行 blob 清理。
来源: opennet.ru
