Linux 6.3 内核版本

经过两个月的开发,Linus Torvalds 发布了 Linux 内核 6.3。 一些最显着的变化包括:清理旧版 ARM 平台和图形驱动程序、继续集成 Rust 语言支持、hwnoise 实用程序、BPF 中对红黑树结构的支持、IPv4 的 BIG TCP 模式、内置 Dhrystone 基准测试、能力为了禁用 memfd 中的执行,支持使用 BPF 创建 HID 驱动程序,对 Btrfs 进行了更改以减少块组的碎片。

新版本包含来自 15637 名开发人员的 2055 个修复; 补丁大小 - 76 MB(更改影响了 14296 个文件,添加了 1023183 行代码,删除了 883103 行)。 相比之下,之前的版本提供了来自 16843 名开发人员的 2178 个修复; 补丁大小为 62 MB。 39 内核中引入的所有更改中,大约 6.3% 与设备驱动程序相关,大约 15% 的更改与更新特定于硬件架构的代码相关,10% 与网络堆栈相关,5% 与文件系统相关, 3% 与内部内核子系统相关。

内核6.3的主要创新:

  • 内存和系统服务
    • 对与旧的和未使用的 ARM 板相关的代码进行了重大清理,从而可以将内核源代码的大小减少 150 万行。 超过 40 个旧的 ARM 平台已被移除。
    • 已经实现了为具有 HID(人机接口设备)接口的输入设备创建驱动程序的能力,以 BPF 程序的形式实现。
    • Rust-for-Linux 分支与使用 Rust 语言作为开发驱动程序和内核模块的第二语言相关的附加功能的转移仍在继续。 默认情况下不启用 Rust 支持,并且不会导致 Rust 被包含为必需的内核构建依赖项。 先前版本中提供的功能已扩展为支持 Arc(带有引用计数的指针的实现)、ScopeGuard(超出范围时的清理)和foreignOwnable(提供 C 和 Rust 代码之间的指针移动)类型。 “borrow”模块(类型“Cow”和特征“ToOwned”)已从“alloc”包中删除。 值得注意的是,内核中 Rust 支持的状态已经接近开始接受用 Rust 写入内核的第一个模块。
    • x86-64 系统上的用户模式 ​​Linux(将内核作为用户进程运行)实现了对 Rust 语言编写的代码的支持。 添加了对使用启用了链接时间优化 (LTO) 的 clang 构建用户模式 ​​Linux 的支持。
    • 添加了 hwnoise 实用程序来跟踪硬件引起的延迟。 禁用中断处理时确定运算执行时间的偏差(抖动),每 10 分钟计算超过 XNUMX 微秒。
    • 添加了实现 Dhrystone 基准测试的内核模块,可用于评估没有用户空间组件的配置中的 CPU 性能(例如,在仅实现内核加载的新 SoC 的移植阶段)。
    • 添加了内核命令行参数“cgroup.memory=nobpf”,该参数禁用 BPF 程序的内存消耗统计,这对于具有隔离容器的系统非常有用。
    • 对于BPF程序,提出了红黑树数据结构的实现,它使用kfunc + kptr(bpf_rbtree_add,bpf_rbtree_remove,bpf_rbtree_first)而不是添加新的映射类型。
    • 可重启序列(rseq,可重启序列)机制增加了将并行执行标识符(内存映射并发 ID)传输到进程的能力,以 CPU 编号进行标识。 Rseq 提供了一种以原子方式快速执行操作的方法,如果被另一个线程中断,则会被清理并再次尝试。
    • ARM 处理器支持 SME 2(可扩展矩阵扩展)指令。
    • 对于s390x和RISC-V RV64架构,已经实现了对“BPF Trampoline”机制的支持,这使得在内核和BPF程序之间传输调用时可以最大限度地减少开销。
    • 在具有基于 RISC-V 架构的处理器的系统上,使用“ZBB”指令来加速字符串操作。
    • 对于基于LoongArch指令集架构的系统(用于龙芯3 5000处理器并实现新的RISC ISA,类似于MIPS和RISC-V),支持内核地址空间随机化(KASLR)、内核内存布局的改变(重定位) ),硬件点实现了stop和kprobe机制。
    • DAMOS(基于数据访问监控的操作方案)机制允许您根据内存访问频率释放内存,并支持过滤器以将某些内存区域排除在 DAMOS 的处理之外。
    • Nolibc 最小标准 C 库提供对 s390 架构和 Arm Thumb1 指令集的支持(此外还支持 ARM、AArch64、i386、x86_64、RISC-V 和 MIPS)。
    • Objtool 已经过优化,可以加速内核组装并减少组装过程中的峰值内存消耗(在“allyesconfig”模式下构建内核时,现在在具有 32 GB RAM 的系统上强制终止进程不会出现问题)。
    • Intel ICC编译器对内核汇编的支持已经停止,已经很长时间不起作用了,也没有人表示愿意修复它。
  • 磁盘子系统、I/O 和文件系统
    • tmpfs 实现了对已挂载文件系统的映射用户 ID 的支持,用于将已挂载的外部分区上的特定用户的文件与当前系统上的另一个用户进行匹配。
    • 在 Btrfs 中,为了减少块组的碎片,在分配块时将范围按大小划分,即现在,任何块组都限制为小型(最多 128KB)、中型(最多 8 MB)和大型扩展。 raid56 实现已被重构。 检查校验和的代码已被重新​​设计。 通过缓存目录的 utime 并仅在必要时执行命令,进行了性能优化,将发送操作速度提高了 10 倍。 通过跳过共享数据(快照)的反向链接检查,Fiemap 操作现在速度提高了三倍。 通过优化 B 树结构中键的搜索,元数据操作速度加快了 10%。
    • ext4 文件系统的性能得到了提高,允许多个进程使用共享 inode 锁(而不是独占锁)同时对预分配块执行直接 I/O 操作。
    • 在 f2fs 中,已经做了一些工作来提高代码的可读性。 解决了与原子写入和新范围缓存相关的重要问题。
    • EROFS(增强型只读文件系统)文件系统,设计用于只读分区,实现了将压缩文件内容的解压缩操作绑定到CPU的能力,以减少访问数据时的延迟。
    • BFQ I/O 调度程序增加了对高级旋转磁盘驱动器的支持,例如使用多个单独控制的磁头驱动器(多执行器)的驱动器。
    • NFS 客户端和服务器实现中添加了对使用 AES-SHA2 算法的数据加密的支持。
    • FUSE(用户空间文件系统)子系统添加了对查询扩展机制的支持,允许在查询中放置附加信息。 基于此功能,可以向 FS 请求添加组标识符,这是在 FS 中创建对象(create、mkdir、symlink、mknod)时考虑访问权限所必需的。
  • 虚拟化和安全
    • x86 系统的 KVM 管理程序添加了对 Hyper-V 扩展超级调用的支持,并将其转发到用户空间中主机环境中运行的处理程序。 这一更改使得实现对 Hyper-V 虚拟机管理程序的嵌套启动的支持成为可能。
    • KVM 可以更轻松地限制访客访问与性能测量相关的 PMU(性能监控单元)事件。
    • memfd机制,允许你通过进程间传输的文件描述符来识别内存区域,增加了创建禁止代码执行的区域(不可执行的memfd)的功能,并且以后无法设置执行权限。
    • 添加了新的 prctl 操作 PR_SET_MDWE,该操作会阻止尝试启用同时允许写入和执行的内存访问权限。
    • 基于 AMD Zen 4 处理器中提出的自动 IBRS(增强型间接分支限制推测)模式,默认添加并启用针对 Spectre 类攻击的保护,该模式允许在中断处理、系统调用和上下文切换。 与 Retpoline 保护相比,所提出的保护可以降低开销。
    • 修复了在使用同步多线程技术(SMT 或超线程)时允许绕过针对 Spectre v2 攻击的防护的漏洞,该漏洞是由于在选择 IBRS 保护模式时禁用 STIBP(单线程间接分支预测器)机制而导致的。
    • 对于基于ARM64架构的系统,添加了新的汇编目标“virtconfig”,选择后,仅激活虚拟化系统中启动所需的最小内核组件集。
    • 对于m68k架构,增加了对使用seccomp机制过滤系统调用的支持。
    • 添加了对基于 Microsoft Pluton 技术的 AMD Ryzen 处理器内置的 CRB TPM2(命令响应缓冲区)设备的支持。
  • 网络子系统
    • 添加了 netlink 接口来配置 PLCA(物理层冲突避免)子层,该子层在 IEEE 802.3cg-2019 规范中定义,并在针对连接物联网设备和工业系统而优化的 802.3cg (10Base-T1S) 以太网中使用。 PLCA 的使用提高了具有共享媒体的以太网的性能。
    • 用于管理 WiFi 7 (802.11be) 无线接口的“无线扩展”API 的支持已停止,因为该 API 未涵盖所有必要的设置。 当尝试使用“无线扩展”API(该 API 继续作为模拟层受到支持)时,现在将为大多数当前设备显示警告。
    • 有关 netlink API 的详细文档已准备就绪(针对核心开发人员和用户空间应用程序开发人员)。 ynl-gen-c 实用程序已实现,用于根据 Netlink 协议的 YAML 规范生成 C 代码。
    • 网络套接字中添加了对 IP_LOCAL_PORT_RANGE 选项的支持,以通过地址转换器简化传出连接的配置,而无需使用 SNAT。 当在多台主机上使用一个IP地址时,IP_LOCAL_PORT_RANGE使得每台主机上可以使用不同范围的传出网络端口,并根据网关上的端口号转发数据包。
    • 对于MPTCP(多路径TCP),已经实现了使用IPv4和IPv6协议处理混合流的能力。 MPTCP 是 TCP 协议的扩展,用于组织 TCP 连接的操作,通过与不同 IP 地址关联的不同网络接口沿着多条路由同时传送数据包。
    • 对于 IPv4,可以使用 BIG TCP 扩展,它允许您将最大 TCP 数据包大小增加到 4GB,以优化高速内部数据中心网络的运行。 通过实施“巨型”数据包,实现了 16 位标头字段大小的数据包大小的类似增加,其 IP 标头中的大小设置为 0,实际大小以单独的 32 位传输单独附加标头中的字段。
    • 添加了新的 sysctl 参数 default_rps_mask,通过该参数可以设置默认 RPS(接收数据包引导)配置,该配置负责在中断处理程序级别跨 CPU 内核分配传入流量的处理。
    • 已停止支持用于限制 CBQ(基于类的排队)、ATM(ATM 虚拟电路)、dsmark(差异化服务标记)、tcindex(流量控制索引)和 RSVP(资源预留协议)流量的队列处理规则。 这些学科已经被废弃很长时间了,没有人愿意继续支持。
  • Оборудование
    • 删除了所有基于 DRI1 的显卡驱动程序:i810(较旧的集成 Intel 8xx 显卡)、mga(Matrox GPU)、r128(ATI Rage 128 GPU,包括 Rage Fury、XPERT 99 和 XPERT 128 卡)、savage(S3 Savage GPU)、sis (Crusty SiS GPU)、tdfx (3dfx Voodoo) 和 via (VIA IGP),它们已于 2016 年弃用,并且自 2012 年以来在 Mesa 中不再受支持。
    • 删除了旧版帧缓冲区驱动程序 (fbdev) omap1、s3c2410、tmiofb 和 w100fb。
    • 为集成到 Intel Meteor Lake CPU(第 14 代)中的 VPU(多功能处理单元)单元添加了 DRM 驱动程序,旨在加速与计算机视觉和机器学习相关的操作。 该驱动程序使用“accel”子系统实现,旨在为计算加速器提供支持,计算加速器可以以单独 ASIC 的形式提供,也可以作为 SoC 和 GPU 内部的 IP 块提供。
    • i915 (Intel) 驱动程序扩展了对独立 Intel Arc (DG2/Alchemist) 显卡的支持,为 Meteor Lake GPU 提供初步支持,并包括对 Intel Xe HP 4tile GPU 的支持。
    • amdgpu 驱动程序增加了对 AdaptiveSync 技术的支持以及在多个显示器上使用安全显示模式的能力。 更新了对 DCN 3.2 (Display Core Next)、SR-IOV RAS、VCN RAS、SMU 13.x 和 DP 2.1 的支持。
    • msm驱动程序(Qualcomm Adreno GPU)增加了对SM8350、SM8450、SM8550、SDM845和SC8280XP平台的支持。
    • Nouveau 驱动程序不再支持旧的 ioctl 调用。
    • etnaviv 驱动程序中添加了对 NPU VerSilicon(芯原神经网络处理器)的实验性支持。
    • pata_parport 驱动程序已针对通过并行端口连接的 IDE 驱动器实现。 添加的驱动程序允许我们从内核中删除旧的 PARIDE 驱动程序并对 ATA 子系统进行现代化改造。 新驱动程序的一个限制是无法通过并行端口同时连接打印机和磁盘。
    • 添加了支持 Wi-Fi 12 的 Qualcomm 芯片上的无线卡的 ath7k 驱动程序。添加了对 RealTek RTL8188EU 芯片上的无线卡的支持。
    • 增加了对 46 个基于 ARM64 架构处理器的主板的支持,包括 Samsung Galaxy tab A (2015)、Samsung Galaxy S5、BananaPi R3、Debix Model A、EmbedFire LubanCat 1/2、Facebook Greatlakes、Orange Pi R1 Plus、Tesla FSD 和还有基于 SoC Qualcomm MSM8953 (Snapdragon 610)、SM8550 (Snapdragon 8 Gen 2)、SDM450 和 SDM632、Rockchips RK3128 电视盒、RV1126 Vision、RK3588、RK3568、RK3566、RK3588 和 RK3328、TI K3 (AM642/AM654 68/ AM69/AMXNUMX)。

与此同时,拉丁美洲自由软件基金会形成了完全自由的内核 6.3 版本 - Linux-libre 6.3-gnu,清除了包含非自由组件或代码段的固件和驱动程序元素,其范围为受制造商限制。 在版本 6.3 中,新的 ath12k、aw88395 和 peb2466 驱动程序以及基于 AArch64 架构的 qcom 设备的新 devicetree 文件中的 blob 被清理。 更新了驱动程序和子系统 amdgpu、xhci-rcar、qcom-q6v5-pas、sp8870、av7110 以及带软件解码的 DVB 卡驱动程序和预编译 BPF 文件中的斑点清理代码。 mga、r128、tm6000、cpia2 和 r8188eu 驱动程序的清理工作已停止,因为它们已从内核中删除。 改进了 i915 驱动程序斑点清理。

来源: opennet.ru

添加评论