Linux 5.15 内核版本

经过两个月的开发,Linus Torvalds 发布了 Linux 内核 5.15。 值得注意的变化包括:支持写入的新 NTFS 驱动程序、具有 SMB 服务器实现的 ksmbd 模块、用于内存访问监控的 DAMON 子系统、实时锁定原语、Btrfs 中的 fs-verity 支持、用于饥饿响应系统内存的 process_mrelease 系统调用、远程认证模块DM-ima。

新版本包含来自 13499 名开发人员的 1888 个修复,补丁大小为 42 MB(更改影响了 10895 个文件,添加了 632522 行代码,删除了 299966 行代码)。 45 中引入的所有更改中大约 5.15% 与设备驱动程序相关,大约 14% 的更改与更新特定于硬件架构的代码相关,14% 与网络堆栈相关,6% 与文件系统相关,3% 与文件系统相关。与内部内核子系统相关。

主要创新:

  • 磁盘子系统、I/O 和文件系统
    • 内核采用了 NTFS 文件系统的新实现,由 Paragon Software 开放。 新驱动程序可以在写入模式下工作,并支持当前版本 NTFS 3.1 的所有功能,包括扩展文件属性、访问列表 (ACL)、数据压缩模式、有效处理文件中的空白空间(稀疏)以及重放从日志在失败后恢复完整性。
    • Btrfs 文件系统支持 fs-verity 机制,该机制用于使用存储在元数据区域中的与文件关联的加密哈希或密钥来透明地控制各个文件的完整性和真实性。 以前,fs-verity 仅适用于 Ext4 和 F2fs 文件系统。

      Btrfs 还添加了对已安装文件系统映射用户 ID 的支持(之前支持 FAT、ext4 和 XFS 文件系统)。 此功能允许您将已安装的外部分区上的特定用户的文件与当前系统上的另一个用户的文件进行比较。

      Btrfs 的其他更改包括:更快地将键添加到目录索引以提高文件创建性能; 能够使用一台设备运行 raid0,使用两台设备运行 raid10(例如,在重新配置阵列的过程中); 选项“rescue=ibadroots”忽略不正确的范围树; 加速“发送”操作; 减少重命名操作期间的锁定冲突; 能够在具有 4K 内存页面大小的系统上使用 64K 扇区。

    • 在 XFS 中,在文件系统中使用 2038 年之后的日期的能力已经稳定。 实现了延迟 inode 停用的机制,并支持延迟安装和删除文件属性。 为了消除问题,禁用已安装分区的磁盘配额的功能已被删除(您可以强制禁用配额,但与它们相关的计算将继续,因此需要重新安装才能完全禁用它们)。
    • 在 EXT4 中,已经完成了一些工作来提高写入 delalloc 缓冲区和处理由于保持打开状态但不与目录关联而继续存在的孤立文件的性能。 丢弃操作的处理已移出 jbd2 kthread 线程,以避免阻塞元数据操作。
    • F2FS 添加了“discard_unit=block|segment|section”选项,将丢弃操作(标记可能不再物理存储的已释放块)绑定到相对于块、扇区、段或节的对齐。 添加了对跟踪 I/O 延迟变化的支持。
    • EROFS(可扩展只读文件系统)文件系统为未压缩保存的文件添加了直接 I/O 支持,以及 fiemap 支持。
    • OverlayFS 实现了对“immutable”、“append-only”、“sync”和“noatime”挂载标志的正确处理。
    • NFS 改进了对 NFS 服务器停止响应请求的情况的处理。 添加了从已在使用但可通过不同网络地址访问的服务器挂载的功能。
    • 重写 FSCACHE 子系统的准备工作已经开始。
    • 添加了对具有非标准 GPT 表放置的 EFI 分区的支持。
    • fanotify 机制实现了一个新标志 FAN_REPORT_PIDFD,这使得 pidfd 包含在返回的元数据中。 Pidfd 有助于处理 PID 重用情况,以更准确地识别访问受监控文件的进程(pidfd 与特定进程关联并且不会更改,而 PID 可以在与 PID 关联的当前进程终止后与另一个进程关联)。
    • 在 move_mount() 系统调用中添加了将挂载点添加到现有共享组的功能,这解决了当隔离容器中共享多个挂载空间时在 CRIU 中保存和恢复进程状态的问题。
    • 添加了针对隐藏竞态条件的保护,这些竞态条件在处理文件中的空位时执行缓存读取时可能会导致文件损坏。
    • 对强制(强制)文件锁定的支持(通过阻止导致文件更改的系统调用实现)已停止。 由于可能的竞争条件,这些锁被认为是不可靠的,并且在很多年前就已被弃用。
    • LightNVM 子系统已被删除,该子系统允许绕过模拟层直接访问 SSD 驱动器。 在提供分区(ZNS,分区命名空间)的 NVMe 标准出现后,LightNVM 就失去了意义。
  • 内存和系统服务
    • DAMON(数据访问监控)子系统已实现,允许您监控与访问 RAM 中的数据(与在用户空间中运行的选定进程相关)相关的活动。 该子系统允许您分析进程在整个操作过程中访问了哪些内存区域,以及哪些内存区域仍未被声明。 DAMON 具有低 CPU 负载、低内存消耗、高精度和可预测的恒定开销,与大小无关。 该子系统既可以被内核用来优化内存管理,也可以被用户空间中的实用程序用来了解进程到底在做什么并优化内存使用,例如,为系统释放多余的内存。
    • process_mrelease 系统调用已实现,以加快释放完成执行的进程的内存的过程。 正常情况下,资源释放和进程终止不是瞬时的,可能会因为各种原因而延迟,干扰用户空间内存早期响应系统,如 oomd(由 systemd 提供)和 lmkd(Android 使用)。 通过调用 process_mrelease,此类系统可以更可预测地触发从强制进程中回收内存。
    • 从开发对实时操作的支持的 PREEMPT_RT 内核分支,已经转移了基于 RT-Mutex 子系统的用于组织锁互斥体、ww_mutex、rw_semaphore、spinlock 和 rwlock 的原语变体。 对 SLUB 板分配器进行了更改,以改进 PREEMPT_RT 模式下的操作并减少对中断的影响。
    • cgroup 中添加了对 SCHED_IDLE 任务调度程序属性的支持,允许您向特定 cgroup 中包含的组的所有进程提供此属性。 那些。 这些进程仅当系统上没有其他任务等待执行时才会运行。 与单独为每个进程设置 SCHED_IDLE 属性不同,将 SCHED_IDLE 绑定到 cgroup 时,在选择要执行的任务时会考虑组内任务的相对权重。
    • cgroup 中计算内存消耗的机制已得到扩展,能够跟踪其他内核数据结构,包括为轮询、信号处理和命名空间创建的数据结构。
    • 添加了对任务绑定到架构上处理器内核的非对称调度的支持,其中某些 CPU 允许执行 32 位任务,而某些 CPU 仅在 64 位模式下运行(例如 ARM)。 新模式允许您在调度 32 位任务时仅考虑支持 32 位任务的 CPU。
    • io_uring 异步 I/O 接口现在支持直接在固定文件索引表中打开文件,无需使用文件描述符,这使得可以显着加快某些类型的操作速度,但与使用文件描述符的传统 Unix 流程背道而驰打开文件。

      BIO(块I/O层)子系统的io_uring实现了一种新的回收机制(“BIO回收”),减少了管理内存过程中的开销,并将每秒处理的I/O操作数增加了大约10% 。 io_uring 还添加了对 mkdirat()、symlinkat() 和 linkat() 系统调用的支持。

    • 对于BPF程序,已经实现了请求和处理定时器事件的能力。 添加了 UNIX 套接字的迭代器,并实现了获取和设置 setsockopt 套接字选项的功能。 BTF 转储程序现在支持类型化数据。
    • 在具有性能不同的不同类型内存的 NUMA 系统上,当可用空间耗尽时,被逐出的内存页面将从动态内存 (DRAM) 转移到速度较慢的永久内存 (持久内存),而不是删除这些页面。 测试表明,此类策略通常可以提高此类系统的性能。 NUMA 还提供从一组选定的 NUMA 节点为进程分配内存页面的能力。
    • 对于ARC架构,已经实现了对三级和四级内存页表的支持,这将进一步支持64位ARC处理器。
    • 对于 s390 架构,已经实现了在使用内存时使用 KFENCE 机制检测错误的功能,并添加了对 KCSAN 竞争条件检测器的支持。
    • 添加了对通过 printk() 索引输出消息列表的支持,允许您一次检索所有此类消息并跟踪用户空间中的更改。
    • mmap() 删除了对 VM_DENYWRITE 选项的支持,并且内核代码已不再使用 MAP_DENYWRITE 模式,这减少了导致因 ETXTBSY 错误而阻止写入文件的情况的数量。
    • 跟踪子系统中添加了一种新类型的检查“事件探针”,它可以附加到现有的跟踪事件,定义您自己的输出格式。
    • 使用 Clang 编译器构建内核时,现在使用 LLVM 项目的默认汇编器。
    • 作为消除内核中导致编译器输出警告的代码项目的一部分,在默认启用的“-Werror”模式下进行了一项实验,其中编译器警告被视为错误处理。 在准备 5.15 版本的过程中,Linus 开始只接受在构建内核时不会导致警告的更改,并启用使用“-Werror”进行构建,但随后同意这样的决定为时过早,并延迟默认启用“-Werror” 。 汇编期间包含“-Werror”标志是使用 WERROR 参数控制的,该参数默认设置为 COMPILE_TEST,即目前它仅适用于测试版本。
  • 虚拟化和安全
    • Device Mapper (DM) 中添加了新的 dm-ima 处理程序,实现了基于 IMA(完整性测量架构)子系统的远程认证机制,允许外部服务验证内核子系统的状态以确保其真实性。 实际上,dm-ima 允许您使用链接到外部云系统的设备映射器创建存储,其中使用 IMA 检查启动的 DM 目标配置的有效性。
    • prctl() 实现了一个新选项 PR_SPEC_L1D_FLUSH,启用该选项后,会导致内核在每次发生上下文切换时刷新第一级 (L1D) 缓存的内容。 此模式允许有选择地针对最重要的进程实施额外的保护,以防止使用旁路攻击来确定因 CPU 中指令的推测执行而导致的漏洞而已在缓存中沉淀的数据。 启用 PR_SPEC_L1D_FLUSH(默认情况下未启用)的成本是显着的性能损失。
    • 可以通过向 GCC 添加“-fzero-call-used-regs=used-gpr”标志来构建内核,这确保在从函数返回控制之前所有寄存器都重置为零。 此选项允许您防止函数中的信息泄漏,并将适合在漏洞利用中构建 ROP(面向返回编程)小工具的块数量减少 20%。
    • 以 Hyper-V 管理程序客户端的形式为 ARM64 架构构建内核的能力已经实现。
    • 提出了一种新的驱动程序开发框架“VDUSE”,它允许在用户空间中实现虚拟块设备,并使用 Virtio 作为来宾系统访问的传输。
    • 添加了 I2C 总线的 Virtio 驱动程序,使得可以使用单独的后端在半虚拟化模式下模拟 I2C 控制器。
    • 添加了 Virtio 驱动程序 gpio-virtio 以允许来宾访问主机系统提供的 GPIO 线。
    • 添加了在没有 I/O MMU(内存管理单元)的系统上限制具有 DMA 支持的设备驱动程序访问内存页面的功能。
    • KVM 管理程序能够以线性和对数直方图的形式显示统计数据。
  • 网络子系统
    • ksmbd 模块已添加到内核中,并使用 SMB3 协议实现文件服务器。 该模块补充了之前在内核中提供的 SMB 客户端实现,并且与在用户空间中运行的 SMB 服务器不同,该模块在性能、内存消耗以及与高级内核功能的集成方面更加高效。 Ksmbd 被誉为高性能、嵌入式就绪的 Samba 扩展,可根据需要与 Samba 工具和库集成。 ksmbd 的功能包括改进对本地系统上的分布式文件缓存技术(SMB 租用)的支持,这可以显着减少流量。 未来,他们计划增加对 RDMA(“smbdirect”)和与使用数字签名提高加密和验证可靠性相关的协议扩展的支持。
    • CIFS 客户端不再支持 NTLM 和 SMB1 协议中使用的基于 DES 的较弱身份验证算法。
    • 组播支持是在vlan 的网桥实现中实现的。
    • 用于聚合网络接口的绑定驱动程序添加了对 XDP(eXpress Data Path)子系统的支持,该子系统允许您在 Linux 内核网络堆栈处理网络数据包之前对其进行操作。
    • mac80211 无线堆栈支持 LPI、SP 和 VLP 模式下的 6GHZ STA(特殊临时授权),以及在接入点模式下设置单独 TWT(目标唤醒时间)的能力。
    • 添加了对 MCTP(管理组件传输协议)的支持,用于管理控制器和关联设备(主机处理器、外围设备等)之间的交互。
    • 集成到 MPTCP(多路径 TCP)的核心中,MPTCP 是 TCP 协议的扩展,用于组织 TCP 连接的操作,通过与不同 IP 地址关联的不同网络接口沿多条路由同时传送数据包。 新版本增加了对全网状模式地址的支持。
    • netfilter 中添加了封装在 SRv6(分段路由 IPv6)协议中的网络流处理程序。
    • 添加了对 Unix 流套接字的 sockmap 支持。
  • Оборудование
    • amdgpu 驱动程序支持 Cyan Skillfish APU(配备 Navi 1x GPU)。 Yellow Carp APU 现在支持视频编解码器。 改进了 Aldebaran GPU 支持。 添加了基于 GPU Navi 24“Beige Goby”和 RDNA2 的新地图标识符。 提出了虚拟屏幕(VKMS)的改进实现。 已实现对 AMD Zen 3 芯片温度监控的支持。
    • amdkfd 驱动程序(针对离散 GPU,例如 Polaris)实现了基于 HMM(异构内存管理)子系统的共享虚拟内存管理器(SVM,共享虚拟内存),该子系统允许使用具有自己的内存管理单元(MMU)的设备,内存管理单元),可以访问主存。 特别是,使用HMM,可以在GPU和CPU之间组织一个共享地址空间,其中GPU可以访问进程的主存。
    • Intel 显卡的 i915 驱动程序扩展了 TTM 视频内存管理器的使用,并包括基于 GuC(图形微控制器)管理功耗的功能。 已开始准备实施对 Intel ARC Alchemist 显卡和 Intel Xe-HP GPU 的支持。
    • nouveau 驱动程序使用 DPCD(显示端口配置数据)实现 eDP 面板的背光控制。
    • 向 msm 驱动程序添加了对 Adreno 7c Gen 3 和 Adreno 680 GPU 的支持。
    • IOMMU 驱动程序是为 Apple M1 芯片实现的。
    • 为基于 AMD Van Gogh APU 的系统添加了声音驱动程序。
    • Realtek R8188EU 驱动程序已添加到 staging 分支,取代了 Realtek RTL8188EU 8188 b/g/n 无线芯片的旧版本驱动程序 (rtl802.11eu)。
    • Meta (Facebook) 开发的 PCIe 板包含 ocp_pt 驱动程序,该板实现了微型原子钟和 GNSS 接收器,可用于组织单独的精确时间同步服务器的操作。
    • 添加了对索尼 Xperia 10II (Snapdragon 665)、小米红米 2 (Snapdragon MSM8916)、三星 Galaxy S3 (Snapdragon MSM8226)、三星 Gavini/Codina/Kyle 智能手机的支持。
    • 添加了对 ARM SoС 和 NVIDIA Jetson TX2 NX 开发套件、Sancloud BBE Lite、PicoITX、DRC02、SolidRun SolidSense、SKOV i.MX6、Nitrogen8、Traverse Ten64、GW7902、Microchip SAMA7、ualcomm Snapdragon SDM636/SM8150、Renesas R-Car H3e 的支持主板-2G/M3e-2G、Marvell CN913x、ASpeed AST2600(Facebook Cloudripper、Elbert 和 Fuji 服务器主板)、4KOpen STiH418-b2264。
    • 添加了对 Gopher 2b LCD 面板、EDT ETM0350G0DH6/ETMV570G2DHU、LOGIC Technologies LTTD800480070-L6WH-RT、Multi-Innotechnology MI1010AIT-1CP1、Innolux EJ030NA 3.0、ilitek ili9341、E Ink VB3300-KCA、Samsung ATNA33XC20 7430、的支持三星 DB2401、WideChips WSXNUMX 。
    • 添加了 LiteETH 驱动程序,支持 LiteX 软件 SoC(针对 FPGA)中使用的以太网控制器。
    • usb-audio 驱动程序中添加了低延迟选项,以控制在最小延迟模式下的操作。 还添加了 quirk_flags 选项来传递特定于设备的设置。

与此同时,拉丁美洲自由软件基金会形成了完全自由内核5.15的版本——Linux-libre 5.15-gnu,清除了包含非自由组件或代码部分的固件和驱动程序的元素,其范围受到限制由制造商。 新版本实现了向日志输出有关清理完成的消息。 使用 mkspec 生成包的问题已得到修复,对 snap 包的支持已得到改进。 删除了处理firmware.h头文件时显示的一些警告。 在“-Werror”模式下构建时允许输出某些类型的警告(“format-extra-args”、注释、未使用的函数和变量)。 添加了gehc-achc驱动程序清理。 更新了驱动程序和子系统 adreno、btusb、btintel、brcmfmac、aarch64 qcom 中的 blob 清理代码。 驱动程序 prism54(已删除)和 rtl8188eu(由 r8188eu 取代)的清理已停止。

来源: opennet.ru

添加评论