写点什么

Cloud Kernel SIG 双月动态:ANCK 发布 4.19 & 6.6 新版本,存储、内存、调度等新特性支持

  • 2024-07-02
    陕西
  • 本文字数:7687 字

    阅读完需:约 25 分钟

Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。

本月度动态综合汇总了 5 月和 4 月双月项目动态:

01 SIG 整体进展

5 月

1. ANCK-6.6 release 6.6.25-002。

2. ANCK-4.19 release 4.19.91-028。

4 月

1. 5.10 新增 Intel、海光、sw64 相关特性支持。

2. 6.6 新增海光相关特性支持。

3. Cloud Kernel CI 门禁增强。

02 具体进展

5 月

2.1 ANCK 发布 6.6.25-002 版本

2.1.1 新特性

2.1.1.1 社区特性

存储

  • EROFS 支持 subpage 压缩块。

支持块大小不等于页大小的压缩镜像,例如 4k 的块大小压缩镜像用在 64K 页面内核中。

  • 支持 fscache/cachefiles 的按需加载模式下的故障恢复特性。

支持 fscache/cachefiles 的按需加载模式下的故障恢复特性,从而支持 erofs 基于 fscache 的容器镜像按需加载方案的故障恢复特性,确保 daemon 在故障恢复期间,容器内对容器镜像的正常访问不受影响。

架构

  • ARM64 平台下 MPAM 特性支持。

ARM MPAM 硬件特性提供了对 Cache 和内存带宽等资源进行资源隔离和监控。通过引入 ARM 社区 MPAM 驱动和 resctrl 文件系统重构,提供了 MPAM 硬件特性的用户态接口支持,在 OS 层实现了 CPU 和进程粒度的 Cache 和内存带宽隔离。

  • 添加 ARM64 平台下 SDEI watchdog 支持。

在 ARM64 平台引入了基于 SDEI 的 NMI watchdog,实现 Linux 内核 hardlockup 检测机制。

2.1.1.2 龙蜥自研

存储

1. 提供 userns 安全增强的 sysctl 接口。

2. 提供 sysctl 接口用于控制 userns 嵌套深度、以及非特权用户新增 userns 权限。

3. 支持 vring_force_dma_api 启动参数。

4. 针对某些要求 vring_use_dma_api() 无条件返回 true 的场景,提供 vring_force_dma_api 启动参数;如果 virtio_ring 是以模块的形式,则为 virtio_ring.vring_force_dma_api=1。

5.cgroup v1 支持 iocost 特性。

6. iocost 是 Linux 社区主线推荐的 IO 权重隔离特性,但社区主线仅在 cgroup v2 中支持;我们在 cgroup v1 下支持 iocost 特性使能,同时提供 cost.stat 接口用于 iocost 过程调度的观测。

7. cgroup v1 支持 writeback IO 限流特性。

8. 大多数业务场景使用 buffer IO,这意味着下发到设备的 IO 实际由后台 writeback 线程完成。社区主线内核仅在 cgroup v2 中支持 writeback IO 限流;我们通过构建一棵 radix tree 将 cgroup v1 下 memcg 和 blkcg 进行关联,从而实现 cgroup v1 下的 writeback IO 限流。

9. 支持 enable_context_readahead 接口。

10. 内核中 context readahead 是一种启发式算法,在某些随机性非常高的场景会引入额外的无效预读,进行影响业务性能。我们提供 enable_context_readahead 接口可用于显示关闭 context readahead。为了保持与主线内容的行为兼容,该接口默认为 1,即开启 context readahead。

11. ext4 和 jbd2 特性增强。

12. 针对 ext4 和 jbd2 在业务场景下遇到的问题进行增强,主要包括:hardlink 约束放宽,jbd2 后台 checkpoint,jbd2 慢事务追踪,jbd2 统计信息增强,优化 jbd2 buffer copy-out 等。

13. 支持 IO hang 检测。

14. IO hang 是指在系统运行过程中,因某些 IO 耗时过长而引起的系统不稳定甚至宕机。我们通过扩展核心数据结构,在较小的系统开销下,提供快速定位并检测 IO hang 的能力。

15. 支持 percpu sqthread 和 us 级的 sqthread submit idle。

16. io_uring sqthread 的 idle 状态判断逻辑是毫秒级的,但对于一些低负载情况下,不希望该线程抢占过多 cpu 资源,因此提供了 us 级的 idle 判断能力;增加了 percpu sqthread 的能力,允许线程根据 cpu 号,绑定至特定的 sqthread 上,sqthread 将在各个 io_uring 上下文间切换,减少了进程上下文切换,实现 sqthread 共享。

17. blk-throtling 统计增强。

18. 在容器等业务场景下,希望提供更多的 io 相关的统计信息。提供了对特定 cgroup 的 IO 延迟和 IO 完成量的统计,添加到 cgroup V1 和 cgroup V2 中;在 cgorupV1 中添加 层次化 throtling 支持。

19. TCMU 读写性能优化。

20. 利用增加 ioctl 减少内存拷贝次数、去除锁操作等操作提升 TCMU 读写性能,并且支持相关打开与关闭的配置。

21. tcm loop 设备支持 2M 大 IO。

22. 在某些用户场景,我们需要写入 2M 大 IO 且期望不被拆分。但在最坏的情况下,每个 bio_vec 仅包含 4k 数据,无法满足要求。因此我们将 BIO_MAX_PAGES 回退到 512,同时支持 tcm loop 设备可配置 sg_tablesize 参数,以支持 2M 大 IO 不拆分场景。

23. 提供一种受控的 fuse 挂载点跨 mount namespace 传播的能力。

24. 支持非特权 sidecar 容器中的 fuse 挂载点传播到 app 容器内,从而提供了一种后端存储通过 fuse 接入云原生容器的存储解决方案。

25. 支持 fuse 请求重发。

26. fuse daemon 在故障恢复之后,可以请求对故障期间的请求进行重发。

内存

1. 对上游 KFENCE 内核内存污染检测功能的增强。

2. 内核及驱动的内存污染问题排查一直非常棘手,尤其是在线上的场景。龙蜥基于上游 KFENCE 采样式检查的特性,自研了动态开关、全量检测、order-0 page 检测等功能,确保在支持的内存类型范围内几乎 100% 抓到根因。

调度

1. 支持调度统计增强与容器资源视图增强。

2. 调度统计增强:支持 cgroup 级别的调度延迟,平均负载,运行时间,排队时间等统计数据。

3. 容器资源视图增强:提供了容器资源视图功能的相关接口,实现对容器资源的可见性增强,让容器内进程看到的 cpu、memory 等资源信息为 cgroup 配置的资源信息,而非宿主机的信息。

4. 支持基于 acpu 的算力稳定特性。

5. 通过统计任务在运行时 HT 对端空闲/繁忙的时间,来校准任务使用的算力,使任务在每个调度周期都获得相对稳定的算力,仅限于在使用 core sched 特性的情况下使用。

6. 支持 cpu HT 对端运行时间统计特性。

7. HT 对端有其他任务运行时会影响任务的计算性能,该特性可以统计任务及 cgroup 在运行时 HT 对端运行时间以及空闲时间。

8. cpu burst 特性增强。

9. 上游内核的 cpu burst 仅允许最多一倍 quota 的 cpu 资源突发使用,龙蜥内核解除了这个限制,允许将 burst 设置为任意值,从而在更长远的尺度上改善性能。

架构

1. 支持 CMN PMU 的 perf metric 功能。

2. CMN PMU 驱动提供了很多 PMU 事件,这些事件可以通过一定的计算方式得到如 slc miss rate 等指标,将这些指标采集能力支持到 perf 工具中,以降低用户分析性能问题的门槛。

3. Arm64 支持线性区动态拆分并解决 kfence 动态使能和内存 RAS 的问题。

4. 在兼具 rodata、kfence、crashkernel 和内存错误隔离等特性的同时支持内核线性区页表的块映射和连续映射,减少地址翻译阶段 tlb miss 率,从而提高了 arm64 服务器在运行时的性能。

2.1.1.3 其他

1. kconfig 调整。

2. 联系社区众理事和参与者,采纳来自不同行业专家的意见和建议,充分考虑系统兼容性、稳定性以及易用性,对 kconfig 进行重新规划和决策。

2.1.2 处理器及平台支持

  • 支持龙芯平台。

  • 龙芯架构包括基础架构部分和向量指令、虚拟化、二进制翻译等扩展部分,近 2000 条指令。

  • 支持龙芯 3A5000、3A6000、3C5000、3D5000 等多个基于 loongarch 架构设计的 CPU。

  • 增加对上述 CPU 配套的 7A1000/7A2000 桥片,以及桥片中的各种外设 I/O 驱动和显示设备的支持。

  • 增加对 Loongarch 2K0500BMC 驱动的支持。

  • 在支持 Loongarch 基础架构的基础上,进一步增加对向量指令、虚拟化、二进制翻译等扩展功能的支持。

  • 增加对 ebpf、 perf、ftrace、kdump、uprobe、kprobe、kretprobes 等调测工具的支持。

  • 增加对 livepatch 的支持。

  • 支持 intel GNR/SRF 平台。

  • 支持新的 CPU 拓扑(4 cores share L2)。

  • 支持 AMX2.0/AVX 新指令。

  • 支持 Code SW Prefetch 新指令。

  • 支持 GNR/SRF PM 特性。

  • 支持 GNR/SRF RAS 特性。

  • 支持 GNR/SRF PMU 特性。

  • 支持 DSA2.0/IAA/QAT 等加速器特性。

  • 支持 IOMMU/Vt-d PMU 特性。

  • 支持 RDT 新特性。

  • 支持 LAM/LASS 新特性。

  • 支持兆芯平台支持。

  • 全面支持兆芯 CPU 内核特性:支持全新 CPU 拓扑,支持全新指令集 ZXPAUSE,支持 PMU,HDAC,GPIO,温度监控等。

  • 兆芯安全特性支持:支持兆芯 SM2,SM3,SM4 算法以及兆芯 AES,SHA 算法。

  • 支持海光 CPU。

  • 新增海光四号支持。

  • 全面支持海光四号处理器(749X、748X、34XX)的内核特性。包括全新 CPU 拓扑、x2APIC、微码加载、MCA RAS 功能、DDR5、SR-IOV、QoS、L3 Perf/PMU 以及温度监控等。

  • 海光安全特性支持。

  • 新增 CSV/CSV2 机密虚拟机启动/迁移、机密容器支持。新增 CSV3 安全虚拟机,支持热迁移功能,支持硬件保护虚拟机页表,硬件隔离虚拟机内存,主机 VMM 无法读写虚拟机内存。新增海光密码学加速器国密支持 新增海光 TPM/TCM/TDM/TPCM 可信功能支持 新增海光 TKM 密钥管理虚拟化以及隔离功能支持 新增海光加速卡 DCU 的虚拟机直通支持。

  • 支持飞腾服务器平台。

  • 全面支持飞腾服务器芯片(FT2000/64、S2500)的各类特性,包括全新微处理器核心、CPU 跨路中断处理、Kdump 功能、IOMMU 透访、PCIe 5.0、DDR5、C2C 等技术特性,以及飞腾服务器芯片平台配合飞腾自研 BMC 芯片使用时的 KVM 显示功能。

  • 支持芯启源多款网卡。

  • 支持多 PF 特性网卡, 涵盖 GX 系列 2x10G,2x25G 及 4x10G 三款网卡。

  • 网讯 txgbe、ngbe 驱动功能增强

  • txgbe、ngbe 驱动功能增强,包括 ethtool 支持、flow control 支持。

2.1.3 设备驱动

  • 添加 dwc_rootport PMU 驱动

  • 添加 dwc_rootport PMU 驱动,使 perf 工具可以采集到硬件支持的 PMU 事件,用于分析 PCIe rootport 性能。

  • 支持澜起 Mont-TSSE 高速加密算法加速器。

  • PCIe 5.0 x8 接口。

  • 基于 SR-IOV 的虚拟化,16 个 VF,每个 VF 支持 4 个环对。

  • 32 个对称和 6 个非对称加密加速引擎。

  • 总处理吞吐量高达 200Gbps。

  • 国际主流国密算法:SM2/3/4、AES、SHA256/384/512。

  • 兆芯 Serial ATA IDE 模式支持。

  • 使用这个驱动程序,Serial ATA 设备可以在兆芯处理器上以 IDE 模式运行。

  • 支持 QAT intree 驱动。

  • 回合上游针对 Intel QAT 硬件加速器 intree 驱动。

2.1.4 重要 Bug Fix

  • 修复 fuse 在某些配置模式下不兼容 file handle 但未显式声明造成的兼容性问题。(PR#3008)

  • 修复兆芯 KH-40000 DMA 写入无法保序问题。(PR#2966)

  • 修复 USB 驱动从 vfio-pci 卸载 UHCI 时的内核空指针问题。(PR#2693)

  • 修复 RTC 驱动在某些兆芯 SOC 上设置 RTC 时间时延迟 500ms 的问题。(PR#2696)

  • 修复兆芯 CPU CRC32C 指令低性能问题。(PR#2694)

  • 修复主机内核 SME 打开时,initrd 出现加解密异常问题。(PR#2917)

  • 一些增强海光 CSV/CSV2 可用性和稳定性的修复补丁。(PR#2914)

  • 修复内存管理中 THP 分配以及内存页迁移中的相关 BUG。(PR#2983)

  • 修复某些海光 C86-4G CPU 无法正确设置 psp_master 的问题。(PR#3174)

  • 修复 host KVM 运行状态加密虚拟机时存在的 GHCB 页内存泄漏问题。(PR#2975)

  • 删除海光国密算法中,重复的 SM4-HS 定义。(PR#3052)

  • 限制仅在 cgroup v1 场景使能(比如 systemd 同时误配置 systemd.unified_cgroup_hierarchy=1 和 cgwb_v1),避免无意义的资源开销。(PR#3144)

  • 修复在 mount resctrl 文件系统时存在的潜在内存越界访问问题。(PR#3060)

注:每个 bug 都带有修复补丁的超链接,文末点击 SIG 主页-月报

2.1.5 已知问题

  • 当前版本的内核存在不适配龙芯平台低版本固件设备的问题。(BZ#9129)

  • 当前版本的内核飞腾服务器芯片 S5000C 配合飞腾自研 BMC 芯片使用时存在 KVM 显示异常的问题。(BZ#8989)

2.2 ANCK 发布 4.19.91-028 版本

2.2.1 新特性

  • 支持 EROFS 压缩格式以及 LZ4、LZMA、DEFLATE 等多种压缩算法。

  • 支持压缩数据去重、fragments、ztailpacking 等特性。

  • 支持 PCIe EDPC 特性,包含完整的 PCIe 错误抑制和隔离功能。

  • 当触发 fatal/non-fatal 错误后,利用 OS 的 PCIe DPC 和 EDR 功能,重新加载设备驱动并且保障驱动重载后 PCIe 网卡的配置空间不发生变化。增加 DPC 和 Hotplug 驱动的同步能力,设备不会因为 DPC 导致的 PCIe 链路错误而被热移除。

  • eBPF 相关特性支持。

  • 回合上游社区 eBPF 相关特性支持,包括 flow-dissector, per-cpu cgroup storage, sk lookup, sockmap, btf, line_info, func_info, tc_tunning, sysctl hook, bpf spinlock, global data, bounded loop, CO-RE 等高版本特性。

  • Group Identity 优化, 增强不同优先级任务的负载控制。

  • Group Identity 引入 ID_LOAD_BALAN、ID_ABSOLUTE_EXPEL 新特性,优化 ID_HIGHCLASS、ID_UNDERCLASS、ID_NORMAL 任务的负载控制。

  • CPU Isolation 特性增强。

  • 支持隔离未绑核线程。

2.2.2 设备驱动

  • 引入并使能浪潮信息 inspur drm 驱动。(PR#2212)

  • 支持 NVMe over TCP 高性能存储。(PR#1924)

  • 更新 NFP 网卡驱动,以支持多款芯启源网卡。(PR#2618)

注:每个 bug 都带有修复补丁的超链接,文末点击 SIG 主页-月报

2.2.3 处理器及平台支持

  • 海光

  • 海光四号 cpu 支持

  • 增加对海光四号 cpu 的基础支持,可以在海光四号平台正常运行内核

2.2.4 重要 Bug Fixes

  • Group Identity 模块相关 Bugfix。(PR#903,PR#1923,PR#2689)

  • 修复了在同时开启 cgroup writeback 和 lazytime 的场景下,僵尸 memcg/blkcg 残留的问题。(PR#2299)

  • 修复了动态 cpu 隔离接口的内存泄漏的问题。(PR#1923)

  • 修复了 CIFS 模块中客户端重连时出现链表损坏的问题。(PR#2689)

  • 修复了 nfsv3 客户端访问重启后服务端可能造成的服务端宕机问题。(PR#1590)

  • 修复 overlayfs 的权限问题。当所有 upperdir 与 lowerdir 处于同一文件系统且访问的文件/目录没有读权限,因之前优化 overlayfs 性能时存在逻辑判断错误,ovl_override_creds() 没有正确执行,从而实际执行权限没有提升到挂载者的权限,最终导致 copy up 需要读权限时报权限不足。(PR#1802)

  • 回合社区主线 k8s 挂载 tmpfs 文件系统的挂载点(newshm)目录安全下文(system_u:object_r:adjtime_t:s0)不正确, 导致启动容器启动失败的 bugfix。(PR#1773)

  • 回合社区 ext4 开启 bigalloc 特性下多个 bugfix,并极大优化该场景下在线扩容的耗时。(PR#1669)

  • ext4 文件系统相关 Bug Fixes。(PR#2279,PR#1056,PR#1064,PR#1066)

  • 修复 virtiofs 开启 dax page struct 延迟初始化后热插拔导致内核 hang 住问题。(PR#2105)

  • 修复 EROFS chunk 模式下 chunksize == blocksize 解析异常的问题。(PR#1987)

  • 修复了 blk-iocost 模块中写 blkio.cost.qos 时出现的 ABBA 死锁问题。(PR#2760)

  • 修复了 BDI 使用 STRICTLIMIT 特性且 BDI 份额为 0 时导致的回写性能下降问题。(PR#2507)

  • 回合社区主线 virtio-blk's dicard 命令会导致 kernel panic 的 bugfix。(PR#1794)

  • 回合社区主线 virtio-net 中大 vring size 可能会导致 cpu stall 的 bugfix。(PR#1702)

  • bond 网卡支持在所有子 slave 接口上广播 ARP。(PR#1061)

  • 修复第三方 mlx5_core 和 ice 驱动不能同时加载的问题。(PR#1083)

  • 支持 RDMA-CM 与 TCP 的 port range 隔离,以应对潜在的 RDMA port 和 TCP port 的冲突问题。(PR#2223)

  • 修复 irdma 驱动编译报错的问题。(PR#1851)

  • 修复 nvme 盘在创建 IO 队列失败时,内核使用的 IO 队列数与实际创建的 IO 队列数不匹配,引发内核访问空指针宕机的问题。(PR#1621)

  • 修复 nvme 盘插拔时会出现内核 hang 住的问题。(#PR2049)

  • 修复在仅支持 48-bit guest address width 的 IOMMU 硬件上,当开启 IOMMU 时, IOMMU 驱动 bug 导致系统 panic 的问题。问题原因在于驱动在处理这类 IOMMU 硬件时, IOMMU driver 混淆了 agaw 的概念。根据 spec 描述,agaw 应该是 mgaw 和 sagaw 的最小值,并不直接等于 magaw。(PR#1647)

  • 回合社区主线 iomap 修复 inline 数据支持 tail packing。(PR#1638)

  • 回合社区主线修复 megaraid_sas 驱动加载失败的问题。(PR#1711)

  • 修复 perf test attr 失败的问题。(PR#2075)

  • 修复 BPFILTER 模块会导致内核 crash 的问题。(PR#2017)

  • 修复了 bpf 中使用 bpf_probe_read_str() 后接分支判断时,其中一个分支卡死的问题。(PR#1922)

  • 修复了 Phytium S2500 和某些 BMC 芯片在短时间内频繁通信时,出现非预期的硬件信号 hang 死的问题。(PR#2604)

  • 增大 watchdog_thresh 的限制,以修复在压力测试下由于长循环出现的 soft lockup 误报问题。(PR#2287)

  • 修复了多进程同时启动 QEMU 加密虚拟机,在读写 PSP 寄存器时出现 Race Condition 导致 PSP hang 死的问题。(PR#2266)

注:每个 bug 都带有修复补丁的超链接,文末点击 SIG 主页-月报

2.2.5 已知问题

  • ANCK 4.19-028 内核在使用 eBPF 相关工具(如 cilium)时,可能会有兼容性问题。比如 cilium 会检测到对 bpf_skb_ecn_set_ce helper 时,而默认 __sk_buff->queue_mapping 字段可写(该特性尚未支持)而导致 eBPf 程序加载失败。

  • 修复版本: 该问题将在 ANCK 4.19-028.1 小版本内修复。

2.2.6 重要 CVE 列表

注:每个 CVE 都带有修复补丁的超链接,文末点击 SIG 主页-月报

4 月

2.1 5.10 开发分支

2.1.1 Intel 平台

  • 支持 iommu/vt-d PMU 特性。(PR#3053)

  • 支持 Intel RDT L2/L3 non-contiguous mask。(PR#3081)

  • 支持 iommu/vt-d hardware auto cache invalidation。(PR#3072)

注:以上每个 bug 都带有修复补丁的超链接,点击 SIG 主页-4月月报查看

2.1.2 海光平台

  • 支持海光 DCU 虚拟机直通。(PR#3069)

  • 修复 KVM 模块和 CPP 模块依赖问题。(PR#3059)

注:以上每个 bug 都带有修复补丁的超链接,点击 SIG 主页-4月月报查看

2.1.3 sw64 平台

  • sw 平台兼容性增强、相关 bug 修复。(PR#3084,PR#3076,PR#3070,PR#3049,PR#3024)

2.2 6.6 开发分支

2.2.1 海光平台

  • 支持海光 CSV3 live migration 功能。(PR#3004)

  • 支持海光 CSV resue asid 功能。(PR#2976)

  • 修复 Host KVM 运行 CSV 虚拟机时存在的内存泄漏问题。(PR#2975)

注:以上每个 bug 都带有修复补丁的超链接,文末点击 SIG 主页-4 月月报查看。

2.2.2 Cloud Kernel CI 门禁增强

  • Cloud Kernel 代码 Review 规则增强:CI 会以 PR 修改的文件为粒度,自动匹配各领域 Maintainer 进行 Code Review。只有当 PR 文件 Review 比例超过一定阈值后才能合入。不足时会 CI 会告警提示,当您遇到如下告警时可以通过主页的 SIG 群联系我们。 



03 重要议题

5 月

3.1 5.10 kABI:kAPI 策略

https://openanolis.cn/sig/Cloud-Kernel/doc/1103881637857825124 当前 ANCK 内核的版本号命名规则为 x.y.z-major.minor,例如 5.10.134-16 和 5.10.134-16.1,x.y.z 为 upstream 版本,major 版本是会合入大量 feature 和 bugfix 的主演进版本,minor 版本为只合入 bugfix 的版本。

3.1.1 Major 版本 kABI/kAPI 策略

龙蜥社区 ANCK-5.10 内核 major 版本之间不保证 kABI,只保证 kAPI,OOT 驱动需要在每个 major 版本都构建一次。

3.1.2 Minor 版本 kABI/kAPI 策略

龙蜥社区 ANCK-5.10 的 minor 版本会保证与 major 版本的 kABI 兼容,保证的白名单列表存储在 https://gitee.com/anolis/kabi-whitelist

相关链接:

Cloud Kernel SIG 主页:

https://openanolis.cn/sig/Cloud-Kernel

ANCK 6.6.25-002 版本链接:

https://openanolis.cn/sig/Cloud-Kernel/doc/1110610759523407946

ANCK 4.19.91-028 版本链接:

https://openanolis.cn/sig/Cloud-Kernel/doc/1109063898646173733

注:更多龙蜥 SIG 月度动态可点击这里查看。

发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2021-07-20 加入

OpenAnolis龙蜥社区 由国内外头部企业联合建立的操作系统开源社区。加入我们,一起打造面向未来的开源操作系统。 社区官网:openanolis.cn|微信公众号:OpenAnolis龙蜥

评论

发布
暂无评论
Cloud Kernel SIG 双月动态:ANCK 发布 4.19 & 6.6 新版本,存储、内存、调度等新特性支持_开源_OpenAnolis小助手_InfoQ写作社区