内核版本 Linux 6.12 版本,支持实时功能

经过两个月的开发,Linus Torvalds 发布了内核。 Linux 6.12. 其中最显著的变化包括:启用实时模式、通过 eBPF 创建 CPU 调度器的 sched_ext、紧急情况下的二维码输出、设备内存 TCP 机制、SCHED_DEADLINE 服务器资源预留机制、改进 EEVDF 任务调度器、用于设置完整性策略的 IPE 模块。

新版本包含来自 14607 名开发人员的 2167 个修复,补丁大小为 37 MB(更改影响了 13087 个文件,添加了 507913 行代码,删除了 234083 行)。最新版本有来自 15130 名开发人员的 2078 个修复,补丁大小为 85 MB(在 6.10 内核中,补丁大小为 41 MB)。 45 中引入的所有更改中大约 6.12% 与设备驱动程序相关,大约 12% 的更改与更新特定于硬件架构的代码相关,13% 与网络堆栈相关,6% 与文件系统相关,3% 与文件系统相关。与内部内核子系统相关。

内核6.12的主要创新:

  • 内存和系统服务
    • 现在无需额外补丁即可构建支持 PREEMPT_RT 选项的内核,实现实时操作。此前,内核缺少一项功能,即通过 printk 函数支持非阻塞原子输出,而这项功能现已包含在内核中,从而导致 PREEMPT_RT 模式无法启用。PREEMPT_RT 支持适用于 x86、x86_64、ARM64 和 RISC-V 架构。此前,PREEMPT_RT 模式的实现是通过外部补丁实现的,一些发行版(例如 RHEL、SUSE 等)也采用了这些补丁。 Ubuntu并创建了其产品的独立实时版本,这些产品在金融系统、音频和视频处理设备、航空、医疗、机器人、电信和工业系统等领域都有需求,在这些领域,需要确保可预测的事件处理时间。
    • 新增的“sched_ext”(SCX)机制使得利用eBPF创建CPU调度器成为可能,这些调度器几乎涵盖了任务调度和CPU资源分配的所有方面。此类调度器可以在内核中动态加载和执行。 Linux в 虚拟机 eBPF 的 sched_ext 机制简化了特定任务调度器的创建,支持对各种调度技术和策略进行实验,并允许快速创建工作原型以及在生产基础设施中动态替换调度器。例如,使用 sched_ext,您可以创建一个调度器,该调度器能够考虑特定应用程序的特性,并根据系统状态和其他因素动态地更改其调度策略。
    • 组成包括SCHED_DEADLINE服务器机制运行所必需的补丁的剩余部分,解决了CPU被高优先级(实时)任务独占时,普通任务对CPU资源利用不足的问题。为了防止 CPU 独占,内核之前使用了实时节流机制,试图为低优先级任务保留 5% 的时间,而将 95% 的时间留给实时任务。这种机制还有很多不足之处,因为在许多情况下普通任务没有获得足够的处理器时间。 SCHED_DEADLINE 服务器实现了更高效的资源预留机制。
    • EEVDF(最早合格虚拟截止时间优先)任务调度程序的集成已完成,它取代了从内核 2.6.23 开始提供的 CFS(完全公平调度程序)调度程序。新的调度程序在选择将执行转移到的下一个进程时,会考虑尚未接收到足够处理器资源或已接收到不公平的大量处理器时间的进程。在第一种情况下,控制权向进程的转移是强制的,而在第二种情况下,控制权的转移则相反,被推迟。旧的 CFS 调度程序使用启发式和微调来识别需要特别关注的进程,而新的调度程序会更明确地跟踪它们,并且不需要微调。 EEVDF 有望减少 CFS 存在调度问题的任务的延迟。
    • 在内核紧急处理程序 - DRM Panic 中,它使用 DRM(直接渲染管理器)子系统以“蓝屏死机”的方式显示可视化报告,能够显示带有 kmsg 报告的徽标和 QR 代码添加了发生紧急情况时的屏幕。由于 QR 码只能容纳 2953 字节,因此提供了 DRM_PANIC_SCREEN_QR_CODE_URL 选项,其中使用 zlib 压缩 kmsg 报告并将其作为参数附加到 URL,这允许通过 V40 QR 码传输约 7500 字节。当使用内核构建包时,发行版可以为 URL 设置基本 URL,这将允许它们导航到报告问题的页面。要选择 QR 码格式,提供了 DRM_PANIC_SCREEN_QR_VERSION 设置。
    • 添加了对 ARM POE(权限覆盖扩展)的支持,允许您设置对内存区域的访问权限。使用此扩展,在具有 ARM64 处理器的系统上,可以实现内存保护密钥机制,该机制用于在不更改内存页表的情况下限制对内存页的访问。
    • 对于Loongarch、ARM64、PowerPC和s390架构,移动了getrandom()系统调用的实现,并使用vDSO(虚拟动态共享对象)机制进行了优化,这使得可以将系统调用处理程序从内核移动到用户空间并避免上下文切换。通过优化,您可以将随机数的生成速度提高多达 15 倍。
    • io_uring 异步输入/输出子系统中添加了使用绝对超时的功能(当系统时钟达到特定时间时触发)(之前只能设置相对超时,即从操作开始的持续时间) )。
    • 添加了用于使用 SWIG 工具包生成 libcpupower 库的绑定的文件,该工具包允许您从各种编程语言的 C/C++ 代码生成绑定。绑定允许您使用 Python 和其他语言创建脚本,并使用它们来扩展 libcpupower 库的功能,该库提供了用于从用户空间管理 cpufreq 和驱动程序的 API。
    • cpuidle 实用程序显示空闲状态“驻留”的值,用于实时系统,并考虑处理器必须处于空闲状态的最短时间,以证明转换进入和退出此状态的能源成本是合理的。
    • 增加了使用 Clang 编译器构建标准 C 库 nolibc 的功能,该库包含在内核源代码中。 Linux 并提供了一个对基本系统调用的封装。在 Clang 中构建 nolibc 时,链接时优化 (LTO) 将被启用。
    • 一些 cgroup1 接口已被弃用,例如 TCP 记帐、软限制版本 XNUMX 和内存耗尽管理。目前对这些功能的支持仍然完整,并发出警告以研究继续使用这些功能的用户数量。
    • 添加了配置环形跟踪缓冲区以在重新引导后保存累积数据的功能,这将使您在内核崩溃时不会丢失累积的调试信息。数据存储在内存中。启用是通过trace_instance内核命令行参数完成的,例如,设置“trace_instance=boot_map@0x285400000:12M”将在12x0处为“boot_map”缓冲区保留285400000MB内存,可以通过文件/sys/kernel访问该缓冲区/跟踪/实例/boot_map。
    • 继续从 Rust-for- 分支迁移更改Linux与使用 Rust 作为第二语言开发驱动程序和内核模块相关的功能(Rust 支持默认未启用,内核的构建依赖项中也不包含 Rust)。新增了用于处理双向链表和红黑搜索树的“list”和“rbtree”模块。扩展了“init”、“sync”、“types”和“error”模块的功能。新增了在构建内核时使用 Rust 代码的功能,该内核具有针对 Spectre 攻击的保护(MITIGATION_{RETHUNK,RETPOLINE,SLS} 选项)、使用 KASAN 调试系统、kCFI(内核控制流完整性)和 Shadow Call 保护机制,以及使用其他 GCC 插件的功能。新增了一个用 Rust 编写的 Applied Micro QT2025 PHY 以太网控制器驱动程序。已创建单独的文档网站:rust.docs.kernel.org。
    • xdrgen 工具已添加到内核源代码中,用于将 XDR(外部数据表示)规范转换为使用内核采用的 C 风格编写的 XDR 编码和解码函数。 Linux.
    • 内核经过修改,实现了指针屏蔽机制,以减少 64 位 copy_from_user() 函数中对barrier_nospec() 的缓慢调用次数,该函数用于将数据从用户空间复制到内核中。使用屏蔽可将“per_thread_ops”测试速度提高 2.6%,该测试评估一个线程中可以执行的操作数量。
    • 添加了新的 USB 驱动程序,允许您在通过 USB 安装 9p 文件系统时使用 9pfs 协议作为从 USB 设备发送和接收数据的传输(例如,“mount -t 9p -o trans=usbg, aname=/路径/到/ fs /mnt/9”)。使用新驱动程序的一个示例是在开发嵌入式设备时使用它代替 NFS 来组织根分区的引导。
  • 磁盘子系统、I/O 和文件系统
    • VFS 子系统中添加了使用块大小大于系统中内存页大小的存储设备的功能。在文件系统中,目前仅 XFS 支持此功能。
    • FUSE 子系统允许您创建在用户空间中操作的文件系统的实现,它添加了对映射已安装文件系统的用户标识符的支持,用于将已安装的外部分区上的特定用户的文件与当前外部分区上的另一个用户进行匹配。系统。
    • 已实现新的 fcntl 操作 F_CREATED_QUERY,使应用程序能够确定使用 O_CREAT 标志打开的文件是否已创建或之前是否已存在。
    • 添加了在 name_to_handle_at() 系统调用中使用唯一 64 位挂载点 ID 的功能,以避免解析 /proc/mountinfo 时的竞争条件。
    • 内核中“文件”结构的大小已从 232 字节减少到 184 字节,这减少了主动处理文件的系统的内存消耗。
    • 禁止将文件系统挂载到 /proc 层次结构内的挂载点(例如 /proc/PID/fd),这会产生潜在的安全问题。
    • 伪 FS NSFS(命名空间 FS)用于处理命名空间,提供有关挂载点命名空间的附加信息。
    • EROFS(可扩展只读文件系统)文件系统专为在只读分区上使用而设计,现在支持直接从保存为文件的磁盘映像挂载文件系统。
    • 新的 ioctl 命令 XFS_IOC_START_COMMIT 和 XFS_IOC_COMMIT_RANGE 已添加到 XFS,用于在两个文件之间交换内容。
    • NFS 已添加对“LOCALIO”协议的支持,该协议允许您确定客户端和服务器是否处于连接状态。 服务器 在同一主机上使用 NFS 以启用相应的优化。
    • 在Btrfs文件系统中,提出了性能优化,对代码进行了重构,减少了读操作时extent锁定的区域,继续将内存页转换为使用页对开工作,并实现了自动内存释放。为 btrfs_path 结构实现。
    • 在 Ext4 文件系统中,与块分配、范围管理、快速提交和日志记录相关的错误已得到修复。
  • 虚拟化和安全
    • 添加了微软开发的IPE(完整性策略执行)LSM模块,用于扩展现有的强制访问控制系统。该模块允许您为整个系统定义通用完整性策略,指示允许哪些操作以及应如何验证组件的真实性。例如,使用 IPE,您可以指定允许运行哪些可执行文件,同时考虑到它们与使用 dm-verity 系统提供的加密哈希的参考版本的合规性。
    • 在内核编译阶段,可以单独启用针对 CPU 中不同 Spectre 类漏洞的可用保护方法。 Kconfig 提供了新参数:MITIGATE_MDS(针对微架构数据采样漏洞的防护)、MITIGATE_TAA(针对 TSX 异步中止漏洞的防护)、MITIGATE_MMIO_STALE_DATA(针对 MMIO 过时数据漏洞的防护)、MITIGATE_L1TF(针对 L1 终端故障漏洞的防护)、MITIGATE_RETBLEED (针对 Retbleed 漏洞的防护)、MITIGATE_SPECTRE_V1、MITIGATE_SPECTRE_V2(针对 Spectre 漏洞的防护)、MITIGATE_SRBDS(针对特殊寄存器缓冲区数据采样漏洞的防护)、MITIGATE_SSB(针对推测存储绕过漏洞的防护)。
    • 在 Kconfig 中添加了命令行选项 proc_mem.force_override 和一组汇编设置(PROC_MEM_FORCE_ALWAYS、PROC_MEM_FORCE_PTRACE 和 PROC_MEM_FORCE_NEVER),以防止通过 /proc/pid/mem 更改内存。
    • LSM子系统(Linux 安全模块)已切换为使用静态调用,从而提高了安全性和性能。
    • 在运行于客户环境中的环境中,能够使用适用于 ARM64 架构的标准内核。 Android-采用修改后的KVM虚拟机管理程序(受保护的KVM)的系统。
    • Landlock LSM 模块允许您限制一组进程与外部环境的交互,它实现了“IPC 作用域”概念,以有选择地限制使用 Unix 套接字和信号与沙箱环境的交互。例如,您可以禁止使用 Unix 套接字从沙箱环境连接到未应用隔离的进程,但允许连接到同一范围内的进程。
    • 在 KVM 虚拟机管理程序中,已向来宾系统的 CPUID 添加了一个标志,表示支持 AVX10.1 扩展。
  • 网络子系统
    • 增加了Device Memory TCP机制,允许使用网络套接字直接通过网络发送外围设备内存的内容(零拷贝模式),并将网络数据包的内容直接放置在设备内存区域中接收方。以数据包形式传输的数据从网卡传输到外围设备的内存,或者从设备内存绕过 CPU 直接传输到网卡,数据包标头最终存放在常规内核缓冲区中。
    • 许多以太网和无线驱动程序的功能已得到扩展。例如,Intel iwlwifi 驱动程序添加了对将 RLC/SMPS 操作移至固件端的支持,RealTek rtw89 驱动程序提高了性能并添加了对 RTL8852BT/8852BE-VT (WiFi 6) 芯片的支持,microchip 以太网驱动程序添加了对 IEEE 802.3 的支持bw (100BASE) 规范 -T1) 和 IEEE 802.3bp、Microsoft vNIC 和 IBM veth 虚拟以太网实现已得到改进。添加了适用于 Realtek RTL9054、RTL9068、RTL9072、RTL9075、RTL9068、RTL9071 和 Microchip LAN8650/1 10BASE-T1S MAC-PHY 以太网芯片的新驱动程序。
    • MPTCP(多路径 TCP)是 TCP 协议的扩展,用于组织通过不同网络接口沿多条路由同时传送 TCP 数据包,路由中使用的权重大小从 8 位增加到 16 位。实现了对丢失(黑洞)流量的检测,并暂停尝试与导致流量丢失的系统建立连接一段时间。
    • 对于 IPv6,实现了对 PIO(前缀信息选项)中“p”标志的支持,该标志在 RA 通告(IPv6 路由器通告)中用于通过 DHCPv6-PD(DHCPv6 前缀委派,RFC9663)选择客户端部署模型,而不是分配使用 SLAAC(无状态地址自动配置)基于前缀的单独地址。 IPv6 IOAM6 添加了对新的 tunsrc 封装模式的支持,可实现更好的性能。
    • 改进了处理 IPsec 控制数据包的性能。
    • 改进了刷新大型 nftables 规则集的性能。 nfnetlink_queue 改进了对 SCTP 协议的支持。
    • ethtool API 添加了对将多个网卡绑定到一个网络接口的支持。
  • Оборудование
    • 在 AMDGPU 驱动程序中,我们继续致力于实现对 AMD RDNA4(“GFX12”)GPU 的支持。添加了在不重置整个 GPU 的情况下重置单个任务队列的功能。
    • 基于 Intel Xe 架构的 GPU 的 Xe drm 驱动程序(直接渲染管理器)的工作仍在继续,该驱动程序用于 Intel Arc 系列显卡和集成显卡,从 Tiger Lake 处理器开始。新版本包括对基于 Battlemage 和 Lunar Lake 微架构的 GPU 的支持。引入了对 Xe2 CCS(颜色控制表面)修改器的支持,以控制集成和独立 GPU 的参数。
    • i915 驱动程序实现了通过 HWMON 或 sysfs 接口(“fan1_input”属性)输出有关风扇速度的信息的功能。 “i915.modeset”参数已被弃用;应使用“i915.nomodeset”参数代替“i0.modeset=915”。
    • msm DRM 驱动程序(Qualcomm Adreno GPU)添加了对 A615、A306 和 A621 GPU 的支持。
    • Nouveau 发球杆的内部结构经过重新设计和清洁。
    • intel_pstate 驱动程序控制采用 Intel 处理器的系统上的功耗参数(P 状态),增加了对具有非对称(不同特性)CPU 的混合系统的支持,以及对基于 Granite Rapids 和 Sierra Forest 的处理器电源管理的支持微架构。在 intel_idle 驱动程序中添加了对 Xeon Granite Rapids CPU 的支持。 intel_rapl 驱动程序提供对 AMD 1Ah 系列进程和 Intel ArrowLake-U 处理器的识别。
    • 继续包含支持 ARM SoC Snapdragon X Elite 的更改,该 SoC 使用高通自己的 12 核 Oryon CPU 和高通 Adreno GPU。该芯片针对笔记本电脑和PC使用,在多项性能测试中领先于Apple M3和Intel Core Ultra 155H芯片。
    • 添加了对 ARM 板、SoC 和设备的支持:Broadcom bcm2712 (Raspberry Pi 5)、Renesas R9A09G057 (RZ/V2H)、Qualcomm Snapdragon 414 (MSM8929)、Lenovo ThinkPad T14s Gen 6、Lenovo A6000/A6010、Surface Laptop 7、Anbernic RG35XXSP , Firefly Core-PX30-JD4, Lunzn Fastrhino R68S, Aspeed Riser, AGX Orin, Rockchip Qnap-TS433, Huashan Pi, Meta Catalina, BeagleY-AI, NanoPi R2S Plus, ExynosAuto v920, SOPHGO SG2002, Qualcomm IPQ5332, LG G4 (h815 )、酷派 CM5 GenBook、Anbernic RG35XXSP、GameForce Ace、IBM P11、控创 i.MX93 OSM-S、NanoPC-T6
    • 添加了对屏幕面板 Anbernic RG28XX、On Tat Industrial Company KD50G21-40NT-A1、Innolux G070ACE-LH3、Melfas lmfbx101117480、Densitron DMT028VGHMCMI-1D、Microchip AC40T08A、AOU B116XTN02.3、AUO B116XAN06.1、B116X 的支持AT04.1、京东方TV101WUM -LL2、京东方NV140WUM-N41、京东方NV133WUM-N63、京东方NV116WHM-A4D、京东方NE140WUM-N6G、CMN N116BCA-EA2、CMN N116BCP-EA2、CSW MNB601LS1-4、星空er88577。
    • 音频子系统增加了对芯片和编解码器 RME Digiface USB、AMD ACP 7.1、Mediatek MT6367、MT8365、Realtek RTL1320、C-Media CM9825 的支持。 Intel ASoC 的旧声音驱动程序已被宣布过时,建议改用 AVS 驱动程序。 SoundWire 驱动程序进行了许多改进。

来源: opennet.ru

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster