经过两个月的开发 Linus Torvalds
就整个项目存在期间所有内核的更改数量而言,内核 5.8 成为最大的。 而且,这些变化与任何一个子系统无关,而是涵盖了内核的不同部分,并且主要与内部返工和清理相关。 最大的变化体现在驾驶员身上。 新版本包含来自 17606 名开发人员的 2081 个修复,影响了内核代码存储库中大约 20% 的文件。 补丁大小为 65 MB(更改影响了 16180 个文件,添加了 1043240 行代码,删除了 489854 行)。 相比之下,5.7 分支有 15033 个修复,补丁大小为 39 MB。 37 中引入的所有更改中大约 5.8% 与设备驱动程序相关,大约 16% 的更改与更新特定于硬件架构的代码相关,11% 与网络堆栈相关,3% 与文件系统相关,4% 与文件系统相关。与内部内核子系统相关。
- 虚拟化和安全
- 提供了内核模块的加载,这些模块的代码部分中同时设置了允许执行和写入的位。 这一更改是作为一个更大项目的一部分实现的,目的是使内核不再使用允许同时执行和写入的内存页。
- 现在可以创建单独的 procfs 实例,允许使用多个 procfs 挂载点,使用不同的选项挂载,但反映相同的进程标识符命名空间(pid 命名空间)。 以前,所有 procfs 挂载点仅镜像一种内部表示形式,对挂载参数的任何更改都会影响与同一进程 ID 命名空间关联的所有其他挂载点。 可能需要安装不同选项的领域之一是为嵌入式系统实现轻量级隔离,能够隐藏 procfs 中某些类型的进程和信息节点。
- ARM64 平台已实现对该机制的支持
影子调用堆栈 ,由 Clang 编译器提供,用于防止在堆栈缓冲区溢出时覆盖函数的返回地址。 保护的本质是在将控制权转移给函数之后将返回地址保存在单独的“影子”堆栈中,并在退出函数之前检索该地址。 - 添加了对 ARM64 平台的指令支持
ARMv8.5-BTI (分支目标指示器)以保护不应分支的指令集的执行。 阻止转换到任意代码部分是为了防止在使用面向返回的编程技术(ROP - 返回导向的编程)的漏洞利用中创建小工具;攻击者不会尝试将其代码放入内存中,而是对已经存在的代码进行操作以返回控制指令结尾的机器指令,从中构建调用链以获得所需的功能)。 - 添加了对块设备内联加密的硬件支持(
内联加密 )。 Inlinep 加密设备通常内置于驱动器中,但逻辑上位于系统内存和磁盘之间,根据内核指定的密钥和加密算法透明地加密和解密 I/O。 - 添加了“initrdmem”内核命令行选项,允许您在将初始启动映像放入 RAM 时指定 initrd 的物理内存地址。
- 添加了新功能:CAP_PERFMON,用于访问 perf 子系统并执行性能监控。
CAP_BPF ,它允许以前需要 CAP_SYS_ADMIN 权限的某些 BPF 操作(例如加载 BPF 程序)(CAP_SYS_ADMIN 权限现在分为 CAP_BPF、CAP_PERFMON 和 CAP_NET_ADMIN 的组合)。 -
添加者 一个新的 virtio-mem 设备,允许您将内存热插拔到客户系统中。 - 如果设备驱动程序使用重叠内存区域,则实现了对 /dev/mem 中映射操作的调用。
- 增加漏洞防护
CROSSTalk/SRBDS ,它允许您恢复在另一个 CPU 内核上执行的某些指令的结果。
- 内存和系统服务
- 在定义代码格式化规则的文档中,
公认 关于使用包容性术语的建议。 不建议开发者使用“主/从”和“黑名单/白名单”的组合,以及单独使用“从”一词。 这些建议仅涉及这些术语的新用途。 核心中已存在的指定单词的提及将保持不变。 在新代码中,如果需要支持用户空间中公开的 API 和 ABI,以及更新代码以支持其规范需要使用某些术语的现有硬件或协议,则允许使用标记的术语。 - 包含调试工具
KCSAN (Kernel Concurrency Sanitizer),专为动态检测而设计竞争条件 核心内部。 在 GCC 和 Clang 中构建时支持使用 KCSAN,并且需要在编译时进行特殊修改以跟踪内存访问(使用读取或修改内存时触发的断点)。 KCSAN 的开发重点是误报预防、可扩展性和易用性。 - 额外
通用机制 将通知从内核传递到用户空间。 该机制基于标准管道驱动程序,允许您通过用户空间中打开的通道有效地分发来自内核的通知。 通知接收点是以特殊模式打开的管道,允许从内核接收的消息累积在环形缓冲区中。 读取是通过通常的 read() 函数执行的。 通道所有者确定需要监视内核中的哪些源,并可以定义过滤器来忽略某些类型的消息和事件。 在这些事件中,当前仅支持对键的操作,例如添加/删除键以及更改其属性。 这些事件计划在 GNOME 中使用。 - 继续开发“pidfd”功能,以帮助处理 PID 重用情况(pidfd 与特定进程关联并且不会更改,而在与 PID 关联的当前进程终止后,PID 可以与另一个进程关联)。 新版本添加了对使用 pidfd 将进程附加到命名空间的支持(允许在执行 setns 系统调用时指定 pidfd)。 使用pidfd可以通过一次调用控制进程对多种类型命名空间的附加,显着减少必要的系统调用次数并以原子模式实现附加(如果附加到其中一个命名空间失败,其他命名空间将无法连接) 。
- 添加了新的系统调用 faccessat2(),与
faccessat() 带有符合 POSIX 建议的标志的附加参数(以前这些标志是在 C 库中模拟的,新的 faccessat2 允许它们在内核中实现)。 - 在C组中
添加 memory.swap.high 设置可用于减慢占用过多交换空间的任务。 - 至异步 I/O 接口
io_uring 添加了对 tee() 系统调用的支持。 - 新增机制》
BPF迭代器 ,旨在将内核结构的内容输出到用户空间。 -
由...提供 使用环形缓冲区在 BPF 程序之间进行数据交换的能力。 - 走进机制
帕达塔 ,旨在组织内核中任务的并行执行,增加了对具有负载平衡的多线程任务的支持。 - 在 pstore 机制中,它允许您将有关崩溃原因的调试信息保存在内存区域中,这些信息在重新引导之间不会丢失,
添加 用于将信息保存到块设备的后端。 - 来自 PREEMPT_RT 内核分支
搬家了 本地锁的实现。 -
额外 新的缓冲区分配 API (AF_XDP),旨在通过 XDP(eXpress 数据路径)支持简化网络驱动程序的编写。 - 对于RISC-V架构,已经实现了使用KGDB调试内核组件的支持。
- 在 4.8 版本之前,对可用于构建内核的 GCC 版本的要求已经提高。 在下一个版本中,计划将标准提高到 GCC 4.9。
- 在定义代码格式化规则的文档中,
- 磁盘子系统、I/O 和文件系统
- 在设备映射器中
添加 新的 dm-ebs(模拟块大小)处理程序,可用于模拟较小的逻辑块大小(例如,模拟 512K 扇区大小磁盘上的 4 字节扇区)。 - F2FS 文件系统现在支持使用 LZO-RLE 算法进行压缩。
- 在 dm-crypt 中
添加 支持加密密钥。 - Btrfs 改进了直接 I/O 模式下读取操作的处理。 安装时
加速 检查已删除的子节和没有父级的目录。 - CIFS中添加了“nodelete”参数,允许在服务器上进行正常的权限检查,但禁止客户端删除文件或目录。
- Ext4 改进了错误处理
欧洲石油公司 当使用多线程时。 xattr 添加了对 GNU Hurd 中使用的 gnu.* 命名空间的支持。 - 对于 Ext4 和 XFS,启用了与单个文件和目录相关的 DAX 操作支持(绕过页面缓存直接访问文件系统,而不使用块设备级别)。
- 在系统调用中
统计数据() 添加了标志STATX_ATTR_DAX ,指定时使用 DAX 引擎检索信息。 - 外加法
添加 支持引导区验证。 - 在FAT中
改进的 主动加载 FS 元素。 测试慢速 2TB USB 驱动器表明测试完成时间从 383 秒减少到 51 秒。
- 在设备映射器中
- 网络子系统
- 在控制网桥操作的代码中
添加 协议支持MRP (媒体冗余协议),它允许通过循环多个以太网交换机来实现容错。 - 至交通控制系统 (Tc)
添加 新的“门”操作,可以定义处理和丢弃某些数据包的时间间隔。 - 内核和 ethtool 实用程序中添加了对测试连接的网络电缆和网络设备自诊断的支持。
- IPv6 堆栈中添加了对 MPLS(多协议标签交换)算法的支持,以便使用多协议标签交换路由数据包(IPv4 之前支持 MPLS)。
- 添加了对通过 TCP 传输 IKE(互联网密钥交换)和 IPSec 数据包的支持(
RFC 8229 ) 绕过可能的 UDP 阻塞。 -
添加者 网络块设备 rnbd,它允许您使用 RDMA 传输(InfiniBand、RoCE、iWARP)和 RTRS 协议组织对块设备的远程访问。 - 在 TCP 堆栈中
添加 支持选择性确认 (SACK) 响应中的范围压缩。 - 对于 IPv6
实施的 TCP-LD 支持(RFC 6069 ,长时间连接中断)。
- 在控制网桥操作的代码中
- Оборудование
- Intel 显卡的 i915 DRM 驱动程序默认支持 Intel Tiger Lake (GEN12) 芯片,为此
实施的 能够使用 SAGV(系统代理 Geyserville)系统根据功耗或性能要求动态调整频率和电压。 - amdgpu 驱动程序增加了对 FP16 像素格式的支持以及使用视频内存(TMZ,可信内存区域)中加密缓冲区的功能。
- 添加了对 AMD Zen 和 Zen2 处理器的功率传感器以及 AMD Ryzen 4000 Renoir 的温度传感器的支持。 AMD Zen 和 Zen2 支持通过接口检索功耗信息
RAPL (运行平均功率限制)。 - 向 Nouveau 驱动程序添加了对 NVIDIA 修改器格式的支持。 对于 gv100,已经实现了使用隔行扫描模式的功能。 添加了 vGPU 定义。
- MSM (Qualcomm) 驱动程序添加了对 Adreno A405、A640 和 A650 GPU 的支持。
-
额外 用于管理 DRM(直接渲染管理器)资源的内部框架。 - 添加了对小米红米 Note 7 和三星 Galaxy S2 智能手机以及 Elm/Hana Chromebook 笔记本电脑的支持。
- 新增液晶面板驱动:华硕TM5P5 NT35596、星空KR070PE2T、丽台LTK050H3146W、维信诺rm69299、京东方tv105wum-nw0。
- 添加了对 ARM 板和平台 Renesas“RZ/G1H”、Realtek RTD1195、Realtek RTD1395/RTD1619、Rockchips RK3326、AMLogic S905D、S905X3、S922XH、Olimex A20-OLinuXino-LIME-eMMC、Check Point L-50、
、Beacon i.MX8m-Mini、高通 SDM660/SDM630、Xnano X5 电视盒、Stinger96、Beaglebone-AI。 - 新增对MIPS处理器Loongson-2K(简称Loongson64)的支持。 CPU龙芯3增加了对KVM hypervisor虚拟化的支持。
-
添加者
支持俄罗斯Baikal-T1处理器和基于该处理器的片上系统BE-T1000 。 Baikal-T1 处理器包含两个运行频率为 5600 GHz 的 P32 MIPS 5 r1.2 超标量内核。 该芯片包含 L2 缓存 (1 MB)、DDR3-1600 ECC 内存控制器、1 个 10Gb 以太网端口、2 个 1Gb 以太网端口、PCIe Gen.3 x4 控制器、2 个 SATA 3.0 端口、USB 2.0、GPIO、UART、SPI、I2C。 该处理器为虚拟化、SIMD 指令和支持 GOST 28147-89 的集成硬件加密加速器提供硬件支持。 该芯片采用 Imagination Technologies 授权的 MIPS32 P5600 Warrior 处理器核心单元开发。
- Intel 显卡的 i915 DRM 驱动程序默认支持 Intel Tiger Lake (GEN12) 芯片,为此
与此同时,拉丁美洲自由软件基金会
选项
来源: opennet.ru