Linux 4.1内核热补丁成功实践

Linux 4.1内核热补丁成功实践

作者:UCloud内核团队 2019-01-16 10:33:41

云计算 我们详细介绍了进程cputime统计异常问题的完整分析和解决思路。该问题并非严重的宕机问题,但却可能会让用户对监控数据产生困惑,误认为可能机器负载太高需要加资源,问题的解决会避免产生不必要的开支。

 最开始公司运维同学反馈,个别宿主机上存在进程CPU峰值使用率异常的现象。而数万台机器中只出现了几例,也就是说万分之几的概率。监控产生的些小误差,不会造成宕机等严重后果,很容易就此被忽略了。

但我们考虑到这个异常转瞬即逝、并不易被察觉,可能还存在更多这样的机器,又或者现在正常将来又不正常,内核研发本能的好奇心让我们感到:此事必有蹊跷!于是追查下去。

 

 

 

 

问题现象

 

 

 

 

现象一:CPU监控非0即100%

该问题现象表现在Redis进程CPU监控的峰值时而100% 时而为0,有的甚至是几十分钟都为0,突发1秒100%后又变为0,如下图。

而从大量机器的统计规律看,这个现象在2.6.32 内核不存在,在4.1内核存在几例。2.6.32是我们较早期采用的版本,为平台的稳定发展做了有力支撑,4.1 可以满足很多新技术需求,如新款CPU、新板卡、RDMA、NVMe和binlog2.0等。后台无缝维护着两个版本,并为了能力提升和优化而逐步向4.1及更高版本过渡。

现象二:top显示非0即300%

登录到机器上执行top -b -d 1 –p <pid> | grep<pid> , 可以看到进程的CPU利用率每隔几分钟到几十分钟出现一次300%,这意味着该进程3个线程占用的3个CPU都跑满了,跟监控程序呈现同样的异常。

 

 

 

 

 

问题分析

 

 

 

 

上述异常程序使用的是同样的数据源:/proc/pid/stat中进程运行占用的用户态时间utime和内核态时间stime。我们抓取utime和stime更新情况后,发现utime或者stime每隔几分钟或者几十分钟才更新,更新的步进值达到几百到1000+,而正常进程看到的是每几秒更新,步进值是几十。

定位到异常点后,还要找出原因。排除了监控逻辑、IO负载、调用瓶颈等可能后,确认是4.1内核的CPU时间统计有 bug。

cputime统计逻辑

检查/proc/pid/stat中utime和stime被更新的代码执行路径,在cputime_adjust()发现了一处可疑的地方:

当utime+stime>=rtime的时候就直接跳出了,也就是不更新utime和stime了!这里的rtime是runtime,代表进程运行占用的所有CPU时长,正常应该等于或近似进程用户态时间+内核态时间。 但内核配置了CONFIG_VIRT_CPU_ACCOUNTING_GEN选项,这会让utime和stime分别单调增长。而runtime是调度器里统计到的进程真正运行总时长。

内核每次更新/proc/pid/stat的utime和stime的时候,都会跟rtime对比。如果utime+stime很长一段时间都大于rtime,那代码直接goto out了, /proc/pid/stat就不更新了。只有当rtime持续更新追上utime+stime后,才更新utime和stime。

 

 

 

 

 

冷补丁和热补丁

 

 

 

 

***回合:冷补丁

出现问题的代码位置已经找到,那就先去内核社区看看有没有成熟补丁可用,看一下kernel/sched/cputime.c的 changelog,看到一个patch:确保stime+utime=rtime。再看描述:像top这样的工具,会出现超过100%的利用率,之后又一段时间为0,这不就是我们遇到的问题吗?真是踏破铁鞋无觅处,得来全不费工夫!(patch链接:https://lore.kernel.org/patchwork/patch/609410/

 

该补丁在4.3内核及以后版本才提交, 却并未提交到4.1稳定版分支,于是移植到4.1内核。打上该补丁后进行压测,再没出现cputime时而100%时而0%的现象,而是0-100%之间平滑波动的值。

至此,你可能觉得问题已经解决了。但是,问题才解决了一半。而往往“但是”后边才是重点。

第二回合:热补丁

给内核代码打上该冷补丁只能解决新增服务器的问题,但公司还有数万存量服务器是无法升级内核后重启的。

如果没有其它好选择,那存量更新将被迫采用如下的妥协方案:监控程序修改统计方式进行规避,不再使用utime和stime,而是通过runtime来统计进程的执行时间。

虽然该方案快速可行,但也有很大的缺点:

1.  很多业务部门都要修改统计程序,研发成本较高;

2.  /proc/pid/stat的utime和stime是标准统计方式,一些第三方组件并不容易修改;

3. 并没有根本解决utime和stime不准的问题,用户、研发、运维使用ps、top命令时还会产生困惑,产生额外的沟通协调成本。

幸好,我们还可以依靠UCloud已多次成功应用的技术:热补丁技术

所谓热补丁技术,是指在有缺陷的服务器内核或进程正在运行时,对已经加载到内存的程序二进制打上补丁,使得程序实时在线状态下执行新的正确逻辑。可以简单理解为像关二爷那样不打麻药在清醒状态下刮骨疗伤。当然,对内核刮骨疗伤内核是不会痛的,但刮不好内核就会直接死给你看,没有丝毫犹豫,非常干脆利索又耿直。

 

 

 

 

热补丁修复

 

 

 

 

而本次热补丁修复存在两个难点:

难点一: 热补丁制作

这次热补丁在结构体新增了spinlock成员变量,那就涉及新成员的内存分配和释放,在结构体实例被复制和释放时,都要额外的对新成员做处理,稍有遗漏可能会造成内存泄漏进而导致宕机,这就加大了风险。

再一个就是,结构体实例是在进程启动时初始化的,对于已经存在的实例如何塞进新的spinlock成员?所谓兵来将挡水来土掩,我们想到可以在原生补丁使用spinlock成员的代码路径上拦截,如果发现实例不含该成员,则进行分配、初始化、加锁、释放锁。

要解决问题,既要攀登困难的山峰,又得控制潜在的风险。团队编写了脚本进行几百万次的加载、卸载热补丁测试,并无内存泄漏,单机稳定运行,再下一城。

 

难点二:难以复现

另一个难题是该问题难以复现,只有在现网生产环境才有几个case可验证热补丁,而又不可以拿用户的环境去冒险。针对这种情况我们已经有标准化处理流程去应对,那就是设计完善的灰度策略,这也是UCloud内部一直在强调的核心理念和能力。经过分析,这个问题可以拆解为验证热补丁稳定性和验证热补丁正确性。于是我们采取了如下灰度策略:

1. 稳定性验证:先拿几台机器测试正常,再拿公司内部500台次级重要的机器打热补丁,灰度运行几天正常,从而验证了稳定性,风险尽在掌控之中。

2. 正确性验证:找到一台出现问题的机器,同时打印utime+stime以及rtime,根据代码的逻辑,当rtime小于utime+stime时会执行老逻辑,当rtime大于utime+stime时会执行新的热补丁逻辑。如下图所示,进入热补丁的新逻辑后,utime+stime打印正常且与rtime保持了同步更新,从而验证了热补丁的正确性。

3. 全网变更:***再分批在现网环境机器上打热补丁,执行全网变更,问题得到根本解决,此处要感谢运维同学的全力协助。

 

 

 

 

总结

 

 

 

 

综上,我们详细介绍了进程cputime统计异常问题的完整分析和解决思路。该问题并非严重的宕机问题,但却可能会让用户对监控数据产生困惑,误认为可能机器负载太高需要加资源,问题的解决会避免产生不必要的开支。此外,该问题也会让研发、运维和技术支持的同学们使用top和ps命令时产生困惑。最终我们对问题的本质仔细分析并求证,用热补丁的方式妥善的解决了问题。

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/299831.html<

(0)
运维的头像运维
上一篇2025-05-23 14:18
下一篇 2025-05-23 14:20

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注