Linux 5.2 内核版本

经过两个月的开发 Linus Torvalds 提交 内核版本 Linux 5.2。 最显着的变化包括:Ext4操作模式不区分大小写、用于挂载文件系统的单独系统调用、GPU Mali 4xx/6xx/7xx的驱动程序、处理BPF程序中sysctl值变化的能力、device-mapper模块dm-dust,防御MDS攻击,支持DSP的声音开放固件,优化BFQ性能,使PSI(压力失速信息)子系统能够在Android中使用。

新版本接受了 15100 名开发者的 1882 个修复,
补丁大小 - 62 MB(更改影响了 30889 个文件,添加了 625094 行代码,删除了 531864 行)。 大约 45% 出现在 5.2 中
更改与设备驱动程序相关,大约 21% 的更改与
对更新特定于硬件架构的代码的态度,12%
与网络堆栈相关,3%与文件系统相关,3%与内部相关
内核子系统。 所有变更中,12.4% 由 Intel 准备,6.3% 由 Red Hat 准备,5.4% 由 Google 准备,4.0% 由 AMD 准备,3.1% 由 SUSE 准备,3% 由 IBM 准备,2.7% 由华为准备,2.7% 由 Linaro 准备,2.2% 由 ARM 准备, 1.6% - 甲骨文。

创新:

  • 磁盘子系统、I/O 和文件系统
    • 为 Ext4 添加 支持 工作时不区分文件名中字符的大小写,仅在使用新属性“+F”(EXT4_CASEFOLD_FL)的单个空目录时激活。 当对目录设置该属性时,所有对目录中的文件和子目录的操作都会不考虑字符大小写,包括搜索和打开文件时都会忽略大小写(例如文件Test.txt、此类目录中的 test.txt 和 test.TXT 将被视为相同)。 默认情况下,文件系统仍然区分大小写,但具有“chattr +F”属性的目录除外;
    • 统一了文件名中UTF-8字符的处理函数,这些函数在执行字符串比较和规范化操作时使用;
    • XFS 添加了用于文件系统健康状况监控的基础设施和用于查询健康状态的新 ioctl。 已经实现了一项实验性功能来在线检查超级块计数器。
    • 添加了新模块设备映射器“DM-粉尘“,它允许您模拟介质上坏块的出现或从磁盘读取时出现的错误。 该模块允许您在面对可能出现的故障时简化应用程序和各种存储系统的调试和测试;
    • 实施 BFQ I/O 调度程序的显着性能优化。 在高I/O负载的情况下,进行了优化 允许 将启动应用程序等操作时间减少高达 80%。
    • 添加了一系列用于挂载文件系统的系统调用: fsopen(), 开放树(), fspick(), 文件系统挂载(), 文件系统配置() и move_mount()。 这些系统调用允许您单独处理挂载的不同阶段(处理超级块、获取有关文件系统的信息、挂载、附加到挂载点),这些阶段之前是使用常见的 mount() 系统调用执行的。 单独的调用提供了执行更复杂的安装场景和执行单独操作的能力,例如重新配置超级块、启用选项、更改安装点以及移动到不同的命名空间。 此外,单独处理可以让您准确判断错误代码输出的原因,并为多层文件系统设置多个源,例如overlayfs;
    • 异步 I/O io_uring 接口中添加了新操作 IORING_OP_SYNC_FILE_RANGE,该操作执行相当于系统调用的操作 同步文件范围(),并且还实现了向 io_uring 注册 eventfd 并接收有关操作完成的通知的功能;
    • 对于CIFS文件系统,添加了FIEMAP ioctl,提供高效的范围映射,以及对SEEK_DATA和SEEK_HOLE模式的支持;
    • 在FUSE子系统中 建议的 用于管理数据缓存的API;
    • Btrfs 优化了 qgroups 实现,提高了具有多个硬链接的文件的 fsync 执行速度。 数据完整性检查代码已得到改进,现在在将数据刷新到磁盘之前考虑到 RAM 中信息可能受到的损坏;
    • CEPH增加了对通过NFS导出快照的支持;
    • 改进了“软”模式下 NFSv4 挂载的实现(“软”模式下如果访问服务器出错,调用立即返回错误代码,“硬”模式下直到 FS 挂载后才给出控制)可用性或超时已恢复)。 新版本提供了更准确的超时处理、更快的崩溃恢复以及新的“softerr”挂载选项,允许您更改发生超时时返回的错误代码(ETIMEDOUT);
    • nfsdcld API 旨在跟踪 NFS 客户端的状态,允许 NFS 服务器在重新启动时正确跟踪客户端的状态。 因此,nfsdcld 守护进程现在可以充当 nfsdcltrack 处理程序;
    • 对于自动飞行服务 添加 模拟文件中的字节范围锁(字节范围锁定);
  • 虚拟化和安全
    • 已经完成了消除内核中允许从可写反射内存区域执行代码的位置的工作,从而可以阻止攻击期间可能被利用的潜在漏洞;
    • 添加了新的内核命令行参数“mitigations=”,提供了一种简化的方法来控制某些技术的启用,以防止与 CPU 上指令的推测执行相关的漏洞。 传递“mitigations=off”将禁用所有现有方法,默认模式“mitigations=auto”启用保护但不影响超线程的使用。 如果保护方法需要,“mitigations=auto,nosmt”模式还会禁用超线程。
    • 添加者 支持符合 GOST R 34.10-2012(RFC 7091、ISO/IEC 14888-3)的电子数字签名, 由开发 来自 Basalt SPO 的维塔利·奇库诺夫 (Vitaly Chikunov)。 在本机 TLS 实现中添加了对 AES128-CCM 的支持。 crypto_simd模块添加了对AEAD算法的支持;
    • 在Kconfig中 添加 一个单独的“内核强化”部分,其中包含增强内核保护的选项。 目前,新部分仅包含启用 GCC 检查增强插件的设置;
    • 内核代码差不多 发表 来自 switch 中的非中断 case 语句(每个 case 块后不返回或中断)。 还需要修复 32 个使用 switch 的情况中的 2311 个,之后构建内核时可以使用“-Wimplicit-fallthrough”模式;
    • 对于PowerPC架构,已经实现了对硬件机制的支持,以限制对用户空间中数据的不需要的内核访问路径;
    • 添加了阻止代码 攻击 Intel 处理器中的 MDS(微架构数据采样)类。 您可以通过SysFS变量“/sys/devices/system/cpu/vulnerability/mds”检查系统是否存在漏洞。 可用的 两种保护模式:完全模式(需要更新微代码)和旁路模式(当控制权转移到用户空间或客户系统时,不能完全保证清除 CPU 缓冲区)。 为了控制保护模式,内核中添加了“mds=”参数,该参数可以取值“full”、“full,nosmt”(+禁用超线程)和“off”;
    • 在x86-64系统上,为IRQ、调试机制和异常处理程序添加了“堆栈保护页”保护,其本质是将边界处的内存页替换为堆栈,访问时会生成一个异常(页面错误);
    • 添加了 sysctl 设置 vm.unprivileged_userfaultfd,控制非特权进程使用 userfaultfd() 系统调用的能力;
  • 网络子系统
    • 添加者 IPv6 网关支持 IPv4 路由。 例如,您现在可以指定路由规则,例如“ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0”;
    • 对于 ICMPv6,实现了 ioctl 调用 icmp_echo_ignore_anycast 和 icmp_echo_ignore_multicast 以忽略任意播的 ICMP ECHO 和
      多播地址。 添加者 限制 ICMPv6 数据包处理强度的能力;

    • 对于 BATMAN(移动自组织网络的更好方法)网格协议,该协议允许创建分散的网络,其中每个节点通过相邻节点连接, 添加 支持从多播到单播的广播,以及通过 sysfs 进行控制的能力;
    • 在ethtool中 添加 新的快速链路断开参数,可让您减少接收有关 1000BaseT 链路断开事件的信息所需的时间(正常情况下延迟最多为 750 毫秒);
    • 出现了 机会 将 Foo-Over-UDP 隧道绑定到特定地址、网络接口或套接字(以前的绑定仅通过通用掩码完成);
    • 在无线堆栈中 提供 实施处理程序的可能性
      用户空间的OWE(机会无线加密);

    • 在Netfilter中,nat链中添加了对inet地址族的支持(例如,现在可以使用一个转换规则来处理ipv4和ipv6,而无需分离ipv4和ipv6的规则);
    • 在网络链接中 添加 模式 strict:严格验证所有消息和属性的正确性,不允许超出属性的预期大小,并且禁止在消息末尾添加额外的数据;
  • 内存和系统服务
    • CLONE_PIDFD标志已被添加到clone()系统调用中,当指定时,用创建的子进程标识的文件描述符“pidfd”将返回给父进程。 例如,该文件描述符可用于发送信号,而不必担心遇到竞争条件(发送信号后,目标PID可能会因进程终止而被释放并被另一个进程占用);
    • 对于 cgroups 的第二个版本,添加了冷冻机控制器功能,您可以使用该功能停止 cgroup 中的工作并暂时释放一些资源(CPU、I/O,甚至可能是内存)来执行其他任务。 管理是通过 cgroup 树中的 cgroup.freeze 和 cgroup.events 控制文件完成的。 cgroup.freeze 中的条目 1 冻结当前 cgroup 和所有子组中的进程。 由于冻结需要一些时间,因此额外提供了一个cgroup.events文件,通过该文件可以了解操作的完成情况;
    • 有担保 导出附加到 sysfs 中每个节点的内存属性,这使您可以从用户空间确定具有异构内存的系统中处理内存组的性质;
    • PSI(压力失速信息)子系统已得到改进,它允许您分析有关 cgroup 中某些任务或进程集接收各种资源(CPU、内存、I/O)的等待时间的信息。 与平均负载相比,使用 PSI,用户空间处理程序可以更准确地估计系统负载级别和减速模式。 新版本提供了对设置敏感度阈值的支持,并能够使用 poll() 调用来接收设置的阈值已在特定时间段内被触发的通知。 此功能允许 Android 在早期阶段监控内存短缺情况,识别问题根源并终止不重要的应用程序,而不会造成用户注意到的问题。 在压力测试时,基于 PSI 的内存消耗监控工具显示,与 vmPressure 统计数据相比,误报率减少了 10 倍;
    • 检查 BPF 程序的代码已经过优化,大型程序的检查速度提高了 20 倍。 优化使得 BPF 程序的大小限制从 4096 条指令提高到一百万条指令;
    • 对于 BPF 程序 由...提供 访问全局数据的能力,允许您在程序中定义全局变量和常量;
    • 额外 API,它允许您控制 BPF 程序中 sysctl 参数的更改;
    • 针对MIPS32架构,已经实现了eBPF虚拟机的JIT编译器;
    • 对于32位PowerPC架构,增加了对KASan(内核地址清理器)调试工具的支持,这有助于识别使用内存时的错误;
    • 在 x86-64 系统上,取消了在内核崩溃 (crash-dump) 期间将状态转储放置在 896MB 以上内存区域的限制;
    • 对于s390架构,实现了对内核地址空间随机化(KASLR)的支持以及通过kexec_file_load()加载内核时验证数字签名的能力;
    • 针对PA-RISC架构,增加了对内核调试器(KGDB)、跳转标记和kprobes的支持;
  • Оборудование
    • 包含驱动程序 利马 用于 Mali 400/450 GPU,用于许多基于 ARM 架构的旧芯片。 对于较新的 Mali GPU,添加了 Panfrost 驱动程序,支持基于 Midgard(Mali-T6xx、Mali-T7xx、Mali-T8xx)和 Bifrost(Mali G3x、G5x、G7x)微架构的芯片;
    • 添加了对使用开放固件的音频设备的支持 声音开放固件 (SOF)。 尽管有开放驱动程序可用,但声音芯片的固件代码仍然保持封闭并以二进制形式提供。 Sound Open Firmware项目是由Intel开发的,旨在为与音频处理相关的DSP芯片创建开放固件(Google后来也加入了开发)。 目前,该项目已准备好发现Intel Baytrail、CherryTrail、Broadwell、ApolloLake、GeminiLake、CannonLake和IceLake平台声音芯片的固件;
    • Intel DRM 驱动程序 (i915) 增加了对芯片的支持
      埃尔克哈特莱克(Gen11)。 添加了 Comet Lake (Gen9) 芯片的 PCI ID。 对 Icelake 芯片的支持已经稳定,还添加了额外的 PCI 设备标识符。
      已包含
      通过 mmio 执行写入操作时在视频内存中的两个缓冲区之间进行异步切换(异步翻转)的模式,这显着提高了某些 3D 应用程序的性能(例如,3DMark Ice Storm 测试中的性能提高了 300-400%)。 增加了技术支持 高清CP2.2 (高带宽数字内容保护)用于对通过 HDMI 传输的视频信号进行加密;

    • Vega20 GPU 的 amdgpu 驱动程序 添加 对 RAS(可靠性、可用性、可服务性)的支持以及对 SMU 11 子系统的实验性支持,该子系统取代了 Powerplay 技术。 对于 GPU Vega12 添加 支持 BACO 模式(总线活动、芯片关闭)。 添加了对 XGMI 的初始支持,XGMI 是一种用于 GPU 互连的高速总线 (PCIe 4.0)。 在 amdkfd 驱动程序中添加了基于 Polaris10 GPU 的卡缺失的标识符;
    • Nouveau 驱动程序增加了对基于 NVIDIA Turing 117 芯片组(TU117,用于 GeForce GTX 1650)的主板的支持。 在
      配置文件 添加 设置禁用当前版本的 libdrm 中不再使用的过时函数;

    • DRM API 和 amdgpu 驱动程序中添加了对“时间线”同步对象的支持,使您无需进行经典阻止。
    • VirtualBox 虚拟 GPU 的 vboxvideo 驱动程序已从 staging 分支移至主结构;
    • 添加了GFX SoC ASPEED芯片的aspeed驱动程序;
    • 添加了对 ARM SoC 和 Intel Agilex (SoCFPGA)、NXP i.MX8MM、Allwinner (RerVision H3-DVK (H3)、Oceanic 5205 5inMFD、、Beelink GS2 (H6)、Orange Pi 3 (H6))、Rockchip (Orange Pi) 的支持)板 RK3399、Nanopi NEO4、Veyron-Mighty Chromebook)、Amlogic:SEI Robotics SEI510、
      ST Micro(stm32mp157a、stm32mp157c)、恩智浦(
      埃克曼 ci4x10 (i.MX6DL),

      i.MX8MM EVK(i.MX8MM),

      ZII i.MX7 RPU2(i.MX7),

      ZII SPB4(VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      工房光环 (i.MX50),

      Menlosystems M53 (i.MX53))、NVIDIA Jetson Nano (Tegra T210)。

同时,拉丁美洲自由软件基金会 形成
选项 完全免费的内核5.2 - linux-libre 5.2-gnu,清除包含非自由组件或代码部分的固件和驱动程序元素,其范围由制造商限制。 新版本包括文件上传
声音开放固件。 禁用在驱动程序中加载 blob
mt7615、rtw88、rtw8822b、rtw8822c、btmtksdio、iqs5xx、ishtp 和 ucsi_ccg。 ixp4xx、imx-sdma、amdgpu、nouveau 和 goya 驱动程序和子系统以及微代码文档中的 blob 清理代码已更新。 由于删除而停止清理 r8822be 驱动程序中的斑点。

来源: opennet.ru

添加评论