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/