Linux 6.1 内核版本

经过两个月的开发,Linus Torvalds 发布了 Linux 内核 6.1。 最显着的变化包括:支持用 Rust 语言开发驱动程序和模块、确定已用内存页的机制现代化、BPF 程序的特殊内存管理器、诊断内存问题的系统 KMSAN、KCFI(内核控制) -Flow Integrity)保护机制,引入Maple结构树。

新版本包含来自 15115 名开发人员的 2139 个修复,补丁大小为 51 MB,比内核 2 和 6.0 的补丁大小大约小 5.19 倍。 这些更改影响了 13165 个文件,添加了 716247 行代码,删除了 304560 行代码。 45 中引入的所有更改中大约 6.1% 与设备驱动程序相关,大约 14% 的更改与更新特定于硬件架构的代码相关,14% 与网络堆栈相关,3% 与文件系统相关,3% 与文件系统相关。与内部内核子系统相关。

内核6.1的主要创新:

  • 内存和系统服务
    • 添加了使用 Rust 作为开发驱动程序和内核模块的第二语言的能力。 支持 Rust 的主要原因是通过减少使用内存时出错的可能性,使编写安全且高质量的设备驱动程序变得更加容易。 默认情况下,Rust 支持处于禁用状态,并且不会导致 Rust 被包含为必需的内核构建依赖项。 到目前为止,内核已经采用了最小化的精简版本的补丁,该补丁已从 40 行减少到 13 行代码,并且仅提供必要的最少内容,足以构建用 Rust 语言编写的简单内核模块。 未来,计划逐步增加现有功能,从 Rust-for-Linux 分支转移其他更改。 与此同时,正在开发项目,以使用拟议的基础设施以 Rust 语言开发 NVMe 驱动器、9p 网络协议和 Apple M1 GPU 的驱动程序。
    • 对于基于带有EFI的AArch64、RISC-V和LoongArch架构的系统,已经实现了直接加载压缩内核映像的能力。 添加了用于加载、运行和卸载内核映像的处理程序,直接从 EFI zboot 调用。 还添加了用于从 EFI 协议数据库安装和删除协议的处理程序。 以前,解包是由单独的引导加载程序执行的,但现在可以通过内核本身的处理程序来完成 - 内核映像形成为 EFI 应用程序。
    • 该组合包括实现多级内存管理模型的部分补丁,该模型允许您分离具有不同性能特征的内存组。 例如,最频繁使用的页面可以存储在最快的存储器中,而最很少使用的页面可以存储在相对较慢的存储器中。 内核 6.1 引入了一种机制,用于确定频繁使用的页面位于慢速内存中的位置,以便将它们提升到快速内存,并且还引入了内存层及其相对性能的一般概念。
    • 它包括MGLRU(多代LRU)机制,它取代了旧的基于两个队列的LRU(最近最少使用)实现,具有多级结构,可以更好地确定哪些内存页正在实际使用以及哪些可以推送到交换分区。
    • 增加了对Oracle工程师提出的“枫树”数据结构的支持,该结构定位为“红黑树”结构的更有效替代。 Maple 树是 B 树的一种变体,支持范围索引,旨在有效利用现代处理器的缓存。 一些内存管理子系统已经转移到maple树上,这对其性能产生了积极的影响。 将来可以使用maple树来实现范围锁定。
    • BPF 子系统中添加了创建“破坏性”BPF 程序的功能,该程序专门设计用于通过 crash_kexec() 调用启动紧急关闭。 出于调试目的,可能需要此类 BPF 程序在某个时间点启动故障转储的创建。 要在加载 BPF 程序时访问破坏性操作,您必须指定 BPF_F_DESTRUCTIVE 标志,激活 sysctl kernel.delta_bpf_enabled,并具有 CAP_SYS_BOOT 权限。
    • 对于BPF程序,可以枚举cgroup元素,也可以枚举特定线程或任务的资源(文件、vma、进程等)。 已实现新的映射类型来创建用户环形缓冲区。
    • 添加了对 BPF 程序中内存分配的特殊调用(内存分配器),它在 BPF 上下文中提供比标准 kmalloc() 更安全的内存分配。
    • 更改的第一部分已被集成,提供了为具有 HID(人机接口设备)接口的输入设备创建驱动程序的能力,并以 BPF 程序的形式实现。
    • 内核已完全删除了支持 a.out 可执行文件格式的代码,该格式在 5.1 版中已弃用,并且自版本 5.18 和 5.19 以来已在主要架构中禁用。 a.out 格式在 Linux 系统上早已被弃用,并且默认 Linux 配置中的现代工具不支持生成 a.out 文件。 a.out 文件的加载器可以完全在用户空间中实现。
    • 对于基于龙芯3 5000处理器采用的LoongArch指令集架构并实现新的RISC ISA的系统,类似于MIPS和RISC-V,实现了对性能测量事件(perf events)、kexec、kdump和BPF JIT编译的支持。
    • io_uring 异步 I/O 接口提供了一种新模式 IORING_SETUP_DEFER_TASKRUN,该模式允许暂时推迟与环形缓冲区相关的工作,直到发出应用程序请求为止,该模式可用于批处理工作并避免由于抢占而导致的延迟问题。不合时机。
    • 用户空间中的进程能够启动将一系列普通内存页转换为一组大内存页(透明大页)。
    • 添加了 /dev/userfaultfd 设备的实现,它允许使用 FS 中的访问权限访问 userfaultfd() 系统调用的功能。 userfaultfd 功能允许您创建用于访问用户空间中未分配的内存页面(页面错误)的处理程序。
    • 对 GNU Make 实用程序版本的要求已增加 - 现在至少需要版本 3.82 才能构建内核。
  • 磁盘子系统、I/O 和文件系统
    • 对 Btrfs 文件系统进行了重大性能优化;除其他外,FIEMAP ioctl 调用的性能已提高了几个数量级。 添加了对使用 io_uring 的应用程序的异步缓冲写入的支持。 在“发送”操作中添加了对受 fs-verity 保护的文件的支持。
    • ext4文件系统添加了与日志维护和只读操作相关的性能优化。
    • EROFS(增强型只读文件系统)文件系统专为在只读模式下可访问的分区上使用而设计,实现了共享不同文件系统中重复数据的能力。
    • 添加了 statx() 系统调用来显示有关是否可以将直接 I/O 应用于文件的信息。
    • FUSE(用户空间中的文件系统)子系统添加了对使用 O_TMPFILE 标志创建临时文件的支持。
  • 虚拟化和安全
    • CFI(控制流完整性)保护机制的实现已被替换,在每次间接调用函数之前添加检查,以检测某些形式的未定义行为,这些行为可能会导致违反正常执行顺序(控制流)作为使用更改指向内存中存储的函数的指针的漏洞的结果。 LLVM 项目中 CFI 的标准实现已被同样基于 Clang 使用的选项所取代,但专门用于保护低级子系统和操作系统内核。 在 LLVM 中,Clang 16 版本中将提供新的实现,并将通过“-fsanitize=kcfi”选项启用。 新实现的主要区别在于,它不依赖于链接时优化 (LTO),并且不会导致函数指针被跳转表中的链接替换。
    • 对于 LSM 模块(Linux 安全模块),可以创建拦截操作以创建命名空间的处理程序。
    • 提供了用于验证 BPF 程序中的 PKCS#7 数字签名的工具。
    • 以非阻塞模式打开的能力(O_NONBLOCK)在内核 5.6 中被无意中删除,现已返回到 /dev/random。
    • 在 x86 架构的系统上,如果同时允许执行和写入的内核子系统映射内存页面,则会添加警告。 未来,正在考虑完全禁止这种内存映射的可能性。
    • 添加了KMSAN(Kernel Memory Sanitizer)调试机制,以检测内核中未​​初始化的内存使用情况,以及用户空间和设备之间未初始化的内存泄漏。
    • 对 getrandom 调用中使用的加密安全 CRNG 伪随机数生成器进行了改进。 这些更改由 VPN WireGuard 的作者 Jason A. Donenfeld 准备,旨在提高伪随机整数提取的安全性。
  • 网络子系统
    • TCP 堆栈提供了为每个名称空间单独使用套接字哈希表的功能(默认情况下禁用),这提高了具有大量名称空间的系统的性能。
    • 删除了支持旧版 DECnet 协议的代码。 用户空间 API 存根保留在适当的位置,以允许编译使用 DECnet 的应用程序,但这些应用程序将无法连接到网络。
    • netlink 协议已记录。
  • Оборудование
    • amdgpu 驱动程序添加了对 DSC(显示流压缩)转发的支持,以便在与支持超高分辨率的屏幕交换信息时实现无损数据压缩。 我们仍在继续为 AMD RDNA3 (RX 7000) 和 CDNA (Instinct) 平台提供支持。 添加了对 DCN 3.2、SMU 13.x、NBIO 7.7、GC 11.x、PSP 13.x、SDMA 6.x 和 GMC 11.x IP 组件的支持。 amdkfd 驱动程序(适用于独立 AMD GPU,例如 Polaris)提供对 GFX 11.0.3 的支持。
    • i915 (Intel) 驱动程序包括对 Meteor Lake GPU 的支持。 Meteor Lake 和更新的 GPU 支持 DP 2.0 (DisplayPort) 接口。 添加了基于 Alder Lake S 微架构的显卡标识符。
    • 添加了对 Apple Silicon、Intel SkyLake 和 Intel KabyLake 处理器中实现的音频子系统的支持。 CS35L41 HDA 音频驱动程序支持睡眠模式。 添加了对集成音频芯片 Apple Silicon、AMD Rembrant DSP、AMD Pink Sardine ACP 6.2、Everest ES8326、Intel Sky Lake 和 Kaby Lake、Mediatek MT8186、NXP i.MX8ULP DSP、Qualcomm SC8280XP、SM8250、ASoC(ALSA 片上系统)的支持SM8450 和德州仪器 SRC4392
    • 添加了对 LCD 面板 Samsung LTL101AL01、B120XAN01.0、R140NWF5 RH、Densitron DMT028VGHMCMI-1A TFT、AUO B133UAN02.1、IVO M133NW4J-R3、Innolux N120ACA-EA1、AUO B116XAK01.6、BOE NT116WH M-N21、 INX N116BCA- EA2、INX N116BCN-EA1、多创科技MI0800FT-9。
    • 添加了对 Baikal-T1 SoC 中使用的 AHCI SATA 控制器的支持。
    • 添加了对蓝牙芯片 MediaTek MT7921、Intel Magnetor(CNVi,集成连接)、Realtek RTL8852C、RTW8852AE 和 RTL8761BUV (Edimax BT-8500) 的支持。
    • 高通无线模块的ath11k驱动程序增加了对160 MHz范围内频谱扫描的支持,实现了多线程NAPI,并改进了对高通WCN6750 Wi-Fi芯片的支持。
    • 添加了 PinePhone 键盘、InterTouch 触摸板 (ThinkPad P1 G3)、X-Box 自适应控制器、PhoenixRC 飞行控制器、VRC-2 汽车控制器、DualSense Edge 控制器、IBM 操作面板、XBOX One Elite 遥控器、平板电脑 XP-PEN Deco Pro S 的驱动程序和 Intuos Pro Small (PTH-460)。
    • 添加了 Aspeed HACE(哈希和加密引擎)加密加速器的驱动程序。
    • 添加了对集成 Thunderbolt/USB4 Intel Meteor Lake 控制器的支持。
    • 添加了对 Sony Xperia 1 IV、Samsung Galaxy E5、E7 和 Grand Max、Pine64 Pinephone Pro 智能手机的支持。
    • 添加了对 ARM SoC 和主板的支持:AMD DaytonaX、Mediatek MT8186、Rockchips RK3399 和 RK3566、TI AM62A、NXP i.MX8DXL、Renesas R-Car H3Ne-1.7G、Qualcomm IPQ8064-v2.0、IPQ8062、IPQ8065、Kontron SL/ BL i.MX8MM OSM-S、MT8195(宏碁番茄)、Radxa ROCK 4C+、NanoPi R4S 企业版、JetHome JetHub D1p。 更新了 SoC Samsung、Mediatek、Renesas、Tegra、Qualcomm、Broadcom 和 NXP 的驱动程序。

与此同时,拉丁美洲自由软件基金会形成了完全自由的内核 6.1 版本 - Linux-libre 6.1-gnu,清除了包含非自由组件或代码段的固件和驱动程序元素,其范围为受制造商限制。 新版本清理了具有基于 AArch8852 架构的处理器的各种 Qualcomm 和 MediaTek SoC 的新 rtw64b 驱动程序和 DTS 文件。 更新了驱动程序和子系统 amdgpu、i915、brcmfmac、r8188eu、rtw8852c、Intel ACPI 中的斑点清理代码。 过时驱动程序 tm6000 电视卡、cpia2 v4l、sp8870、av7110 的清理已得到纠正。

来源: opennet.ru

添加评论