Linux 5.14 内核版本

经过两个月的开发,Linus Torvalds 发布了 Linux 内核 5.14。 最显着的变化包括:新的quotactl_fd()和memfd_secret()系统调用、删除ide和raw驱动程序、cgroup的新I/O优先级控制器、SCHED_CORE任务调度模式、用于创建经过验证的BPF程序加载器的基础设施。

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

主要创新:

  • 磁盘子系统、I/O 和文件系统
    • 为 cgroup 实现了新的 I/O 优先级控制器 rq-qos,它可以控制每个 cgroup 成员生成的块设备请求的处理优先级。 mq-deadline I/O 调度程序中添加了新的优先级控制器支持。
    • ext4 文件系统实现了一个新的 ioctl 命令 EXT4_IOC_CHECKPOINT,该命令强制将日志及其关联缓冲区中的所有挂起事务刷新到磁盘,并覆盖日志在存储中使用的区域。 这一更改是为了防止文件系统信息泄露而准备的。
    • 对 Btrfs 进行了性能优化:通过消除 fsync 执行过程中不必要的扩展属性日志记录,扩展属性的密集操作性能提升高达 17%。 此外,在执行不影响范围的修剪操作时,会禁用完全同步,这会减少 12% 的操作时间。 sysfs 中添加了一项设置,用于在检查 FS 时限制 I/O 带宽。 添加了 ioctl 调用以取消调整大小和删除设备操作。
    • 在XFS中,缓冲区高速缓存的实现已被重新设计,已切换为以批处理模式分配内存页。 提高了缓存效率。
    • F2FS 添加了一个以只读模式运行的选项,并实现了压缩块缓存模式(compress_cache)以提高随机读取性能。 已实现使用 mmap() 操作压缩映射到内存的文件的支持。 为了根据掩码有选择地禁用文件压缩,提出了一个新的挂载选项 nocompress。
    • exFAT 驱动程序已完成工作,以提高与某些数码相机存储的兼容性。
    • 添加了quotactl_fd()系统调用,它允许您不通过特殊设备文件来管理配额,而是通过指定与应用配额的文件系统关联的文件描述符来管理配额。
    • 具有 IDE 接口的块设备的旧驱动程序已从内核中删除;它们早已被 libata 子系统取代。
    • “原始”驱动程序已从内核中删除,通过 /dev/raw 接口提供对块设备的无缓冲访问。 此功能早已在使用 O_DIRECT 标志的应用程序中实现。
  • 内存和系统服务
    • 任务调度器实现了一种新的调度模式SCHED_CORE,它允许您控制哪些进程可以在同一CPU核心上一起执行。 每个进程都可以分配一个 cookie 标识符,该标识符定义进程之间的信任范围(例如,属于同一用户或容器)。 在组织代码执行时,调度程序可以确保一个CPU核心仅在与同一所有者关联的进程之间共享,这可以通过防止可信和不可信任务在同一SMT(超线程)线程上运行来阻止某些Spectre攻击。
    • 对于cgroup,已经实现了对kill操作的支持,它允许您通过向虚拟文件cgroup.kill写入“1”来立即杀死与该组关联的所有进程(发送SIGKILL)。
    • 与响应分割锁(“分割锁”)检测相关的扩展功能,该分割锁在访问内存中未对齐的数据时发生,因为执行原子指令时,数据会跨越两个 CPU 缓存行。 这种阻塞会导致性能显着下降,因此以前可以强制终止导致阻塞的应用程序。 新版本添加了一个内核命令行参数“split_lock_detect=ratelimit:N”,它允许您定义系统范围内每秒锁定操作的速率限制,超过该限制后,任何已成为拆分锁源的进程将被迫停止 20 毫秒而不是终止。
    • cgroup带宽控制器CFS(CFS带宽控制器),它决定可以分配给每个cgroup多少处理器时间,实现了定义时间限制的能力,从而可以更好地调节延迟敏感的工作负载。 例如,将 cpu.cfs_quota_us 设置为 50000,将 cpu.cfs_period_us 设置为 100000,将允许一组进程每 100ms 浪费 50ms 的 CPU 时间。
    • 添加了用于创建 BPF 程序加载器的初始基础设施,这将进一步允许仅加载使用可信数字密钥签名的 BPF 程序。
    • 添加了新的 futex 操作 FUTEX_LOCK_PI2,它使用单调计时器来计算超时,该超时考虑了系统在睡眠模式下花费的时间。
    • 对于RISC-V架构,实现了对大内存页(Transparent Huge-Pages)的支持以及在使用内存时使用KFENCE机制检测错误的能力。
    • madvise() 系统调用提供了一种优化进程内存管理的方法,它添加了 MADV_POPULATE_READ 和 MADV_POPULATE_WRITE 标志,以便在映射到读或写操作的所有内存页上生成“页面错误”,而无需执行实际的读或写操作(故障前)。 使用标志对于减少程序执行的延迟很有用,因为“页面错误”处理程序会立即针对所有未分配的页面主动执行,而无需等待对它们的实际访问。
    • kunit 单元测试系统添加了对在 QEMU 环境中运行测试的支持。
    • 添加了新的跟踪器:“osnoise”用于跟踪由中断处理引起的应用程序延迟,“timerlat”用于显示从计时器信号唤醒时有关延迟的详细信息。
  • 虚拟化和安全
    • 添加了 memfd_secret() 系统调用,以在隔离的地址空间中创建私有内存区域,仅对所属进程可见,不会反映到其他进程,并且内核不能直接访问。
    • 在 seccomp 系统调用过滤系统中,当将阻塞处理程序移动到用户空间时,可以使用单个原子操作为隔离任务创建文件描述符,并在处理系统调用时返回它。 所提出的操作解决了当信号到达时中断用户空间中的处理程序的问题。
    • 添加了用于管理用户 ID 命名空间中的资源限制的新机制,该机制将各个 rlimit 计数器绑定到“用户命名空间”中的用户。 这一更改解决了当一个用户在不同容器中运行进程时使用公共资源计数器的问题。
    • 适用于 ARM64 系统的 KVM 管理程序添加了在来宾系统中使用 MTE(MemTag,内存标记扩展)扩展的功能,该扩展允许您将标记绑定到每个内存分配操作,并组织检查指针的正确使用,以阻止对内存的利用。由于访问已释放的内存块、缓冲区溢出、初始化之前的访问以及在当前上下文之外使用而导致的漏洞。
    • ARM64 平台的指针验证工具现在可以为内核和用户空间单独配置。 该技术允许您使用专门的 ARM64 指令,通过存储在指针本身未使用的高位中的数字签名来验证返回地址。
    • 用户模式 ​​Linux 添加了对使用带有虚拟 PCI 总线的 PCI 设备驱动程序的支持,由 PCI-over-virtio 驱动程序实现。
    • 对于 x86 系统,增加了对 virtio-iommu 半虚拟化设备的支持,允许通过 virtio 传输发送 ATTACH、DETACH、MAP 和 UNMAP 等 IOMMU 请求,而无需模拟内存页表。
    • 对于Intel CPU,从Skylake系列到Coffee Lake,默认情况下禁用Intel TSX(事务同步扩展)的使用,该扩展提供了通过动态消除不必要的同步操作来提高多线程应用程序性能的工具。 由于 TAA(TSX 异步中止)机制运行期间可能会发生通过第三方渠道操纵信息泄漏的 Zombieload 攻击,因此扩展被禁用。
  • 网络子系统
    • 集成到 MPTCP(多路径 TCP)的核心中,MPTCP 是 TCP 协议的扩展,用于组织 TCP 连接的操作,通过与不同 IP 地址关联的不同网络接口沿多条路由同时传送数据包。 新版本添加了一种为 IPv4 和 IPv6 设置自己的流量哈希策略(多路径哈希策略)的机制,从而可以从用户空间确定数据包中的哪些字段(包括封装的字段)在计算确定哈希值时将使用。数据包路径的选择。
    • virtio 虚拟传输中添加了对 SOCK_SEQPACKET 套接字(数据报的有序且可靠传输)的支持。
    • SO_REUSEPORT 套接字机制的功能得到了扩展,它允许多个侦听套接字同时连接到一个端口,以接收连接,并将传入请求同时分布到通过 SO_REUSEPORT 连接的所有套接字上,从而简化了多线程服务器应用程序的创建。 新版本添加了在处理最初选择的套接字时出现故障时将控制权转移到另一个套接字的工具(解决了重新启动服务时丢失单个连接的问题)。
  • Оборудование
    • amdgpu 驱动程序提供对代号为“Beige Goby”(Navi 6000)和“Yellow Carp”的新型 AMD Radeon RX 24 系列 GPU 的支持,并改进了对 Aldebaran GPU (gfx90a) 和 Van Gogh APU 的支持。 增加了同时使用多个 eDP 面板的功能。 对于 APU Renoir,已经实现了对使用视频内存(TMZ,可信内存区域)中的加密缓冲区的支持。 添加了对热拔插显卡的支持。 对于 Radeon RX 6000 (Navi 2x) GPU 和较旧的 AMD GPU,默认启用 ASPM(活动状态电源管理)支持,之前仅针对 Navi 1x、Vega 和 Polaris GPU 启用。
    • 对于AMD芯片来说,在HMM(异构内存管理)子系统的基础上增加了对共享虚拟内存(SVM,共享虚拟内存)的支持,允许使用具有自己的内存管理单元(MMU,内存管理单元)的设备,它可以访问主存储器。 特别是,使用HMM,可以在GPU和CPU之间组织一个共享地址空间,其中GPU可以访问进程的主存。
    • 增加了对 AMD Smart Shift 技术的初步支持,该技术可动态更改配备 AMD 芯片组和显卡的笔记本电脑上的 CPU 和 GPU 电源设置,以提高游戏、视频编辑和 3D 渲染的性能。
    • 适用于 Intel 显卡的 i915 驱动程序包含对 Intel Alderlake P 芯片的支持。
    • 为 Hyper-V 虚拟图形适配器添加了 drm/hyperv 驱动程序。
    • 添加了对 Raspberry Pi 400 一体机的支持。
    • 添加了 dell-wmi-privacy 驱动程序以支持戴尔笔记本电脑中包含的硬件摄像头和麦克风开关。
    • 对于 Lenovo 笔记本电脑,添加了 WMI 接口,用于通过 sysfs /sys/class/firmware-attributes/ 更改 BIOS 设置。
    • 扩展了对具有 USB4 接口的设备的支持。
    • 添加了对 AmLogic SM1 TOACODEC、Intel AlderLake-M、NXP i.MX8、NXP TFA1、TDF9897、Rockchip RK817、Qualcomm Quinary MI2 和 Texas Instruments TAS2505 声卡和编解码器的支持。 改进了对 HP 和 ASUS 笔记本电脑的音频支持。 添加了补丁以减少音频开始在 USB 设备上播放之前的延迟。

来源: opennet.ru

添加评论