Linux 5.1 内核版本

经过两个月的开发 Linus Torvalds 提交 内核版本 Linux 5.1。 最显着的变化包括:异步 I/O io_uring 的新接口、使用 NVDIMM 作为 RAM 的能力、Nouveau 中对共享虚拟内存的支持、通过 fanotify 支持对超大型文件系统的可扩展监控、配置 Zstd 压缩的能力Btrfs 中的级别、新的 cpuidle TEO 处理程序、解决 2038 问题的系统调用的实现、从没有 initramfs 的设备映射器设备启动的能力、SafeSetID LSM 模块、对组合实时补丁的支持。

创新:

  • 磁盘子系统、I/O 和文件系统
    • 实现了异步 I/O 的新接口 - io_uring,它以其对 I/O 轮询的支持以及有或没有缓冲的工作能力而闻名。 让我们回想一下,之前提出的异步 I/O 机制“aio”不支持缓冲 I/O,只能在 O_DIRECT 模式下运行(不缓冲和绕过缓存),由于等待元数据可用性而存在锁定问题,并且由于在内存中复制数据而产生了巨大的开销。

      在 API 内
      io_uring 开发人员试图消除旧的 aio 接口的缺点。 经过 生产率 io_uring 非常接近 SPDK 在启用轮询的情况下,它明显领先于 libaio。 已准备好在用户空间中运行的最终应用程序中使用 io_uring 的库 利布林,它提供了一个基于内核接口的高级框架;

    • FS中的事件跟踪机制 fanotify() 添加 支持跟踪超级块和结构变化情况 直接的 (创建、删除和移动目录的事件)。 所提供的功能有助于解决使用 inotify 机制在非常大的文件系统中创建递归更改跟踪时出现的可扩展性问题(以前只能通过 inotify 跟踪直接更改,但是
      在大型嵌套目录的递归跟踪条件下的性能还有很多不足之处)。 现在通过 fanotify 可以有效地完成这样的监控;

    • 在 Btrfs 文件系统上 添加 为zstd算法定制压缩级别的能力,这可以被认为是快速但无效的lz4和缓慢但良好的压缩xz之间的最佳折衷。 与之前使用 zlib 时设置压缩级别的方式类比,zstd 添加了对“-o compress=zstd:level”挂载选项的支持。 测试中,第一级最低提供2.658倍的数据压缩,压缩速度为438.47MB/s,解压速度为910.51MB/s,内存消耗为780MB;最高15级提供3.126倍,但压缩速度为37.30MB/s,解压速度为878.84MB/s,内存消耗为2547MB。速度XNUMXMB/s,解包XNUMXMB/s,内存消耗XNUMXMB;
    • 添加者 能够从位于设备映射器设备上的文件系统启动,而无需使用 initramfs。 从当前内核版本开始,设备映射器设备可以在引导过程中直接使用,例如,作为具有根文件系统的分区。 使用引导参数“dm-mod.create”配置分区。 允许加载的设备映射器模块包括:“crypt”、“delay”、“linear”、“snapshot-origin”和“verity”;
    • F2FS_NOCOW_FL 标志已添加到面向闪存驱动器的 F2FS 文件系统中,允许您禁用给定文件的写时复制模式;
    • 文件系统从内核中删除 埃克斯夫斯,它是 ext2 的变体,适合与 OSD(基于对象的存储设备)对象存储一起使用。 此类对象存储设备对 SCSI 协议的支持也已被删除;
  • 虚拟化和安全
    • 向 prctl() 添加了 PR_SPEC_DISABLE_NOEXEC 选项,以控制所选进程的指令的推测执行。 新选项允许您有选择地禁用可能受到 Spectre 攻击的进程的推测执行。 锁持续到第一次调用 exec() 为止;
    • 实现LSM模块 安全设置ID,它允许系统服务安全地管理用户,而无需升级权限(CAP_SETUID)且无需获得 root 权限。 通过基于有效绑定白名单(以“UID1:UID2”形式)在 securityfs 中定义规则来分配权限;
    • 添加了基于堆栈的安全模块 (LSM) 加载所需的低级更改。 引入了“lsm”内核引导选项来控制加载哪些模块以及加载顺序;
    • 审计子系统添加了对文件命名空间的支持;
    • 扩展 GCC 插件 structleak 的功能,它允许您阻止潜在的内存内容泄漏。通过堆栈上的引用访问提供代码中使用的任何变量的初始化;
  • 网络子系统
    • 用于插座 实施的 新选项“SO_BINDTOIFINDEX”类似于
      “SO_BINDTODEVICE”,但将网络接口的索引号而不是接口名称作为参数;

    • mac80211 堆栈增加了为一台设备分配多个 BSSID(MAC 地址)的功能。 作为优化 WiFi 性能项目的一部分,mac80211 堆栈添加了通话时间统计和在多个站点之间分配通话时间的功能(在接入点模式下运行时,为速度较慢的无线站点分配较少的传输时间,而不是在所有站点之间均匀分配时间)站);
    • 新增机制》开发链接健康”,当网络接口出现问题时提供通知;
  • 内存和系统服务
    • 实施的 安全信号传输,允许 PID 重用。 例如,之前调用kill时,可能会出现这样的情况:发送信号后,目标PID可能会因进程终止而被释放并被另一个进程占用,并且信号最终会传递给另一个进程。 为了消除这种情况,添加了一个新的系统调用 pidfd_send_signal,它使用 /proc/pid 中的文件描述符来确保稳定的进程绑定。 即使在系统调用处理过程中重用PID,文件描述符也不会改变,可以安全地用于向进程发送信号;
    • 添加者 使用永久存储设备(例如持久内存)的能力 NVDIMM)作为内存。 到目前为止,内核支持存储设备等设备,但现在它们也可以用作附加 RAM。 该功能的实现是为了满足那些愿意忍受性能滞后并希望使用本机 Linux 内核内存管理 API 而不是使用在 dax 的 mmap 之上运行的现有用户空间内存分配系统的用户的愿望。文件;
    • 添加了新的CPU空闲处理程序(cpuidle,决定CPU何时可以进入深度省电模式;模式越深,省电越大,但退出模式所需的时间也越长) - TEO(Timer Events Oriented Governor) )。 到目前为止,已经提出了两种 cpuidle 处理程序 - “menu”和“ladder”,其启发式不同。 “菜单”处理程序在做出启发式决策时存在已知问题,为了消除这些问题,决定准备一个新的处理程序。 TEO 被定位为“菜单”处理程序的替代方案,可以在保持相同水平的功耗的同时实现更高的性能。
      您可以使用启动参数“cpuidle.governor=teo”激活新的处理程序;

    • 作为消除工作的一部分 2038年的问题由 32 位 time_t 类型溢出引起的,包括为 32 位体系结构提供 64 位时间计数器的系统调用。 因此,64 位 time_t 结构现在可以在所有架构上使用。 网络子系统中的选项也进行了类似的更改 时间戳 网络套接字;
    • 进入核心热补丁系统(live patching) 添加 “原子替换”功能可将一系列更改原子地应用到单个函数。 此功能允许您一次分发涵盖多个更改的摘要补丁,而不是按照严格定义的顺序逐步应用实时补丁的过程,这非常难以维护。 以前每个后续更改都必须基于上次更改后的函数状态,而现在可以一次传播与一个初始状态相关的多个更改(即维护者可以维护一个相对于基础内核的统一补丁,而不是相互依赖的补丁链);
    • 已公布 已弃用对 a.out 可执行文件格式的支持
      已删除 生成a.out格式核心文件的代码,处于废弃状态。 a.out 格式已经很长时间没有在 Linux 系统上使用了,并且默认 Linux 配置中的现代工具早已不支持 a.out 文件的生成。 此外,a.out 文件的加载器可以完全在用户空间中实现;

    • BPF 程序验证机制中添加了识别和删除未使用代码的能力。 内核还包括为 BPF 子系统提供自旋锁支持的补丁,提供了管理 BPF 程序并行执行的附加功能;
  • Оборудование
    • 在新司机 添加 支持异构内存管理,允许CPU和GPU访问公共同步内存区域。 共享虚拟内存系统(SVM,共享虚拟内存)是在HMM(Heterogeneous Memory Management)子系统的基础上实现的,它允许使用具有自己的内存管理单元(MMU,内存管理单元)的设备,这些设备可以访问主存储器。 特别是,使用HMM,可以在GPU和CPU之间组织一个共享地址空间,其中GPU可以访问进程的主存。 目前仅对 Pascal 系列 GPU 启用 SVM 支持,但也为 Volta 和 Turing GPU 提供支持。 此外,在新 添加 新的 ioctl 控制进程内存区域到 GPU 内存的迁移;
    • 在适用于 GPU Skylake 及更高版本 (gen9+) 的 Intel DRM 驱动程序中 切换到 默认情况下,快速启动模式会消除启动过程中不必要的模式更改。 添加 基于 Coffelake 和 Ice Lake 微架构的设备标识符。 适用于咖啡薯片 添加 GVT 支持(GPU虚拟化)。 对于虚拟 GPU 实施的 VFIO EDID 支持。 适用于液晶面板 MIPI/DSI 添加 支持 ACPI/PMIC 元素。 实施的 新电视模式 1080p30/50/60 TV;
    • amdgpu 驱动程序添加了对 Vega10/20 BACO GPU 的支持。 实施了 Vega 10/20 电源管理和 Vega 10 冷却器控制表。为 Picasso GPU 添加了新的 PCI 设备标识符。 额外 用于管理可调度依赖关系以避免死锁的接口;
    • 额外 用于屏幕加速器的 DRM/KMS 驱动程序 ARM科梅达 (马里 D71);
    • 新增对统宝TPG110、Sitronix ST7701、PDA 91-00156-A0、LeMaker BL035-RGB-002 3.5和Kingdisplay kd097d04屏幕面板的支持;
    • 新增对Rockchip RK3328、Cirrus Logic CS4341和CS35L36、MediaTek MT6358、Qualcomm WCD9335和Ingenic JZ4725B音频编解码器以及Mediatek MT8183音频平台的支持;
    • 添加了对 NAND 控制器闪存 STMicroElectronics FMC2、Amlogic Meson 的支持;
    • 增加了对Habana AI硬件系统的加速器支持;
    • 添加了对 NXP ENETC 千兆位以太网控制器以及 MediaTek MT7603E (PCIe) 和 MT76x8 无线接口的支持。

同时,拉丁美洲自由软件基金会 形成
选项 完全免费的内核5.1 - linux-libre 5.1-gnu,清除包含非自由组件或代码部分的固件和驱动程序元素,其范围由制造商限制。 在新版本中,mt7603 和 goya 驱动程序中禁用了 blob 加载。 更新了驱动程序和子系统 wilc1000、iwlwifi、soc-acpi-intel、brcmfmac、mwifiex、btmrvl、btmtk 和 touchscreen_dmi 中的斑点清理代码。 由于从内核中删除,lantiq xrx200 固件加载程序中的 Blob 清理已停止。

来源: opennet.ru

添加评论