Linux 5.8 内核版本

经过两个月的开发 Linus Torvalds 提交 内核版本 Linux 5.8。 最显着的变化包括:KCSAN 竞争条件检测器、向用户空间发送通知的通用机制、内联加密的硬件支持、ARM64 的增强安全机制、对俄罗斯 Baikal-T1 处理器的支持、单独挂载 procfs 实例的能力,ARM64调用堆栈和BTI的Shadow安全机制的实现。

就整个项目存在期间所有内核的更改数量而言,内核 5.8 成为最大的。 而且,这些变化与任何一个子系统无关,而是涵盖了内核的不同部分,并且主要与内部返工和清理相关。 最大的变化体现在驾驶员身上。 新版本包含来自 17606 名开发人员的 2081 个修复,影响了内核代码存储库中大约 20% 的文件。 补丁大小为 65 MB(更改影响了 16180 个文件,添加了 1043240 行代码,删除了 489854 行)。 相比之下,5.7 分支有 15033 个修复,补丁大小为 39 MB。 37 中引入的所有更改中大约 5.8% 与设备驱动程序相关,大约 16% 的更改与更新特定于硬件架构的代码相关,11% 与网络堆栈相关,3% 与文件系统相关,4% 与文件系统相关。与内部内核子系统相关。

创新:

  • 虚拟化和安全
    • 提供了内核模块的加载,这些模块的代码部分中同时设置了允许执行和写入的位。 这一更改是作为一个更大项目的一部分实现的,目的是使内核不再使用允许同时执行和写入的内存页。
    • 现在可以创建单独的 procfs 实例,允许使用多个 procfs 挂载点,使用不同的选项挂载,但反映相同的进程标识符命名空间(pid 命名空间)。 以前,所有 procfs 挂载点仅镜像一种内部表示形式,对挂载参数的任何更改都会影响与同一进程 ID 命名空间关联的所有其他挂载点。 可能需要安装不同选项的领域之一是为嵌入式系统实现轻量级隔离,能够隐藏 procfs 中某些类型的进程和信息节点。
    • ARM64 平台已实现对该机制的支持
      影子调用堆栈,由 Clang 编译器提供,用于防止在堆栈缓冲区溢出时覆盖函数的返回地址。 保护的本质是在将控制权转移给函数之后将返回地址保存在单独的“影子”堆栈中,并在退出函数之前检索该地址。

    • 添加了对 ARM64 平台的指令支持 ARMv8.5-BTI (分支目标指示器)以保护不应分支的指令集的执行。 阻止转换到任意代码部分是为了防止在使用面向返回的编程技术(ROP - 返回导向的编程)的漏洞利用中创建小工具;攻击者不会尝试将其代码放入内存中,而是对已经存在的代码进行操作以返回控制指令结尾的机器指令,从中构建调用链以获得所需的功能)。
    • 添加了对块设备内联加密的硬件支持(内联加密)。 Inlinep 加密设备通常内置于驱动器中,但逻辑上位于系统内存和磁盘之间,根据内核指定的密钥和加密算法透明地加密和解密 I/O。
    • 添加了“initrdmem”内核命令行选项,允许您在将初始启动映像放入 RAM 时指定 initrd 的物理内存地址。
    • 添加了新功能:CAP_PERFMON,用于访问 perf 子系统并执行性能监控。 CAP_BPF,它允许以前需要 CAP_SYS_ADMIN 权限的某些 BPF 操作(例如加载 BPF 程序)(CAP_SYS_ADMIN 权限现在分为 CAP_BPF、CAP_PERFMON 和 CAP_NET_ADMIN 的组合)。
    • 添加者 一个新的 virtio-mem 设备,允许您将内存热插拔到客户系统中。
    • 如果设备驱动程序使用重叠内存区域,则实现了对 /dev/mem 中映射操作的调用。
    • 增加漏洞防护 CROSSTalk/SRBDS,它允许您恢复在另一个 CPU 内核上执行的某些指令的结果。
  • 内存和系统服务
    • 在定义代码格式化规则的文档中, 公认 关于使用包容性术语的建议。 不建议开发者使用“主/从”和“黑名单/白名单”的组合,以及单独使用“从”一词。 这些建议仅涉及这些术语的新用途。 核心中已存在的指定单词的提及将保持不变。 在新代码中,如果需要支持用户空间中公开的 API 和 ABI,以及更新代码以支持其规范需要使用某些术语的现有硬件或协议,则允许使用标记的术语。
    • 包含调试工具 KCSAN (Kernel Concurrency Sanitizer),专为动态检测而设计 竞争条件 核心内部。 在 GCC 和 Clang 中构建时支持使用 KCSAN,并且需要在编译时进行特殊修改以跟踪内存访问(使用读取或修改内存时触发的断点)。 KCSAN 的开发重点是误报预防、可扩展性和易用性。
    • 额外 通用机制 将通知从内核传递到用户空间。 该机制基于标准管道驱动程序,允许您通过用户空间中打开的通道有效地分发来自内核的通知。 通知接收点是以特殊模式打开的管道,允许从内核接收的消息累积在环形缓冲区中。 读取是通过通常的 read() 函数执行的。 通道所有者确定需要监视内核中的哪些源,并可以定义过滤器来忽略某些类型的消息和事件。 在这些事件中,当前仅支持对键的操作,例如添加/删除键以及更改其属性。 这些事件计划在 GNOME 中使用。
    • 继续开发“pidfd”功能,以帮助处理 PID 重用情况(pidfd 与特定进程关联并且不会更改,而在与 PID 关联的当前进程终止后,PID 可以与另一个进程关联)。 新版本添加了对使用 pidfd 将进程附加到命名空间的支持(允许在执行 setns 系统调用时指定 pidfd)。 使用pidfd可以通过一次调用控制进程对多种类型命名空间的附加,显着减少必要的系统调用次数并以原子模式实现附加(如果附加到其中一个命名空间失败,其他命名空间将无法连接) 。
    • 添加了新的系统调用 faccessat2(),与
      faccessat() 带有符合 POSIX 建议的标志的附加参数(以前这些标志是在 C 库中模拟的,新的 faccessat2 允许它们在内核中实现)。

    • 在C组中 添加 memory.swap.high 设置可用于减慢占用过多交换空间的任务。
    • 至异步 I/O 接口 io_uring 添加了对 tee() 系统调用的支持。
    • 新增机制》BPF迭代器,旨在将内核结构的内容输出到用户空间。
    • 由...提供 使用环形缓冲区在 BPF 程序之间进行数据交换的能力。
    • 走进机制 帕达塔,旨在组织内核中任务的并行执行,增加了对具有负载平衡的多线程任务的支持。
    • 在 pstore 机制中,它允许您将有关崩溃原因的调试信息保存在内存区域中,这些信息在重新引导之间不会丢失, 添加 用于将信息保存到块设备的后端。
    • 来自 PREEMPT_RT 内核分支 搬家了 本地锁的实现。
    • 额外 新的缓冲区分配 API (AF_XDP),旨在通过 XDP(eXpress 数据路径)支持简化网络驱动程序的编写。
    • 对于RISC-V架构,已经实现了使用KGDB调试内核组件的支持。
    • 在 4.8 版本之前,对可用于构建内核的 GCC 版本的要求已经提高。 在下一个版本中,计划将标准提高到 GCC 4.9。
  • 磁盘子系统、I/O 和文件系统
    • 在设备映射器中 添加 新的 dm-ebs(模拟块大小)处理程序,可用于模拟较小的逻辑块大小(例如,模拟 512K 扇区大小磁盘上的 4 字节扇区)。
    • F2FS 文件系统现在支持使用 LZO-RLE 算法进行压缩。
    • 在 dm-crypt 中 添加 支持加密密钥。
    • Btrfs 改进了直接 I/O 模式下读取操作的处理。 安装时 加速 检查已删除的子节和没有父级的目录。
    • CIFS中添加了“nodelete”参数,允许在服务器上进行正常的权限检查,但禁止客户端删除文件或目录。
    • Ext4 改进了错误处理 欧洲石油公司 当使用多线程时。 xattr 添加了对 GNU Hurd 中使用的 gnu.* 命名空间的支持。
    • 对于 Ext4 和 XFS,启用了与单个文件和目录相关的 DAX 操作支持(绕过页面缓存直接访问文件系统,而不使用块设备级别)。
    • 在系统调用中 统计数据() 添加了标志 STATX_ATTR_DAX,指定时使用 DAX 引擎检索信息。
    • 外加法 添加 支持引导区验证。
    • 在FAT中 改进的 主动加载 FS 元素。 测试慢速 2TB USB 驱动器表明测试完成时间从 383 秒减少到 51 秒。
  • 网络子系统
    • 在控制网桥操作的代码中 添加 协议支持 MRP (媒体冗余协议),它允许通过循环多个以太网交换机来实现容错。
    • 至交通控制系统 (Tc) 添加 新的“门”操作,可以定义处理和丢弃某些数据包的时间间隔。
    • 内核和 ethtool 实用程序中添加了对测试连接的网络电缆和网络设备自诊断的支持。
    • IPv6 堆栈中添加了对 MPLS(多协议标签交换)算法的支持,以便使用多协议标签交换路由数据包(IPv4 之前支持 MPLS)。
    • 添加了对通过 TCP 传输 IKE(互联网密钥交换)和 IPSec 数据包的支持(RFC 8229) 绕过可能的 UDP 阻塞。
    • 添加者 网络块设备 rnbd,它允许您使用 RDMA 传输(InfiniBand、RoCE、iWARP)和 RTRS 协议组织对块设备的远程访问。
    • 在 TCP 堆栈中 添加 支持选择性确认 (SACK) 响应中的范围压缩。
    • 对于 IPv6 实施的 TCP-LD 支持(RFC 6069,长时间连接中断)。
  • Оборудование
    • Intel 显卡的 i915 DRM 驱动程序默认支持 Intel Tiger Lake (GEN12) 芯片,为此 实施的 能够使用 SAGV(系统代理 Geyserville)系统根据功耗或性能要求动态调整频率和电压。
    • amdgpu 驱动程序增加了对 FP16 像素格式的支持以及使用视频内存(TMZ,可信内存区域)中加密缓冲区的功能。
    • 添加了对 AMD Zen 和 Zen2 处理器的功率传感器以及 AMD Ryzen 4000 Renoir 的温度传感器的支持。 AMD Zen 和 Zen2 支持通过接口检索功耗信息 RAPL (运行平均功率限制)。
    • 向 Nouveau 驱动程序添加了对 NVIDIA 修改器格式的支持。 对于 gv100,已经实现了使用隔行扫描模式的功能。 添加了 vGPU 定义。
    • MSM (Qualcomm) 驱动程序添加了对 Adreno A405、A640 和 A650 GPU 的支持。
    • 额外 用于管理 DRM(直接渲染管理器)资源的内部框架。
    • 添加了对小米红米 Note 7 和三星 Galaxy S2 智能手机以及 Elm/Hana Chromebook 笔记本电脑的支持。
    • 新增液晶面板驱动:华硕TM5P5 NT35596、星空KR070PE2T、丽台LTK050H3146W、维信诺rm69299、京东方tv105wum-nw0。
    • 添加了对 ARM 板和平台 Renesas“RZ/G1H”、Realtek RTD1195、Realtek RTD1395/RTD1619、Rockchips RK3326、AMLogic S905D、S905X3、S922XH、Olimex A20-OLinuXino-LIME-eMMC、Check Point L-50、
      、Beacon i.MX8m-Mini、高通 SDM660/SDM630、Xnano X5 电视盒、Stinger96、Beaglebone-AI。

    • 新增对MIPS处理器Loongson-2K(简称Loongson64)的支持。 CPU龙芯3增加了对KVM hypervisor虚拟化的支持。
    • 添加者
      支持俄罗斯Baikal-T1处理器和基于该处理器的片上系统 BE-T1000。 Baikal-T1 处理器包含两个运行频率为 5600 GHz 的 P32 MIPS 5 r1.2 超标量内核。 该芯片包含 L2 缓存 (1 MB)、DDR3-1600 ECC 内存控制器、1 个 10Gb 以太网端口、2 个 1Gb 以太网端口、PCIe Gen.3 x4 控制器、2 个 SATA 3.0 端口、USB 2.0、GPIO、UART、SPI、I2C。 该处理器为虚拟化、SIMD 指令和支持 GOST 28147-89 的集成硬件加密加速器提供硬件支持。 该芯片采用 Imagination Technologies 授权的 MIPS32 P5600 Warrior 处理器核心单元开发。

与此同时,拉丁美洲自由软件基金会 形成
选项 完全免费的内核5.8 - linux-libre 5.8-gnu,清除包含非自由组件或代码部分的固件和驱动程序元素,其范围由制造商限制。 新版本禁用了 Atom ISP Video、MediaTek 7663 USB/7915 PCIe、Realtek 8723DE WiFi、Renesas PCI xHCI、HabanaLabs Gaudi、增强型异步采样率转换器、Maxim Integrated MAX98390 扬声器放大器、Microsemi ZL38060 连接家庭音频处理器、和 I2C EEPROM 从机。 更新了 Adreno GPU、HabanaLabs Goya、x86 触摸屏、vt6656 和 btbcm 驱动程序和子系统中的斑点清理代码。

来源: opennet.ru

添加评论