Cloud Kernel SIG 季度动态:ANCK 5.10/6.6 新版本发布,主线适配 Sw8A&RSIC-V 新平台
Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。
01、SIG 整体进展
发布 ANCK 6.6-004 版本。
发布 ANCK 5.10-019 版本。
发布 ANCK 5.10-019.1 小版本。
ANCK 6.6 支持 Sw8A、RISC-V 新平台。
02、ANCK 6.6-004 版本更新
发布时间: 2025-06-30
发布链接:
Anolis OS 23:https://mirrors.openanolis.cn/anolis/23/os/
调度
回合社区 sched_ext 特性。
支持 jbd2 锁代理执行特性。
EEVDF 稳定性增强。
内存
支持快速 OOM 特性,避免内存回收时系统夯住。
支持页表页回收特性,避免过多的空闲页表页占用内存。
支持 slab lockless shrink 特性,避免 shrinker lock 竞争提升 slab shrinker 并发性能。
支持 Async fork 特性优化 fork 系统调用性能。
支持 duptext 特性,并且 duptext 扩展支持 large folio。
修复 Arm64 contpte 页表设置的问题。
mmap() 支持 THP align 特性,提升 THP 分配成功率。
修复 kfence 释放路径错误的 kence page 判断问题。
修复 MGLRU 的 softlockup 问题。
修复文件页 large folio 控制超过文件 size 的问题。
修复文件页 large folio 分配的 softlockup 问题。
修复 THP 统计错误问题。
修复 shmem large folio 处理和匿名页 large folio 处理的问题。
网络
回合 ANCK 5.10 SMC 自研补丁,包括 eRDMA 支持、SMCv2 支持、CQ 优化、sysctl 优化、各类稳定性问题修复、Write-with-Imm 特性、link/lgr 数量优化、抓包、内存水位限制等特性。
回合上游 virtio-net xdp zerocopy 特性。
BPF
回合社区 sched_ext 的依赖特性,例如:
支持 bpf timer 创建 BPF_F_TIMER_CPU_PIN。
对 struct_ops 入参支持 __nullable 配置。
bpf skel 支持直接访问 struct_ops maps 的成员。
支持持有 spinlock 或 rculock 时调用子程序。
支持 bits 迭代器。
存储
支持 ext4 large folio EXPERIMENTAL 特性。large folio 对 buffered IO 有较大性能提升,该特性基于对 ext4 buffered IO 支持 iomap 方案改造,目前标记为 EXPERIMENTAL 且默认不开启,需要通过 -o buffered_iomap 开启试用。由于社区主线最终接收的方案基于 buffer head,因此后续版本将切回到主线的 buffer head 方案。
修改 d2c 时延统计问题。由于社区主线内核演进,QUEUE_FLAG_STATS 默认不再设置,因此 d2c 时延统计依赖的 io_start_time_ns 始终为 0。经测试确认,高速设备场景调用 ktime_get_ns() 将带来 ~2% 的极限 IOPS 影响,因此新增一个 sysfs 接口用于控制该统计的开启。
ext4、nfs 等社区 stable 补丁同步。
驱动
amdgpu 驱动回合 CVE 修复补丁,增强稳定性。
NVMe 驱动支持 Reservation 以及云盘激活功能。
NVMe 驱动回合一些上游修复补丁,增强稳定性。
hns3 同步上游,增强稳定性。
升级 hct 驱动模块,以支持 HCT2.1 版本。
体系结构
海光平台
修复在 2g 和 c86-3g 上 CSV1 和 CSV2 由于 bios 过老而无法启动的问题。
增加用于海光 CSV3 的 unpin 接口,以便快速释放残留共享页;使用红黑树增强共享页管理。
Arm 平台
支持飞腾 DMA 优化特性。
支持飞腾平台用户态可以修改 KVM 系统寄存器。
修复 CPPC ioremap 问题。
修复 GIC v3 its 空指针等问题。
申威平台
申威 8A 平台首次系统级适配进展:
首次针对申威 8A 平台的适配工作中,重点在于建立其基础运行环境并解决兼容性问题。核心工作包括:
对申威 8A 处理器指令集的基础支持,确保系统能够正确识别并执行处理器核心指令。
对 IOMMU 进行初步适配,以实现 I/O 内存的隔离与管理,保障设备的安全与稳定。
适配中断控制器,确保系统能够高效、准确地处理来自硬件的中断请求。
对 ACPI 进行基础兼容性处理,以支持平台的电源管理与基本配置功能。
完成 PCIe 总线接口的适配,保障系统与外部高速设备的兼容性和基础数据传输。
适配 platform 驱动,确保核心平台功能的正常运行。
修复部分 ftrace 兼容性问题,提升了平台的调试能力。
目前,申威 8A 平台已成功完成 bring-up。
龙芯平台
新特性
新增多版本 ABI 兼容方案支持。
增加 objtool 的支持。
增加 livepatch 功能支持。
增加 kaptch 功能支持。
增加 IGC 网卡驱动支持。
增加 GPIO_PCA953X 驱动支持。
增加 SCHED_MC 调度支持。
增加 PWM 驱动支持。
增加 TPM 驱动支持。
增加 2K3000 GMAC 驱动支持。
增加 CPU 核数上限至 2048 个。
增加 3C6000/3D6000 虚拟化支持。
增加硬件 PTW 支持。
重要 Bugfix
修复编译错误及警告问题。
修复独立显卡显示异常问题。
修复查看大页内存使用情况时时崩溃问题。
修复 io 数据错误问题。
修复 io_uring 测试失败问题。
修复使用自愿抢占后系统崩溃问题。
修正使用大页内存时异常崩溃问题。
修复 IOMMU 模块使用异常问题,提升健壮性。
RISC-V
支持算能算丰 SG2042 平台,支持 sopho PCIE MMC 等驱动。
支持 AIA 扩展。
支持 riscv spinlock。
03、ANCK 5.10-019 版本更新
发布时间: 2025-05-22
发布链接:
调度
回合 cluster 调度特性。
支持为根组的不可移动线程配置 bvt。
core sched 支持对每个 cookie 独立配置特殊属性:
可与不带 cookie 的普通任务共享 core。
防止负载均衡自动聚拢相同 cookie 的任务,呈现打散在不同 core 的效果。
内存
kfence 修复稳定性问题
代码大页 THP 计数问题修复。
mmap() 支持 THP 对齐地址空间分配。
virtio-mem 支持 memmap_on_memory 特性,帮助容器内存快速扩缩容。
其它内存 CVE 补丁合入。
网络
smc:
修复 link group 和 link use-after-free 问题。
修复容器场景 smc-r 设备查找失败问题。
存储
erofs:
回合了若干主线的 erofs 文件系统的修复。
新增文件备份挂载和 48 位布局支持。
添加压缩文件的 sub-page 块支持。
ext4、 block、 blk-mq、io_uring 等组件的主线 stable 分支补丁回合。
新增 virtio-blk passthrough 特性,为 virtio-blk 设备添加直通能力支持:
为每个 virtio-blk 块设备新增一个通用字符设备,命名为 /dev/vdXc0 ,允许用户使用 io_uring 框架提供的 uring_cmd 方式,直接向 virtio-blk 驱动层发送读写命令。
基于上述能力,新增 virtio-blk 设备的双向命令支持,基于同一个 sector 基址,可以在向量类读写中,指定写缓冲区个数和读缓冲区个数,实现一条 I/O 指令同时完成读、写操作(目前仅支持先写后读)
基于 virtio-blk,提供一种 virtio_ring 的扩展,命名为 ring_pair。此时 virtio-blk 的每个请求硬件队列实际对应两个 virtio_ring 队列,分别为请求队列(SQ)和完成队列(CQ)。请求下发后,驱动可以主动回收已经下发的 I/O 命令所在的 slot,继续下发其它请求。 I/O 完成时,由后端回填 CQ,驱动端负责响应收割。该特性需要后端支持 ring_pair 这种运行方式,且当前仅支持 vring split_queue + Indirect descriptor 模式。
驱动
NVMe 驱动支持批量处理完成的 polled IO 命令。
修复 SCSI 海思 sas 驱动以及 libsas 的大量问题。
回合 PCIe 驱动 bugfix 补丁,修复空间大小计算错误、root bus 分配等问题。
04、ANCK 5.10-019.1 小版本更新
发布时间: 2025-06-25
发布链接:
重要 Bug Fixes
virtio-blk passthrough 特性,默认隐藏了通用字符设备
修复 SMC 模块中,特殊情况下 clc decline 请求无法发出的问题
05、ANCK 6.6 新增支持平台
ANCK 6.6 初步支持 RISC-V 算能算丰 SG2042 平台。
ANCK 6.6 初步支持 Sw8A 平台。
06、ANCK 新增特性
ANCK 6.6 支持 AMD 平台 PQoS ABMC 特性
ANCK-6.6 支持 AMD PQoS ABMC(Assignable Bandwidth Monitoring Counters) 特性,允许用户为特定 RMID 分配硬件计数器,以持续监控带宽,直到用户手动取消分配,从而避免了计数器在监控期间被重置的问题。
virtio-blk 支持 ring pair 特性
ANCK-5.10 virtio-blk 驱动中引入 ring pair 特性。
在 virtio-blk 驱动内,提供一种 virtio_ring 的扩展,命名为 ring_pair。利用两个 virtqueue 队列实现一个请求通道,只要后端读取了请求队列的请求,前端就可以回收并继续下发。在请求真正完成时,在完成队列进行请求收割和 DMA 映射的解除等操作。 允许位于 virtio_ring 的请求无需等待完成后释放 slot 和再次下发,可以在后端延迟较大、突发读写等场景下增大 inflight 请求的并发,提供更大的吞吐量。
具体如下:
1)virtio-blk 的每个请求硬件队列实际对应两个 virtio_ring 队列,分别为请求队列(SQ)和完成队列(CQ)。请求下发后,驱动可以主动回收已经下发的 I/O 命令所在的 slot,继续下发其它请求。I/O 完成时,由后端回填 CQ,驱动端负责响应收割。下发请求时,out_hdr 的 ioprio 字段会被复用来存储 tag;请求完成时,后端会将 tag 存储在 in_len 字段返回,可以根据该字段找到请求对应的 request 来执行 end_io 操作。
2)在 blk-mq 层提供“动态”请求特性:通常地,request 在 blk-mq 层通过静态预分配得到,现在提供一种动态请求分配模式,在 request 队列深度很大的情况下,仅静态初始化 bitmap 等结构,request 结构体是在请求 tag 真正分配后再申请对应内存空间,并在请求完成后释放。
3)该特性需要后端支持 ring_pair 这种运行方式,且当前仅支持 vring split_queue + Indirect descriptor 模式。
更多信息请参考该链接:https://gitee.com/anolis/cloud-kernel/pulls/4799
相关链接:
Cloud Kernel SIG 主页:https://openanolis.cn/sig/Cloud-Kernel
版权声明: 本文为 InfoQ 作者【OpenAnolis小助手】的原创文章。
原文链接:【http://xie.infoq.cn/article/58f97a9deb0cf4eb0eb2d3c32】。文章转载请联系作者。
评论