近日,中国电信天翼云基础架构技术团队与openEuler社区合作共研了全面支持aarch64及x86平台的libcareplus热补丁功能,并为欧拉社区贡献首个C++热补丁,实现主机崩溃在线修复。这是天翼云与欧拉社区联合开展关键技术创新取得的又一成果。
之前双方已成功研发了基于Libcareplus工具的Qemu热补丁功能。据天翼云科技有限公司副总经理兼首席技术官广小明在今年4月欧拉大会上介绍,Qemu热补丁功能使主机分批串行升级转变为并行同步升级,支撑现网补丁实施周期由月缩减到周,极大缩短了补丁的实施周期。
目前,新研热补丁工具普适性已得到极大提升,应用场景更广泛。而作为落地应用之一,天翼云为欧拉社区贡献的首个C++热补丁实现了云主机不用重启修复bug的能力,保障客户业务不中断,真正做到“为飞行中的飞机更换发动机”。
热补丁技术能够在不影响现网业务的情况下完成程序修复、适用于需要快速响应的场景,可谓是短小精悍。其中libcareplus热补丁技术更是集万千宠爱于一身。
据了解,ibcareplus热补丁技术是基于上游社区libcare独立发展的分支,由openEuler社区进行自主孵化,主要包括热补丁制作、补丁管理和补丁加/卸载等。相比于上游社区的libcare,libcareplus作为一个用户态进程热补丁框架,可以在不重启进程的情况下,支持对x86和aarch64架构中Linux系统上运行的目标进程进行热补丁操作。同时,libcareplus全面支持openEuler Qemu组件,支持函数级过滤、增量补丁、以及补丁文件解析等。
此次天翼云联合欧拉社区打造的libcareplus热补丁功能,可以应用于CVE漏洞修复,也可应用于不中断应用服务的紧急bug修复。
而且在合作研发过程中,天翼云基础架构技术团队还针对全局变量、局部静态变量等热补丁功能缺失的痛点进行深度研发。以前增加全局变量补丁会导致目标进程崩溃,只能采用分配内存等方式规避,经优化后增强了补丁代码的易修改和易维护性。这些功能成功适配多个主流Qemu版本,大大提高了libcareplus热补丁工具的适用性,为大规模批量应用奠定了坚实的基础。
同时在实际业务应用场景中,天翼云发现libcareplus在处理g++高版本生成的汇编文件时,在汇编文件比对和生成过程中,代码块结构划分异常,进而导致生成的汇编文件无法被as汇编器正确解析。天翼云联合欧拉社区针对该场景进行优化创新,基于欧拉社区libcareplus 扩展增加支持g++8特性,实现libcareplus支持C++软件热补丁制作及管理能力。
目前,该特性源码及单元测试用例已贡献到欧拉社区,并在欧拉社区虚拟化SIG组进行技术分享,相关特性已被欧拉社区收录至22.03 LTS发行版。
新研热补丁工具普适性增强,应用场景更加广泛
经过天翼云基础架构技术团队与openEuler社区共同优化后,libcareplus热补丁工具的应用场景得到了极大的扩展。
1.为单函数修改制作单个补丁
2.为多个函数修改制作多个补丁
3.新增函数
4.新增全局变量
5.TLS变量
6.冷热块重排
加速联创技术落地 天翼云为欧拉社区贡献首个C++热补丁
对很多用户来说,最怕在业务办理过程中突然中断、等待修机,但这种现象却不时发生。当欧拉系统下的云主机出现Qemu崩溃时,通常情况下该问题可以通过重启云主机冷补丁方式进行修复,但会带来客户业务出现短暂的中断。
为了解决线上部分Qemu crash导致云主机重启问题,中国电信天翼云弹性存储技术团队深入代码分析,发现原生librbd存在严重的代码bug。为了保证客户云上业务连续不中断,提供更高的云存储可用性,中国电信天翼云弹性存储技术团队通过不断反复验证和实验,利用libcareplus C++热补丁技术,librbd热补丁代码在不进行换行、不新增接口的情况下,通过代码数据结构,计算变量在内存中的地址偏移的方式对代码进行修复,最终在内存中更新librbd补丁,实现不需重启虚拟机打librbd热补丁能力,即云主机不用重启也能修复bug的能力,既保障客户云上业务连续性又大大缩短运维时间,真正做到了“为飞行中的飞机更换发动机”。
目前,该项热补丁技术成为了欧拉社区第一个C++热补丁,已在南宁、昌吉、兰州等资源池正式上线,部署超过10万台云主机,覆盖金融、医疗、政企等众多行业客户。
未来,天翼云将与欧拉开源社区持续合作,开展更多联合创新,包括在提升云主机资源利用效率方面,开展虚拟机高低优先级混部、容器在线离线混部创新;在可信云主机方面,开展机密计算创新;在DPU卸载上,开展分布式存储卸载、容器网络卸载创新;在云原生全栈方面,开展安全容器、KubeEdge 边云协同创新等。