Linux 5.9 内核版本

经过两个月的开发 Linus Torvalds 提交 内核版本 Linux 5.9。 最显着的变化包括:限制从专有模块到 GPL 模块的符号导入、使用 FSGSBASE 处理器指令加速上下文切换操作、支持使用 Zstd 进行内核映像压缩、重新设计内核中线程的优先级、支持 PRP (并行冗余协议)、截止时间调度程序中的带宽感知调度、抢占式内存页面打包、功能标志 CAP_CHECKPOINT_RESTOR、close_range() 系统调用、dm-crypt 性能改进、32 位 Xen PV 来宾的代码删除、新的平板内存管理机制,Btrfs 中的“救援”选项,支持 ext4 和 F2FS 中的内联加密。

新版本包含 16074 年开发人员的 2011 个修复,
补丁大小 - 62 MB(更改影响了 14548 个文件,添加了 782155 行代码,删除了 314792 行)。 大约 45% 在 5.9 中呈现
更改与设备驱动程序相关,大约 15% 的更改与
对更新特定于硬件架构的代码的态度,13%
与网络堆栈相关,3% 与文件系统相关,3% 与内部相关
内核子系统。

创新:

  • 内存和系统服务
    • 收紧 防止使用 GPL 层将专有驱动程序与仅针对 GPL 许可证下的模块导出的内核组件相链接。 现在,从具有此标志的模块导入符号的所有模块都会继承 TAINT_PROPRIETARY_MODULE 标志。 如果 GPL 模块尝试从非 GPL 模块导入符号,则该 GPL 模块将继承 TAINT_PROPRIETARY_MODULE 标签,并且将无法访问仅适用于 GPL 许可模块的内核组件,即使该模块之前已从以下位置导入了符号: “gplonly”类别。 未实现反向锁定(在导入 EXPORT_SYMBOL_GPL 的模块中仅导出 EXPORT_SYMBOL_GPL),这可能会破坏专有驱动程序的工作(仅继承专有模块标志,但不继承 GPL 绑定)。
    • 添加者 kcompactd 引擎支持 预打包内存页 在后台增加内核可用的大内存页面的数量。 据初步估算,后台打包以最小的开销为代价,与之前使用的打包机制相比,可以将分配大内存页(huge-page)时的延迟减少70-80倍,按需启动(on-demand) )。 为了设置 kcompactd 将提供的外部碎片的边界,添加了 sysctl vm.compaction_proactiveness。
    • 添加者 支持使用算法进行内核图像压缩 Z标准 (zstd)。
    • 已为 x86 系统实现了对处理器指令的支持 FSGS数据库,它允许您从用户空间读取和更改 FS/GS 寄存器的内容。 在内核中,FSGSBASE 用于通过消除不必要的 GSBASE MSR 写入操作来加速上下文切换操作,而在用户空间中,它避免了不必要的系统调用来更改 FS/GS。
    • 额外 “allow_writes”参数允许您禁止从用户空间更改处理器的 MSR 寄存器,并限制对这些寄存器内容的访问以进行读取操作,因为更改 MSR 可能会导致问题。 默认情况下,写入尚未禁用,对 MSR 的更改会反映在日志中,但将来计划将默认访问权限切换为只读模式。
    • 至异步 I/O 接口 io_uring 添加了对不需要内核线程的异步缓冲读取操作的完全支持。 预计未来版本将支持录制。
    • 在 I/O 调度程序截止日期内 已实施 根据容量进行规划, 允许 对非对称系统(例如基于 ARM 的系统)做出正确决策 DynamIQ big.LITTLE,将功能强大且能效较低的 CPU 内核集成在一个芯片中。 特别是,当慢速 CPU 核心没有适当的资源来按时完成任务时,新模式可以让您避免调度不匹配。
    • 内核中的能耗模型(Energy Model框架)现在是 描述了 不仅是CPU的功耗行为,还涵盖了外围设备。
    • close_range() 系统调用已实现,以允许进程一次关闭整个范围的打开文件描述符。
    • 从文本控制台和fbcon驱动程序的实现 代码已删除,它提供了以编程方式向后滚动文本 (CONFIG_VGACON_SOFT_SCROLLBACK) 超过 VGA 文本模式视频内存量的能力。
    • 重新设计 为内核中的线程分配优先级的算法。 在为实时任务分配优先级时,新选项可以在所有内核子系统之间提供更好的一致性。
    • 添加了系统控制 sched_uclamp_util_min_rt_default 控制实时任务的 CPU 升压设置(例如,您可以在切换到电池电源后或在移动系统上动态更改实时任务的行为以节省电量)。
    • 已做好在页面缓存中实现对透明大页面技术的支持的准备。
    • fanotify 引擎实现了新标志 FAN_REPORT_NAME 和 FAN_REPORT_DIR_FID,以在目录项和非目录对象发生创建、删除或移动事件时报告父名称和唯一 FID 信息。
    • 对于 cgroup 已实施 新的slab内存控制器,其值得注意的是将slab记账从内存页面级别移动到内核对象级别,这使得在不同的cgroup中共享slab页面成为可能,而不是为每个cgroup分配单独的slab缓存。 所提出的方法可以提高slab的使用效率,将slab使用的内存大小减少30-45%,显着降低内核的整体内存消耗并减少内存碎片。
    • 在声音子系统中 阿尔萨 и USB堆栈, 依据 最近采用的 关于在 Linux 内核中使用包容性术语的建议;政治上不正确的术语已被清除。 代码中已经清除了“从”、“主”、“黑名单”和“白名单”等字样。
  • 虚拟化和安全
    • 使用 Clang 编译器构建内核时 出现 能够将堆栈上存储的所有变量配置(CONFIG_INIT_STACK_ALL_ZERO)自动初始化为零(构建时指定“-ftrivial-auto-var-init=zero”)。
    • 在seccomp子系统中,当在用户空间使用进程控制模式时, 添加 机会 将文件描述符替换到受监视的进程中,以完全模拟导致创建文件描述符的系统调用。 Chrome 的隔离容器系统和沙箱实现需要该功能。
    • 对于 xtensa 和 csky 架构,添加了对使用 seccomp 子系统限制系统调用的支持。 对于xtensa,还额外实现了对审计机制的支持。
    • 额外 新的功能标志 CAP_CHECKPOINT_RESTORE,允许您提供对与冻结和恢复进程状态相关的功能的访问,而无需转移额外的权限。
    • GCC 11 提供了您需要的所有功能
      调试工具 KCSAN(Kernel Concurrency Sanitizer),旨在动态检测内核内的竞争条件。 因此,KCSAN 现在可以与 GCC 中内置的内核一起使用。

    • 适用于 AMD Zen 和更新的 CPU 型号 添加 支持P2PDMA技术,允许您使用DMA在连接到PCI总线的两个设备的内存之间进行直接数据传输。
    • dm-crypt 添加了一种模式,允许您通过执行加密数据处理而不使用工作队列来减少延迟。 此模式对于正确操作也是必要的 分区的 块设备(具有必须按顺序写入的区域的设备,更新整个块组)。 dm-crypt 中已经完成了提高吞吐量和减少延迟的工作。
    • 删除了代码以支持在运行 Xen 虚拟机管理程序的半虚拟化模式下运行的 32 位客户机。 此类系统的用户应切换到在来宾环境中使用 64 位内核,或使用完整 (HVM) 或组合 (PVH) 虚拟化模式而不是半虚拟化 (PV) 来运行环境。
  • 磁盘子系统、I/O 和文件系统
    • 在 Btrfs 文件系统上 实施的 “救援”安装选项,统一对所有其他恢复选项的访问。 对“alloc_start”和“subvolrootid”选项的支持已被删除,并且“inode_cache”选项已被弃用。 进行了性能优化,特别是显着加快了 fsync() 操作的执行速度。 添加者 能够使用 CRC32c 以外的替代类型的校验和。
    • 添加者 能够在 ext4 和 F2FS 文件系统中使用内联加密(Inline Encryption),为此提供了“inlinecrypt”挂载选项。 内联加密模式允许您使用驱动器控制器内置的加密机制,透明地加密和解密输入/输出。
    • 在 XFS 中 安全的 inode 重置(刷新)以完全异步模式进行,在执行内存清理操作时不会阻塞进程。 解决了长期存在的配额问题,该问题导致软限制和索引节点限制警告被错误跟踪。 统一实现 DAX 对 ext4 和 xfs 的支持。
    • 在 Ext4 中 实施的 预加载块分配位图。 结合限制扫描未初始化的组,优化减少了安装非常大的分区所需的时间。
    • 在F2FS中 添加 ioctl F2FS_IOC_SEC_TRIM_FILE,它允许您使用 TRIM/discard 命令物理重置文件中的指定数据,例如,删除访问密钥而不在驱动器上留下残留数据。
      在F2FS中也 添加 新的垃圾收集模式 GC_URGENT_LOW,通过消除启动垃圾收集器之前是否处于空闲状态的一些检查来更积极地工作。

    • 在 bcache 中,范围的 Bucket_size 已从 16 位增加到 32 位,为启用分区设备缓存做好准备。
    • SCSI 子系统中添加了使用基于 UFS 控制器提供的内置硬件加密的内联加密的功能(通用闪存).
    • 添加了新的内核命令行参数“debugfs”,它允许您控制同名伪 FS 的可用性。
    • NFSv4.2 客户端提供对扩展文件属性 (xattr) 的支持。
    • 在 dm 粉尘中 添加 用于立即显示磁盘上所有已识别坏块列表的界面(“dmsetup messagedust1 0 listbadblocks”)。
    • 对于 md/raid5,添加了 /sys/block/md1/md/stripe_size 参数来配置 STRIPE 块大小。
    • 对于 NVMe 存储设备 添加 支持驱动器分区命令(ZNS、NVM Express 分区命名空间),允许您将存储空间划分为多个区域,这些区域组成块组,以便更全面地控制驱动器上数据的放置。
  • 网络子系统
    • 在网络过滤器中 添加 能够在路由检查之前的阶段拒绝数据包(REJECT 表达式现在不仅可以在 INPUT、FORWARD 和 OUTPUT 链中使用,而且还可以在 icmp 和 tcp 的 PREROUTING 阶段使用)。
    • 在 nftables 中 添加 审核与配置更改相关的事件的能力。
    • 在 nftables 的 netlink API 中 添加 支持匿名链,其名称由内核动态分配。 当您删除与匿名链关联的规则时,该链本身也会自动删除。
    • BPF 添加了对迭代器的支持,以遍历、过滤和修改关联数组(映射)的元素,而无需将数据复制到用户空间。 迭代器可用于 TCP 和 UDP 套接字,允许 BPF 程序迭代打开的套接字列表并从中提取所需的信息。
    • 添加了一种新类型的 BPF 程序 BPF_PROG_TYPE_SK_LOOKUP,当内核为传入连接搜索合适的侦听套接字时启动该程序。 使用这样的 BPF 程序,您可以创建处理程序来决定连接应与哪个套接字关联,而不受 bind() 系统调用的约束。 例如,您可以将单个套接字与一系列地址或端口相关联。 此外,bpf_setsockopt() 中添加了对 SO_KEEPALIVE 标志的支持,并且已实现安装 BPF_CGROUP_INET_SOCK_RELEASE 处理程序(在释放套接字时调用)的功能。
    • 已实施协议支持 PRP (并行冗余协议),允许在任何网络组件发生故障时基于以太网切换到对应用程序透明的备份通道。
    • 堆栈mac80211 添加 支持接入点模式下的四阶段 WPA/WPA2-PSK 通道协商。
    • 添加了将 qdisc(排队规则)调度程序切换为默认使用 FQ-PIE(流队列 PIE)网络队列管理算法的功能,旨在减少网络中中间数据包缓冲(缓冲区膨胀)对边缘网络设备的负面影响电缆调制解调器。
    • MPTCP(多路径 TCP)添加了新功能,它是 TCP 协议的扩展,用于组织 TCP 连接的操作,并通过与不同 IP 地址关联的不同网络接口沿多条路由同时传送数据包。 在setsockopt 中添加了对 syn cookie、DATA_FIN、缓冲区自动调整、套接字诊断以及 REUSEADDR、REUSEPORT 和 V6ONLY 标志的支持。
    • 对于虚拟路由表VRF(虚拟路由和转发),允许在一个系统上组织多个路由域的操作,已经实现了“严格”​​模式。 在这种模式下,虚拟表只能与其他虚拟表中未使用的路由表关联。
    • 无线驱动是ath11k 添加 支持6GHz频率和 光谱扫描.
  • Оборудование
    • 删除了支持 UniCore 架构的代码,该架构由北京大学微处理器中心开发,并于 2011 年包含在 Linux 内核中。 该架构自 2014 年以来一直无人维护,并且在 GCC 中不受支持。
    • 已实现对RISC-V架构的支持 冠状病毒 (用于分析内核代码覆盖率的 debugfs 接口)、kmemleak(内存泄漏检测系统)、堆栈保护、跳转标记和无滴答操作(独立于计时器信号的多任务)。
    • 对于PowerPC架构,已经实现了对自旋锁队列的支持,这显着提高了锁冲突情况下的性能。
    • 对于ARM和ARM64架构,默认启用处理器频率调节机制 调度工具 (cpufreq Governor),它直接利用任务调度程序的信息来做出改变频率的决定,并且可以立即访问cpufreq驱动程序来快速改变频率,即时调整CPU运行参数以适应当前负载。
    • 适用于 Intel 显卡的 i915 DRM 驱动程序包括对基于微架构的芯片的支持 火箭湖 并添加了对独立卡的初始支持 英特尔 Xe DG1.
    • Amdgpu 驱动程序添加了对 AMD GPU 的初始支持 Navi 21 (海军比目鱼)和 Navi 22 (西耶娜慈鲷)。 增加了对 Southern Island GPU (Radeon HD 7000) 的 UVD/VCE 视频编解码加速引擎的支持。
      添加了将显示旋转 90、180 或 270 度的属性。

      有趣的是,AMD GPU 的驱动程序 这是 内核中最大的驱动程序 - 它有大约 2.71 万行代码,大约占内核总大小(10 万行)的 27.81%。 同时,自动生成的包含 GPU 寄存器数据的头文件占了 1.79 万行,C 代码为 366 万行(作为比较,Intel i915 驱动程序包括 209 万行,Nouveau 为 149 万行)。

    • 在新司机 添加 支持使用逐帧完整性检查 CRC NVIDIA GPU 显示引擎中的(循环冗余检查)。 该实现基于 NVIDIA 提供的文档。
    • 新增液晶面板驱动:Frida FRD350H54004、KOE TX26D202VM0BWA、CDTech S070PWS19HP-FC21、CDTech S070SWV29HG-DC44、天马TM070JVHG33和兴邦达XBD599。
    • ALSA 音频子系统支持 英特尔静默流 (外部 HDMI 设备的连续供电模式可消除开始播放时的延迟)和 新设备 控制麦克风激活和静音按钮的照明,还增加了对新设备的支持,包括控制器 龙芯7A1000.
    • 添加了对 ARM 主板、设备和平台的支持:Pine64 PinePhone v1.2、Lenovo IdeaPad Duet 10.1、ASUS Google Nexus 7、Acer Iconia Tab A500、Qualcomm Snapdragon SDM630(用于 Sony Xperia 10、10 Plus、XA2、XA2 Plus 和 XA2) Ultra)、Jetson Xavier NX、Amlogic WeTek Core2、Aspeed EthanolX、五款基于 NXP i.MX6 的新主板、MikroTik RouterBoard 3011、小米 Libra、Microsoft Lumia 950、Sony Xperia Z5、MStar、Microchip Sparx5、Intel Keem Bay、Amazon Alpine v3,瑞萨 RZ/G2H。

与此同时,拉丁美洲自由软件基金会 形成
选项 完全免费的内核5.9 - linux-libre 5.9-gnu,清除包含非自由组件或代码部分的固件和驱动程序元素,其范围由制造商限制。 新版本禁用 WiFi rtw8821c 和 SoC MediaTek mt8183 驱动程序中的 blob 加载。 更新了 Habanalabs、Wilc1000、amdgpu、mt7615、i915 CSR、Mellanox mlxsw (Spectrum3)、r8169 (rtl8125b-2) 和 x86 触摸屏驱动程序和子系统中的斑点清理代码。

来源: opennet.ru

添加评论