Linux 内核 5.14

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% 与文件系统相关。与内部内核子系统相关。

创新:

  • 磁盘子系统、输入/输出和文件系统:
    • 对于 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 驱动程序已完成工作,以提高与某些数码相机存储的兼容性;
    • 添加了系统调用 配额_fd(),它允许您不通过特殊的设备文件来管理配额,而是通过指定与应用配额的文件系统关联的文件描述符来管理配额;
    • 具有 IDE 接口的块设备的旧驱动程序已从内核中删除;它们早已被 libata 子系统取代。 完全保留了对旧设备的支持,更改仅涉及使用旧驱动程序的能力,使用旧驱动程序时,驱动器称为 /dev/hd*,而不是 /dev/sd*;
    • “原始”驱动程序已从内核中删除,通过 /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 标志在映射用于读取或写入操作的所有内存页面上生成“页面错误”,而不执行实际的读取或写入(故障前)。 标志的使用对于减少程序执行的延迟很有用,这要归功于立即对所有未分配的页面主动执行“页面错误”处理程序,而无需等待对它们的实际访问;
    • 在单元测试系统中 国尼特 添加 支持在 QEMU 环境中运行测试;
    • 添加了新的示踪剂:“奥斯噪声”跟踪由中断处理引起的应用程序延迟,“timerlat”显示从定时器信号唤醒时有关延迟的详细信息;
  • 虚拟化和安全:
    • 添加 系统调用 memfd_secret(),它允许您在隔离的地址空间中创建私有内存区域,仅对所有者进程可见,不反映在其他进程中,并且内核不能直接访问;
    • 在 seccomp 系统调用过滤系统中,当将锁处理程序移至用户空间时,可以使用一个原子操作为隔离任务创建一个文件描述符,并在处理系统调用时返回它。 建议的操作解决了 问题 当信号到达时,用户空间中的处理程序会中断;
    • 添加 新机制 管理用户 ID 命名空间中的资源限制,它将各个 rlimit 计数器绑定到“用户命名空间”中的用户。 这一更改解决了一个用户在不同容器中运行进程时使用公共资源计数器的问题;
    • 适用于 ARM64 系统的 KVM 管理程序添加了在来宾系统中使用 MTE(MemTag,内存标记扩展)扩展的功能,该扩展允许您将标记绑定到每个内存分配操作,并组织检查指针的正确使用以阻止对内存的利用由于访问已释放的内存块、缓冲区溢出、初始化之前的访问以及在当前上下文之外使用而导致的漏洞;
    • 现在可以为内核和用户空间单独配置 ARM64 平台提供的指针身份验证。 该技术允许您使用专门的 ARM64 指令来使用存储在指针本身未使用的高位中的数字签名来验证返回地址;
    • 在用户模式Linux中 添加 支持使用带有虚拟 PCI 总线的 PCI 设备的驱动程序,由 PCI-over-virtio 驱动程序实现;
    • 对于 x86 系统,增加了对 virtio-iommu 半虚拟化设备的支持,允许您通过 virtio 传输发送 IOMMU 请求,例如 ATTACH、DETACH、MAP 和 UNMAP,而无需模拟内存页表;
    • 对于Intel CPU,从Skylake系列到Coffee Lake,默认情况下禁用Intel TSX(事务同步扩展)的使用,该扩展提供了通过动态消除不必要的同步操作来提高多线程应用程序性能的工具。 由于可能受到攻击,扩展程序被禁用 Zombieload、操纵异步中断操作(TAA、TSX Asynchronous Abort)机制运行过程中发生的信息泄露;
  • 网络子系统:
    • 继续集成到 MPTCP(多路径 TCP)的核心中,MPTCP 是 TCP 协议的扩展,用于组织 TCP 连接的操作,通过与不同 IP 地址关联的不同网络接口沿多条路由同时传送数据包。 在新一期中 添加 一种为 IPv4 和 IPv6 设置自己的流量哈希策略(多路径哈希策略)的机制,使得可以从用户空间确定在计算确定路径选择的哈希时将使用数据包中的哪些字段(包括封装的字段)对于数据包;
    • 虚拟传输 virtio 中添加了套接字支持 SOCK_SEQPACKET (数据报有序可靠的传输);
    • SO_REUSEPORT 套接字机制的功能得到了扩展,它允许多个侦听套接字同时连接到一个端口,以接收连接,并将传入请求同时分布到通过 SO_REUSEPORT 连接的所有套接字上,从而简化了多线程服务器应用程序的创建。 在新版本中 添加 当最初选择的套接字处理请求时出现故障时,将控制权转移到另一个套接字的方法(解决重新启动服务时丢失单个连接的问题);
  • 设备:
    • 在amdgpu驱动程序中 实施的 支持新的AMD Radeon RX 6000系列GPU,代号为“Beige Goby”(Navi 24)和“Yellow Carp”,以及改进对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 智能转变,动态更改配备芯片组和 AMD 显卡的笔记本电脑上 CPU 和 GPU 的功耗参数,以提高游戏、视频编辑和 3D 渲染时的性能;
    • 在 Intel 显卡的 i915 驱动程序中 包括 支持Intel Alderlake P芯片;
    • 为 Hyper-V 虚拟图形适配器添加了 drm/hyperv 驱动程序;
    • 添加 simpledrm 图形驱动程序,使用 UEFI 固件或 BIOS 提供的 EFI-GOP 或 VESA 帧缓冲区进行输出。 该驱动程序的主要目的是在启动的初始阶段提供图形输出功能,然后才能使用完整的 DRM 驱动程序。 该驱动程序还可以作为尚未安装本机 DRM 驱动程序的设备的临时解决方案;
    • 添加 一体化计算机支持 树莓派400;
    • 添加了 dell-wmi-privacy 驱动程序以支持戴尔笔记本电脑中包含的摄像头和麦克风硬件开关;
    • 适用于联想笔记本电脑 添加 用于通过 sysfs /sys/class/firmware-attributes/ 更改 BIOS 参数的 WMI 接口;
    • 展开 支持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。

来源: linux.org.ru