Linux 5.3 内核版本

经过两个月的开发 Linus Torvalds 提交 内核版本 Linux 5.3。 值得注意的变化包括:支持 AMD Navi GPU、兆熙处理器和 Intel Speed Select 电源管理技术、能够使用 umwait 指令进行等待而不使用循环,
非对称 CPU 的交互性“利用钳位”模式、pidfd_open 系统调用、使用 4/0.0.0.0 子网中的 IPv8 地址的能力、nftables 硬件加速功能、DRM 子系统中的 HDR 支持、ACRN 管理程序集成。

В 公告 在新版本中,Linus 提醒所有开发人员内核开发的主要规则 - 保持用户空间组件的行为不变。 对内核的更改不应以任何方式破坏现有应用程序并导致用户级别的回归。 同时,违反行为不仅会导致 ABI 更改、删除过时的代码或出现错误,还会对正确运行的有用改进产生间接影响。 作为一个说明性的例子,有 丢弃的 有帮助 优化 在 Ext4 代码中,它通过禁用小 I/O 请求的 inode 表预取来减少磁盘访问次数。

优化导致以下事实:由于磁盘活动减少,getrandom() 随机数生成器的熵开始累积得更慢,并且在某些配置中,在某些情况下,加载过程中可能会冻结,直到熵池被释放。满的。 由于优化确实有用,因此开发人员之间进行了讨论,建议通过禁用 getrandom() 调用的默认阻塞行为并添加用于等待熵的可选标志来解决该问题,但这样的变化会影响加载初始阶段随机数的质量。

新版本接受了 15794 名开发者的 1974 个修复,
补丁大小 - 92 MB(更改影响了 13986 个文件,添加了 258419 行代码,
删除了 599137 行)。 大约 39% 出现在 5.3 中
更改与设备驱动程序相关,大约 12% 的更改与
对更新特定于硬件架构的代码的态度,11%
与网络堆栈相关,3%与文件系统相关,3%与内部相关
内核子系统。

创新:

  • 内存和系统服务
    • 继续开发“pidfd”功能,以帮助处理 PID 重用情况(pidfd 绑定到特定进程并且不会更改,而 PID 可以在与 PID 关联的当前进程终止后绑定到另一个进程)。 之前内核已经添加好了
      pidfd_send_signal()系统调用和clone()调用中的CLONE_PIDFD标志来获取要在idfd_send_signal()中使用的pidfd。 当使用带有 CLONE_PIDFD 标志的 clone() 调用时,服务管理器或系统可能会出现问题,以强制终止 Android 平台上内存不足的进程。 在这种情况下,使用不带 CLONE_PIDFD 的 fork() 或 clone() 调用来启动。

      5.3内核引入系统调用 pidfd_open(),它允许您获取任意现有进程的可检查 pidfd,该进程不是通过使用 CLONE_PIDFD 标志调用 clone() 创建的。 我们还添加了对使用 poll() 和 epoll() 轮询 pidfd 的支持,这允许进程管理器跟踪任意进程的终止,而不必担心将 PID 分配给新进程时出现竞争条件。 通知与 pidfd 关联的进程退出的机制与通知其子进程退出类似;

    • 为任务调度程序添加了对负载固定机制的支持(利用夹紧),这允许您遵守最小或最大频率范围,具体取决于 CPU 上活动的任务。 所提出的机制通过至少以“请求”频率的下限运行这些任务来加速直接影响用户交互质量的任务。 不影响用户工作的低优先级任务使用“允许”频率的上限启动。 限制是通过 sched_setattr() 系统调用中的 sched_uclamp_util_min 和 sched_uclamp_util_max 属性设置的。
    • 增加了对能源管理技术的支持 英特尔速度选择,在某些配备 Intel Xeon 处理器的服务器上可用。 该技术允许您为不同的CPU核心设置性能设置和分区带宽,从而允许您优先考虑在某些核心上执行的任务的性能,而牺牲其他核心的性能;
    • 用户空间中的进程 由...提供 使用 umwait 指令能够在不使用循环的情况下等待短时间。 该指令以及 umonitor 和 tpause 指令将在即将推出的英特尔“Tremont”芯片中提供,并且在使用超线程时将允许节能且不会影响其他线程性能的延迟;
    • RISC-V架构增加了对大内存页(huge page)的支持;
    • “kprobes”跟踪机制中添加了取消引用内核指针到用户空间的功能,该机制可用于评估传递给系统调用的结构的内容。 还添加了在启动阶段设置检查的功能。
    • 配置文件中添加了 PREEMPT_RT 选项以实现实时操作。 实时代码本身尚未添加到内核中,但该选项的出现是一个好兆头,表明了长期的传奇 积分 补丁 Realtime-Preempt 即将完成;
    • 添加了clone3()系统调用,实现了更具扩展性的clone()接口版本,它允许指定更多数量的标志;
    • 添加了 bpf_send_signal() 处理程序以允许 BPF 程序向任意进程发送信号;
    • 对于KVM hypervisor环境中的perf事件,增加了新的事件过滤机制,允许管理员确定允许或不允许在guest端监控的事件类型;
    • eBPF应用验证机制中增加了处理带有循环的程序的能力,如果循环的执行受到限制并且不会导致超过最大指令数的限制;
  • 磁盘子系统、I/O 和文件系统
    • 对于XFS文件系统,实现了多线程inode遍历的可能性(例如,在检查配额时)。 添加了新的 ioctl BULKSTAT 和 INUMBERS,提供对第五版 FS 格式中引入的功能的访问,例如 inode 诞生时间以及为每个 AG 组(Allocation Groups)设置 BULKSTAT 和 INUMBERS 参数的能力;
    • 在 Ext4 中 增加了支持 目录中的空白(未附加的块)。
      提供加工 打开文件的标志“i”(不可变)(如果在文件已经打开时设置标志,则禁止写入);

    • Btrfs 提供了在所有架构上快速实现 crc32c 的定义;
    • 在 CIFS 中,支持 smbdirect 的代码已被弃用。 SMB3 添加了在 GCM 模式下使用加密算法的能力。 添加了一个新的安装选项,用于从 ACE(访问控制条目)中提取模式参数。 优化 open() 调用性能;
    • F2FS 中添加了一个选项,用于在 checkpoint=disable 模式下运行时限制垃圾收集器。 添加了 ioctl 以从 F2FS 中删除块范围,从而允许动态调整分区大小。 添加了通过直接 I/O 将分页文件放置在 F2FS 中的功能。 添加了对固定文件和为所有用户的类似文件分配块的支持;
    • io_uring异步I/O接口增加了对异步sendmsg()和recvmsg()操作的支持;
    • UBIFS 文件系统中添加了对使用 zstd 算法压缩的支持以及验证签名 FS 映像的功能;
    • Ceph FS 添加了对文件 SELinux 安全标签的支持;
    • 对于 NFSv4,实现了新的挂载选项“nconnect=”,该选项决定与服务器建立的连接数量。 这些连接之间的流量将使用负载平衡进行分配。 此外,/proc/fs/nfsd/clients 目录现在由 NFSv4 服务器创建,其中包含有关当前客户端的信息,包括有关它们已打开的文件的信息;
  • 虚拟化和安全
    • 内核包括用于嵌入式设备的管理程序 ACRN,其编写时考虑到了实时准备和关键任务可用性。 ACRN 提供最小的开销,保证与设备交互时的低延迟和足够的响应能力。 支持CPU资源、I/O、网络子系统、图形和声音操作的虚拟化。 ACRN可用于在电子控制单元、仪表板、汽车信息系统、消费物联网设备和其他嵌入式设备中运行多个隔离的虚拟机;
    • 在用户模式Linux下 添加 时间旅行模式,允许您在 UML 虚拟环境中放慢或加快时间,以便更轻松地调试与时间相关的代码。 还添加了参数
      time-travel-start,允许系统时钟从纪元格式的指定时间开始;

    • 添加了新的内核命令行选项“init_on_alloc”和“init_on_free”,如果指定,则可以将已分配和已释放的内存区域清零(在 malloc 和 free 期间填充零),这允许由于额外的初始化开销而提高安全性;
    • 添加了新驱动程序 virtio-iommu 实现半虚拟化设备,允许通过 virtio 传输发送 IOMMU 请求,例如 ATTACH、DETACH、MAP 和 UNMAP,而无需模拟内存页表;
    • 添加了新驱动程序 virtio-pmemA 表示对映射到物理地址空间的存储设备的访问,例如 NVDIMM;
    • 实现了将加密密钥附加到用户或网络命名空间(在选定的命名空间之外无法访问密钥)以及使用 ACL 保护密钥的功能;
    • 到加密子系统 添加 支持非常快速的非加密哈希算法 散列,其速度取决于内存性能;
  • 网络子系统
    • 支持处理 4/0.0.0.0 范围内的 IPv8 地址,该地址以前不可用。 该子网的介绍 另外分配16万个IPv4地址;
    • 在 nftables 的 Netfilter 中 添加 通过使用添加到驱动程序中的内容来支持硬件加速数据包过滤机制 流块API。 包含所有链的整个规则表可以放置在网络适配器一侧。 通过将 NFT_TABLE_F_HW 标志绑定到表来完成启用。 支持简单的第3层和第4层协议元数据、接受/拒绝操作、源/目标IP和网络端口的映射以及协议类型;
    • 添加者 内置支持网桥连接跟踪,不需要使用 br_netfilter 模拟层;
    • 在 nf_tables 中 添加 支持 SYNPROXY 模块,该模块重复 iptables 的类似功能,以及检查 IPv4 标头中各个选项的规则的能力;
    • 添加了将 BPF 程序附加到 setsockopt() 和 getsockopt() 系统调用的功能,例如,它允许您将自定义访问处理程序附加到这些调用。 此外,还添加了一个新的调用点(钩子),借助该调用点,可以为每个 RTT 间隔(往返时间、ping 时间)组织一次对 BPF 程序的调用;
    • 对于 IPv4 和 IPv6 添加 一种存储路由数据 nexthop 的新机制,旨在提高路由表的可扩展性。 测试表明,使用新系统,只需 743 秒即可将一组 4.3 万条路由加载到内核中;
    • 对于蓝牙 实施的 支持 LE ping 所需的功能;
  • Оборудование
    • 添加者 支持 x86 兼容公司处理器 兆新是威盛电子与上海市政府合作项目的成果。 CPU ZX系列基于x86-64 Isaiah架构,持续技术发展 威盛半人马座;
    • DRM(直接渲染管理器)子系统以及 amdgpu 和 i915 图形驱动程序增加了对通过 HDMI 端口解析、处理和发送 HDR(高动态范围)元数据的支持,允许使用能够显示其他范围的 HDR 面板和屏幕。亮度;
    • Amdgpu 驱动程序增加了对 AMD NAVI GPU (RX5700) 的初始支持,其中包括核心驱动程序、屏幕交互代码 (DCN2)、GFX 和计算支持 (GFX10),
      SDMA 5(系统 DMA0)、电源管理和多媒体编码器/解码器 (VCN2)。 amdgpu 还改进了对基于 Vega12 和 Vega20 的 GPU 卡的支持,提供更多内存和电源管理选项;

    • Amdkfd 驱动程序(适用于 Fiji、Tonga、Polaris 等离散 GPU)添加了对基于 VegaM GPU 的卡的支持;
    • 在适用于 Icelake 芯片的 Intel 显卡的 DRM 驱动程序中 已实施 新的多段伽玛校正模式。 添加了通过 DisplayPort 以 YCbCr4:2:0 格式输出的功能。 添加了新固件 古C 适用于 SKL、BXT、KBL、GLK 和 ICL。 实现了以异步模式关闭屏幕电源的功能。 添加者 支持保存和恢复 Ironlake (gen5) 和 gen4 (Broadwater - Cantiga) 芯片的渲染上下文,允许在从一个批处理操作切换到另一个批处理操作时从用户空间恢复 GPU 状态;
    • Nouveau驱动提供NVIDIA Turing TU116芯片组检测;
    • 扩展了ARM Komeda(Mali D71)屏幕操作加速器的DRM/KMS驱动程序的功能,增加了对缩放、分割/合并图层、旋转、延迟写入、AFBC、SMMU以及Y0L2、P010、YUV420_8/10BIT颜色编码格式的支持;
    • MSM驱动增加了对高通A540 GPU Adreno系列的支持,以及对骁龙8998的MSM835 DSI控制器的支持;
    • 添加了液晶面板 Samsung S6E63M0、Armadeus ST0700、EDT ETM0430G0DH6、OSD101T2045-53TS、
      Evervision VGG804821、FriendlyELEC HD702E、KOE tx14d24vm1bpa、TFC S9700RTWV43TR-01B、EDT ET035012DM6 和 VXT VL050-8048NT-C01;

    • 额外 用于启用解码加速工具的驱动程序
      SoC Amlogic Meson 中提供的视频;

    • 引入了 v3d 驱动程序(适用于 Raspberry Pi 中使用的 Broadcom Video Core V GPU) 支持 调度计算着色器;
    • 额外 适用于现代 Apple MacBook 和 MacBook Pro 笔记本电脑型号的 SPI 键盘和触控板驱动程序;
    • 添加者 对与软盘驱动程序关联的 ioctl 调用提供额外保护,并且驱动程序本身被标记为未维护
      (“孤立”),这意味着测试的终止。 驱动程序仍然存储在内核中,但不能保证其正确运行。 该驱动程序被认为已过时,因为很难找到可用的硬件来测试它 - 所有当前的外部驱动器通常都使用 USB 接口。

    • 额外 Raspberry Pi 板的 cpufreq 驱动程序,允许您动态控制处理器频率的变化;
    • 添加了对新 ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53)、TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) 和 Amlogic G12B (4x Cortex-A73 + 2x Cortex-) 的支持A53),以及板:
      • 纯粹主义 Librem5,
      • 速度BMC,
      • 微软奥林巴斯BMC,
      • 控创 SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST微Avenger96,
      • 谷歌Cheza(高通SDM845),
      • 高通 Dragonboard 845c(高通 SDM845)、
      • Hugsun X99电视盒(瑞芯微RK3399),
      • Khadas Edge/Edge-V/Captain(瑞芯微RK3399),
      • HiHope RZ/G2M,
      • 恩智浦 LS1021A-TSN。

同时,拉丁美洲自由软件基金会 形成
选项 完全免费的内核5.3 - linux-libre 5.3-gnu,从包含非自由组件或代码部分的固件和驱动程序元素中清除,其范围由制造商限制。 新版本禁用了 qcom、hdcp drm、allegro-dvt 和 meson-vdec 驱动程序中的 blob 加载。
更新了驱动程序和子系统 amdgpu、i915、netx、r8169、brcmfmac、rtl8188eu、adreno、si2157、pvrusb2、touchscreen_dmi、skylake 声音驱动程序和微代码文档中的 blob 清理代码。

来源: opennet.ru

添加评论