Linux 5.7 内核版本

经过两个月的开发 Linus Torvalds 提交 内核版本 Linux 5.7。 最显着的变化包括:exFAT 文件系统的新实现、用于创建 UDP 隧道的 bareudp 模块、基于 ARM64 指针身份验证的保护、将 BPF 程序附加到 LSM 处理程序的能力、Curve25519 的新实现、一个分离式锁检测器、BPF 与 PREEMPT_RT 兼容、消除代码中 80 个字符行大小的限制、考虑任务调度程序中的 CPU 温度指示器、使用clone() 在另一个 cgroup 中生成进程的能力、防止写入使用 userfaultfd 到内存。

新版本接受了 15033 名开发者的 1961 个修复,
补丁大小 - 39 MB(更改影响了 11590 个文件,添加了 570560 行代码,
删除了 297401 行)。 大约 41% 出现在 5.7 中
更改与设备驱动程序相关,大约 16% 的更改与
对更新特定于硬件架构的代码的态度,13%
与网络堆栈相关,4% 与文件系统相关,4% 与内部相关
内核子系统。

创新:

  • 磁盘子系统、I/O 和文件系统
    • 添加了新的 exFAT 驱动程序实现, 成立 基于三星为其 Android 智能手机开发的当前“sdfat”(2.x) 代码库。 之前添加到内核中的驱动程序基于旧版三星代码(版本 1.2.9),性能落后新驱动程序约 10%。 让我们回想一下,在 Microsoft 之后,向内核添加 exFAT 支持成为可能 опубликовала 公开规范并使 exFAT 专利可以在 Linux 上免版税使用。
    • Btrfs 实现了一个新的 ioctl() 命令 - BTRFS_IOC_SNAP_DESTROY_V2,它允许您通过标识符删除子节。 提供对克隆内联范围的全面支持。 扩大了重新分配操作的取消点数量,减少了执行“余额取消”命令时的长时间等待。 反向链接的确定速度已加快(例如,测试脚本执行时间已从一个小时缩短到几分钟)。 添加了将文件范围附加到树的每个索引节点的功能。 写入子分区和排除 NOCOW 时使用的阻塞方案已被重新设计。 提高了范围的 fsync 执行效率。
    • XFS 改进了活动分区的元数据检查和 fsck。 已经提出了一个用于重建 btree 结构的库,该库将来将用于重新设计 xfs_repair 并实现无需卸载分区即可恢复的可能性。
    • CIFS 中添加了对在 SMB3 存储中放置交换分区的实验性支持。 实现了 readdir 的 POSIX 扩展(在 SMB3.1.1 规范中定义)。 改进了启用缓存=严格模式并使用协议版本 64+ 时 2.1KB 页面的写入性能。
    • FS EXT4 已从 bmap 和 iopoll 转移到使用 iomap。
    • F2FS 使用 zstd 算法提供对数据压缩的可选支持。 默认使用LZ4算法进行压缩。 添加了对“chattr -c commit”命令的支持。 提供安装时间显示。 添加了 ioctl F2FS_IOC_GET_COMPRESS_BLOCKS 以获取有关压缩块数量的信息。 添加了通过 statx 的压缩数据输出。
    • Ceph文件系统增加了在本地执行文件创建和删除操作(取消链接)的功能,无需等待服务器的响应(工作在异步模式下)。 例如,这一更改可以显着提高运行 rsync 实用程序时的性能。
    • OVERLAYFS 中添加了使用 virtiofs 作为顶级文件系统的功能。
    • 重写 VFS中的路径遍历代码、符号链接解析代码已重新设计,并且统一了挂载点遍历。
    • 在scsi子系统中给非特权用户 允许 执行ZBC命令。
    • 在 dm_writecache 中 实施的 根据 max_age 参数逐渐清除缓存的能力,该参数设置块的最大生命周期。
    • 在 dm_integrity 中 添加 支持“丢弃”操作。
    • 在 null_blk 中 添加 支持错误替换以模拟测试过程中的故障。
    • 添加者 能够发送有关块设备大小更改的 udev 通知。
  • 网络子系统
    • 包括网络过滤器 变化,显着加快大型匹配列表(nftables 集)的处理速度,这需要检查子网、网络端口、协议和 MAC 地址的组合。
      优化 介绍 进入nft_set_pipapo(PIle Packet POlicies)模块,该模块解决了将数据包内容与过滤规则中使用的任意字段状态范围(例如IP和网络端口范围)进行匹配的问题(nft_set_rbtree和nft_set_hash操纵区间匹配和值的直接反映)。 在配备 AMD Epyc 256 处理器的系统上使用 2 位 AVX7402 指令进行矢量化的 pipapo 版本在解析包括端口协议组合在内的 420 万条记录时显示出 30% 的性能提升。 在解析 1000 条记录时比较子网和端口号的组合时,IPv87 的增幅为 4%,IPv128 的增幅为 6%。

    • 额外 bareudp 模块,允许您将各种 L3 协议(例如 MPLS、IP 和 NSH)封装到 UDP 隧道中。
    • MPTCP(多路径 TCP)组件是 TCP 协议的扩展,用于组织 TCP 连接的操作,并通过绑定到不同 IP 地址的不同网络接口沿多条路由同时传送数据包,该组件的集成仍在继续。
    • 添加者 支持硬件加速机制,用于将以太网帧封装在 802.11 (Wi-Fi) 中。
    • 将设备从一个网络命名空间移动到另一个网络命名空间时,sysfs 中相应文件的访问权限和所有权会进行调整。
    • 添加了为非 root 用户使用 SO_BINDTODEVICE 标志的功能。
    • 补丁的第三部分已被接受,将 ethtool 工具包从 ioctl() 转换为使用 netlink 接口。 新的接口使得添加扩展变得更加容易,改进了错误处理,允许在状态更改时发送通知,简化了内核和用户空间之间的交互,并减少了需要同步的命名列表的数量。
    • 添加了使用特殊硬件加速器执行连接跟踪操作的功能。
    • 在网络过滤器中 添加 用于连接传出数据包分类器(出口)的钩子,它补充了先前存在的用于传入数据包(入口)的钩子。
  • 虚拟化和安全
    • 添加了指针验证的硬件实现(指针认证),它使用专门的 ARM64 CPU 指令来防止使用面向返回编程(ROP)技术的攻击,其中攻击者不会尝试将其代码放入内存中,而是对加载的库中已有的机器指令进行操作,结束带有控制返回指令。 安全性归结为使用数字签名在内核级别验证返回地址。 签名存储在指针本身未使用的最高位中。 与软件实现不同,数字签名的创建和验证是使用特殊的 CPU 指令进行的。
    • 添加者 使用 userfaultfd() 系统调用保护内存区域不被写入的能力,该系统调用旨在处理用户空间中的页面错误(访问未分配的内存页面)。 这个想法是使用 userfaultfd() 来检测对标记为写保护的页面的访问违规,并调用可以响应此类写入尝试的处理程序(例如,在创建正在运行的进程的实时快照期间处理更改,状态将内存转储转储到磁盘、实现共享内存、跟踪内存变化时捕获)。 功能性 相等的 将 mprotect() 与 SIGSEGV 信号处理程序结合使用,但它的工作速度明显更快。
    • SELinux 已弃用“checkreqprot”参数,该参数允许您在处理规则时禁用内存保护检查(允许使用可执行内存区域,无论规则中指定的规则如何)。 Kernfs 符号链接可以继承其父目录的上下文。
    • 结构 切换到韩国RSI,它允许您将 BPF 程序附加到内核中的任何 LSM 挂钩。 该更改允许您以 BPF 程序的形式创建 LSM 模块(Linux 安全模块),以解决审计问题和强制访问控制。
    • 实施 通过批处理 CRNG 值而不是单独调用 RNG 指令来优化 /dev/random 的性能。 改进了提供 RNG 指令的 ARM64 系统上 getrandom 和 /dev/random 的性能。
    • 椭圆曲线 Curve25519 的实现 被取代 图书馆的选项 HACL为此 节目 形式可靠性验证的数学证明。
    • 额外 通知空闲内存页的机制。 利用这种机制,客户系统可以将不再使用的页面信息传输给主机系统,而主机可以收回页面数据。
    • 在 vfio/pci 中 添加 支持 SR-IOV(单根 I/O 虚拟化)。
  • 内存和系统服务
    • 80 到 100 个字符 增加 源文本中最大行长度的限制。 同时,仍然建议开发人员将每行字符数保持在 80 个字符以内,但这不再是硬性限制。 此外,仅当使用“--strict”选项运行 checkpatch 时,超过行大小限制现在才会导致生成警告。 这一变化将使开发人员不会因为以下原因而分散注意力: 操纵 带有空格,在对齐代码时感觉更自由,以及 会阻止 过度断线, 令人不安的 代码理解和搜索。
    • 添加者 支持 EFI 混合引导模式,允许您从 64 位 CPU 上运行的 32 位固件加载 64 位内核,而无需使用专门的引导加载程序。
    • 包括 用于识别和调试分体锁的系统(“分体锁”),当访问内存中未对齐的数据时会发生这种情况,因为执行原子指令时,数据会跨越两个 CPU 缓存行。 这种阻塞会导致性能显着下降(比对单个缓存行的数据进行原子操作慢 1000 个周期)。 根据“split_lock_detect”引导参数,内核可以动态检测此类锁定并发出警告或向导致锁定的应用程序发送 SIGBUS 信号。
    • 任务调度程序提供温度传感器的跟踪(热压力)并在放置任务时考虑到过热。 使用提供的统计数据,热调节器可以在过热时调整最大 CPU 频率,并且任务调度程序现在在调度任务运行时会考虑到由于频率降低而导致的计算能力下降(之前,调度程序会响应变化)频率上有一定的延迟,在一段时间内根据对可用计算资源的夸大假设做出决策)。
    • 任务调度器包括 不变指标 负载跟踪,使您能够正确估计负载,无论当前 CPU 运行频率如何。 这一变化使您能够更准确地预测电压和 CPU 频率动态变化条件下任务的行为。 例如,一个在 1 MHz 时消耗 3/1000 CPU 资源的任务,当频率降至 2 MHz 时,将消耗 3/500 的资源,这在之前创建了一个错误的假设,即它正在满负荷运行(即任务出现)仅通过降低频率才能使调度程序变得更大,这会导致 schedutil cpufreq 调控器做出错误的决定)。
    • 负责选择性能模式的Intel P-state驱动程序已切换为使用 调度工具.
    • 内核实时运行时(PREEMPT_RT)使用BPF子系统的能力已经实现。 以前,当启用 PREEMPT_RT 时,需要禁用 BPF。
    • 添加了一种新类型的 BPF 程序 - BPF_MODIFY_RETURN,它可以附加到内核中的函数并更改该函数返回的值。
    • 添加者 机会 使用clone3()系统调用在与父cgroup不同的cgroup中创建一个进程,允许父进程在生成新进程或线程后立即应用限制并启用记帐。 例如,服务管理器可以直接将新服务分配到单独的cgroup中,而新进程在放置在“冻结”cgroup中时将立即停止。
    • 在Kbuild中 添加 支持环境变量“LLVM=1”在构建内核时切换到 Clang/LLVM 工具包。 提高了 binutils 版本的要求 (2.23)。
    • /sys/kernel/debug/kunit/ 部分已添加到 debugfs 中,其中包含 kunit 测试的结果。
    • 添加了内核引导参数 pm_debug_messages (类似于 /sys/power/pm_debug_messages),该参数允许输出有关电源管理系统操作的调试信息(在调试休眠和待机模式问题时很有用)。
    • 至异步 I/O 接口 io_uring 增加了支持 拼接() и 原子缓冲区选择.
    • 使用 perf 工具包改进了 cgroup 分析。 此前,perf 只能分析特定 cgroup 中的任务,无法找出当前样本属于哪个 cgroup。 perf 现在检索每个样本的 cgroup 信息,允许您分析多个 cgroup 并应用排序
      报告中的 cgroup。

    • cgroupfs 是一种用于管理 cgroup 的伪 FS,它添加了对扩展属性 (xattrs) 的支持,例如,您可以在用户空间中为处理程序留下附加信息。
    • 在cgroup内存控制器中 添加支持“memory.low”值的递归保护,该值调节提供给组成员的最小 RAM 量。 当使用“memory_recursiveprot”选项挂载cgroup层次结构时,为较低节点设置的“memory.low”值将自动分配给所有子节点。
    • 额外 Uacce(统一/用户空间访问加速框架)框架,用于在CPU和外围设备之间共享虚拟地址(SVA,共享虚拟寻址),允许硬件加速器访问主CPU中的数据结构。
  • 硬件架构
    • 对于ARM架构,实现了热取内存的能力。
    • 对于RISC-V架构,增加了对CPU热插拔(CPU hotplug)的支持。 对于 32 位 RISC-V,实现了 eBPF JIT。
    • 使用 32 位 ARM 系统运行 KVM 来宾环境的功能已被删除。
    • 删除了 s390 架构的“虚拟”NUMA 实现,未发现该架构可实现性能改进的用例。
    • 对于 ARM64,增加了对 AMU(活动监视器单元)扩展的支持,该扩展在 ARMv8.4 中定义,并提供用于计算任务调度程序中的频率缩放校正因子的性能计数器。
  • Оборудование
    • 添加者 支持使用符合 virtio 规范的数据交换通道的 vDPA 设备。 vDPA 设备可以是物理连接的设备,也可以是软件模拟的虚拟设备。
    • 在 GPIO 子系统中 出现 用于监视变化的新 ioctl() 命令,允许您通知进程任何 GPIO 线路状态的变化。 作为使用新命令的示例 建议的 GPIO-手表实用程序。
    • 在 Intel 显卡的 i915 DRM 驱动程序中 包括 默认支持 Tigerlake(“Gen12”)芯片,并添加了对 OLED 背光控制的初始支持。 改进了对 Ice Lake、Elkhart Lake、Baytrail 和 Haswell 芯片的支持。
    • 在amdgpu驱动中 添加 能够将固件加载到 ASIC 的 USBC 芯片中。 改进了对 AMD Ryzen 4000“Renoir”芯片的支持。 现在支持控制 OLED 面板。 在 debugfs 中提供固件状态显示。
    • VMware 虚拟化系统的 vmwgfx DRM 驱动程序中添加了在来宾系统中使用 OpenGL 4 的功能(之前支持 OpenGL 3.3)。
    • 为 TI Keystone 平台显示系统添加了新的 DRM 驱动程序 tidss。
    • 新增液晶面板驱动:飞信K101 IM2BA02、三星s6e88a0-ams452ef01、Novatek NT35510、Elida KD35T133、EDT、新东方光电WJFH116008A、Rocktech RK101II01D-CT、Frida FRD350H54004。
    • 至电源管理系统 添加 支持基于 Atom 的 Intel Jasper Lake (JSL) 平台。
    • 添加了对基于 Rockchip RK3399 的 Pinebook Pro 笔记本电脑、Pine64 PineTab 平板电脑和智能手机的支持 松电话 基于全志A64。
    • 添加了对新音频编解码器和芯片的支持:
      Amlogic AIU、Amlogic T9015、德州仪器 TLV320ADCX140、Realtek RT5682、ALC245、Broadcom BCM63XX I2S、Maxim MAX98360A、Presonus Studio 1810c、MOTU MicroBook IIc。

    • 添加了对 ARM 板和平台的支持 Qualcomm Snapdragon 865 (SM8250)、IPQ6018、NXP i.MX8M Plus、Kontron“sl28”、11 个 i.MX6 TechNexion Pico 板选项、三个新的 Toradex Colibri 选项、基于 ST 的 Samsung S7710 Galaxy Xcover 2 -Ericsson u8500、DH Electronics DHCOM SoM 和 PDK2、Renesas M3ULCB、Hoperun HiHope、Linutronix Testbox v2、PocketBook Touch Lux 3。

来源: opennet.ru

添加评论