Linux 6.7 内核版本

经过两个月的开发,Linus Torvalds 发布了 Linux 内核 6.7。最显着的变化包括:Bcachefs 文件系统的集成、停止对 Itanium 架构的支持、Nouvea 与 GSP-R 固件配合使用的能力、NVMe-TCP 中对 TLS 加密的支持、在 BPF 中使用异常的能力、支持 io_uring 中的 futex、优化 fq(公平队列)调度程序性能)、支持 TCP-AO 扩展(TCP 身份验证选项)以及 Landlock 安全机制中限制网络连接的能力、添加对用户命名空间和 io_uring 的访问控制通过AppArmor。

新版本包含来自 18405 名开发人员的 2066 个修复,补丁大小为 72 MB(更改影响了 13467 个文件,添加了 906147 行代码,删除了 341048 行)。最新版本有来自 15291 名开发人员的 2058 个修复,补丁大小为 39 MB。 45 中引入的所有更改中大约 6.7% 与设备驱动程序相关,大约 14% 的更改与更新特定于硬件架构的代码相关,13% 与网络堆栈相关,5% 与文件系统相关,3% 与文件系统相关。与内部内核子系统相关。

内核6.7的主要创新:

  • 磁盘子系统、I/O 和文件系统
    • 内核采用 Bcachefs 文件系统代码,试图实现 XFS 的性能、可靠性和可扩展性,并结合 Btrfs 和 ZFS 中的高级功能元素。例如,Bcachefs 支持在一个分区中包含多个设备、多层驱动器布局(底层包含基于快速 SSD 的常用数据,顶层包含来自硬盘驱动器的较少使用数据)、复制(RAID)等功能。 1/10)、缓存、透明数据压缩(LZ4、gzip 和 ZSTD 模式)、状态切片(快照)、使用校验和进行完整性验证、存储 Reed-Solomon 纠错码 (RAID 5/6) 的能力、将信息存储在加密形式(使用ChaCha20和Poly1305)。在性能方面,Bcachefs领先于Btrfs和其他基于Copy-on-Write机制的文件系统,并表现出接近Ext4和XFS的运行速度。
    • Btrfs 文件系统引入了简化的配额模式,允许您通过仅跟踪创建它们的子分区中的范围来实现更高的性能,这显着简化了计算并提高了性能,但不允许您考虑在多个子分区中共享的范围。子分区。
    • Btrfs 添加了新的“条带树”数据结构,适用于物理映射跨设备不匹配的情况下的逻辑盘区映射。该结构目前用于分区块设备的 RAID0 和 RAID1 实现中。未来,他们计划在更高级别的RAID中使用这种结构,这将解决当前实现中存在的一些问题。
    • Ceph 文件系统实现了对已挂载文件系统的用户 ID 映射的支持,用于将已挂载的外部分区上的特定用户的文件与当前系统上的另一个用户进行匹配。
    • 添加了在挂载到 efivarfs 时指定 uid 和 gid 的功能,以允许非 root 进程更改 UEFI 变量。
    • 添加了对 exFAT 的 ioctl 调用,用于读取和更改 FS 属性。添加了对零大小目录的处理。
    • F2FS 实现了使用 16K 块的能力。
    • autofs 自动挂载机制已切换为使用新的分区挂载 API。
    • OverlayFS 提供“lowerdir+”和“datadir+”挂载选项。添加了对使用 xattrs 嵌套安装 OverlayFS 的支持。
    • XFS 优化了实时块分配代码中的 CPU 负载。提供了同时执行读取和 FICLONE 操作的能力。
    • EXT2 代码已转换为使用页面对开。
  • 内存和系统服务
    • 对英特尔安腾处理器中使用的 ia64 架构的支持已于 2021 年完全停止。安腾处理器由Intel于2001年推出,但ia64架构未能与AMD64竞争,主要是因为AMD64的性能更高,并且从32位x86处理器过渡更平滑。结果,英特尔的兴趣转向了 x86-64 处理器,而安腾的命运仍然是 HP Integrity 服务器,该产品的订单在三年前就被停止了。 ia64 支持的代码被从内核中删除主要是因为该平台长期缺乏支持,而 Linus Torvalds 表示愿意将 ia64 支持返回内核,但前提是有一个能够表现出高质量的维护者主内核之外对该平台的支持至少一年。
    • 添加了“ia32_emulation”内核行命令参数,该参数允许您在引导阶段启用或禁用为 x32-86 架构构建的内核中的 64 位模式模拟支持。在实用方面,新选项允许您构建支持 32 位应用程序兼容性的内核,但默认情况下禁用此模式以减少对内核的攻击向量,因为兼容性 API 的测试少于主内核接口。
    • 继续从 Rust-for-Linux 分支迁移与使用 Rust 语言作为开发驱动程序和内核模块的第二语言相关的更改(Rust 支持默认情况下不处于活动状态,并且不会导致将 Rust 包含在内核所需的程序集依赖项)。新版本过渡到使用 Rust 1.73 版本,并提供了一组用于处理工作队列的绑定。
    • 可以使用 binfmt_misc 机制在单独的非特权命名空间中添加对新可执行文件格式的支持(例如,运行已编译的 Java 或 Python 应用程序)。
    • cgroup 控制器 cpuset 允许您在执行任务时控制 CPU 核心的使用,它提供了本地分区和远程分区的划分,其区别在于父 cgroup 是否是正确的根部分。新设置“cpuset.cpus.exclusive”和“cpuset.cpus.excluisve. effective”也已添加到 cpuset 中,用于独占 CPU 绑定。
    • BPF 子系统实现了对异常的支持,异常被作为 BPF 程序的紧急出口进行处理,并能够安全地展开堆栈帧。此外,BPF 程序允许使用与 CPU 相关的 kptr 指针。
    • io_uring 子系统添加了对 futex 操作的支持,并实现了新操作:IORING_OP_WAITID(waitid 的异步版本)、SOCKET_URING_OP_GETSOCKOPT(getsockoptand 选项)、SOCKET_URING_OP_SETSOCKOPT(setsockopt 选项)和 IORING_OP_READ_MULTISHOT(多个读操作在有数据或缓冲区未满)。
    • 添加了轻量级单连接 FIFO 队列的实现,仅在进程上下文中出队时才需要自旋锁,而在任何上下文中向队列进行原子添加时都不需要自旋锁。
    • 添加了一个环形缓冲区“objpool”,具有用于分配和返回对象的高性能队列的可扩展实现。
    • 添加更改的初始部分是为了实现新的 futex2 API,该 API 在 NUMA 系统上具有更好的性能,支持 32 位以外的大小,并且可以用来代替多路复用的 futex() 系统调用。
    • 对于 ARM32 和 S390x 架构,添加了对当前 BPF 指令集 (cpuv4) 的支持。
    • 对于 RISC-V 架构,可以使用 Clang 17 中提供的 Shadow-Call 堆栈检查模式,该模式旨在防止在堆栈上发生缓冲区溢出时覆盖函数的返回地址。保护的本质是在将控制权转移给函数之后将返回地址保存在单独的“影子”堆栈中,并在退出函数之前检索该地址。
    • 合并相同内存页面的机制中添加了新的智能内存页面扫描模式(KSM:Kernel Samepage Merging),该模式可以跟踪未成功扫描的页面并减少其重新扫描的强度。为了启用新模式,添加了 /sys/kernel/mm/ksm/smart_scan 设置。
    • 添加了新的 ioctl 命令 PAGEMAP_SCAN,当与 userfaultfd() 一起使用时,该命令允许您确定写入特定内存范围的事实。例如,新功能可用于系统中保存和恢复 CRIU 进程的状态或游戏反作弊系统。
    • 在汇编系统中,如果Clang编译器可用,则默认启用使用perf子系统编写为BPF程序的示例的汇编。
    • 旧的 videobuf 层用于管理媒体子系统中的帧缓冲区,并在 10 多年前被新的 videobuf2 实现所取代,现已被删除。
  • 虚拟化和安全
    • fscrypt 子系统中添加了对小于文件系统中块大小的块中的数据进行加密的功能。这可能需要启用仅支持小块的硬件加密机制(例如,仅支持 4096 块大小的 UFS 控制器可以与具有 16K 块大小的文件系统一起使用)。
    • “iommufd”子系统允许您通过用户空间的文件描述符来管理 IOMMU(I/O 内存管理单元)内存页表,并添加了对尚未从 DMA 缓存(脏)刷新的数据的跟踪操作,这对于在进程迁移期间确定具有未刷新数据的内存是必需的。
    • Landlock 机制中添加了对 TCP 套接字定义访问控制规则的支持,它允许您限制一组进程与外部环境的交互。例如,您可以创建一条规则,仅允许访问网络端口 443 来建立 HTTPS 连接。
    • AppArmor 子系统添加了控制对 io_uring 机制的访问和创建用户命名空间的功能,这允许您有选择地仅允许某些进程访问这些功能。
    • 添加了虚拟机证明 API 以验证虚拟机启动过程的完整性。
    • LoongArch系统支持使用KVM管理程序的虚拟化。
    • 在 RISC-V 系统上使用 KVM hypervisor 时,出现了对 Smstateen 扩展的支持,它会阻止虚拟机访问 hypervisor 未明确支持的 CPU 寄存器。还添加了对在来宾系统中使用 Zicond 扩展的支持,该扩展允许使用一些条件整数运算。
    • 在 KVM 下运行的基于 x86 的来宾系统中,最多允许 4096 个虚拟 CPU。
  • 网络子系统
    • NVMe-TCP (NVMe over TCP) 驱动程序允许您使用 TCP 协议通过网络 (NVM Express over Fabrics) 访问 NVMe 驱动器,并添加了对使用 TLS 加密数据传输通道的支持(使用 KTLS 和后台进程)在用户空间 tlshd 中进行连接协商)。
    • fq(公平队列)数据包调度程序的性能得到了优化,使得在 tcp_rr(TCP 请求/响应)测试中的重负载下吞吐量提高了 5%,在无限流量的 UDP 数据包下吞吐量提高了 13%。
    • TCP 添加了可选的微秒精度时间戳 (TCP TS) 功能 (RFC 7323),可实现更准确的延迟估计和更先进的拥塞控制模块。要启用它,您可以使用命令“ip route add 10/8 ... features tcp_usec_ts”。
    • TCP 堆栈添加了对 TCP-AO 扩展(TCP 身份验证选项,RFC 5925)的支持,这使得可以使用 MAC 代码(消息身份验证代码)以及更现代的算法 HMAC-SHA1 和 CMAC-AES 来验证 TCP 标头。 128 替代以前可用的基于旧 MD5 算法的 TCP-MD5 选项。
    • 添加了一种新型虚拟网络设备“netkit”,其中的数据传输逻辑使用BPF程序设置。
    • KSMBD 是 SMB 服务器的内核级实现,增加了对解析包含复合字符代理对的文件名的支持。
    • NFS 通过 RPC 服务改进了线程的实现。添加了对写入委托的支持(适用于 NFSv4.1+)。 NFSD 添加了对 rpc_status netlink 处理程序的支持。改进了重新导出到 knfsd 时对 NFSv4.x 客户端的支持。
  • Оборудование
    • Nouveau 内核模块已添加对 GSP-RM 固件的初步支持,该模块用于 NVIDIA RTX 20+ GPU,将初始化和 GPU 控制操作移至单独的 GSP 微控制器(GPU 系统处理器)一侧。 GSP-RM 支持允许 Nouveau 驱动程序通过固件调用来工作,而不是直接对硬件交互进行编程,从而通过使用预构建的初始化和电源管理调用来添加对新 NVIDIA GPU 的支持变得更加容易。
    • AMDGPU 驱动程序支持 GC 11.5、NBIO 7.11、SMU 14、SMU 13.0 OD、DCN 3.5、VPE 6.1 和 DML2。改进了对无缝加载的支持(切换视频模式时不闪烁)。
    • i915 驱动程序添加了对 Intel Meteor Lake 芯片的支持,并添加了 Intel LunarLake (Xe 2) 的初始实现。
    • 添加了对 USB4 v2 (120/40G) 规范中添加的非对称传输通道的支持。
    • 添加了对 ARM SoC 的支持:Qualcomm Snapdragon 720G(用于小米智能手机)、AMD Pensando Elba、Renesas、R8A779F4(R-Car S4-8)、USRobotics USR8200(用于路由器和 NAS)。
    • 添加了对 Fairphone 5 智能手机和 ARM 板 Orange Pi 5、QuartzPro64、Turing RK1、Variscite MX6、BigTreeTech CB1、Freescale LX2162、Google Spherion、Google Hayato、Genio 1200 EVK、RK3566 Powkiddy RGB30 的支持。
    • 添加了对 RISC-V 板 Milk-V Pioneer 和 Milk-V Duo 的支持。
    • 增加对搭载 AMD CPU 的华为笔记本电脑声音接口的支持。添加了对 Dell Oasis 13/14/16 笔记本电脑上安装的其他扬声器的支持。添加了对华硕 K6500ZC 内置扬声器的支持。添加了对 HP 255 G8 和 G10 笔记本电脑上的静音指示灯的支持。添加了对 acp6.3 音频驱动程序的支持。添加了对 Focusrite Clarett+ 2Pre 和 4Pre 专业录音接口的支持。

与此同时,拉丁美洲自由软件基金会形成了完全自由的内核6.7版本——Linux-libre 6.7-gnu,清除了包含非自由组件或代码部分的固件和驱动程序的元素,其范围受到限制由制造商。在版本 6.7 中,斑点清理代码已在各种驱动程序和子系统中更新,例如,在 amdgpu、nouveau、adreno、mwifiex、mt7988、ath11k、avs 和 btqca 驱动程序中。用于清理 localtalk 和 rtl8192u 驱动程序的代码已被删除,因为它们被排除在内核之外。删除了之前错误添加的用于清理 xhci-pci、rtl8xxxu 和 rtw8822b 驱动程序的不必要组件。清理了 Aarch64 架构的 dts 文件中的 blob 名称。删除了新驱动程序 mt7925、tps6598x、aw87390 和 aw88399 中的斑点。

来源: opennet.ru

添加评论