vmcore自动分析工具

简介: 作者:雨庭 ## vmcore分析工具的需求变化 解决内核宕机、修复线上问题以及优化性能瓶颈是各操作系统团队工程师日常工作之一,其中大量工作依赖于crash工具对vmcore进行分析,但是应用规模以及场景的变化对其提出了新的需求。这种需求对开发者和集群运维而言,反映出不同的问题。对于开发者而言,crash工具可以满足查看vmcore中几乎所有数据的需求,例如全局变量、调度子系统

作者:雨庭

vmcore分析工具的需求变化

解决内核宕机、修复线上问题以及优化性能瓶颈是各操作系统团队工程师日常工作之一,其中大量工作依赖于crash工具对vmcore进行分析,但是应用规模以及场景的变化对其提出了新的需求。这种需求对开发者和集群运维而言,反映出不同的问题。对于开发者而言,crash工具可以满足查看vmcore中几乎所有数据的需求,例如全局变量、调度子系统以及cgroup等相关数据,但是将各类数据关联起来,需要工程师多次手动操作查看数据并与内核源码结合,其中涉及复杂的数据结构和领域知识,门槛太高,同时存在数据显示的友好程度较低等问题;对于集群运维效率而言,频繁产生的vmcore存在大量相似问题的vmcore,需求一种更加高效、精准的vmcore分析工具对频率较高的vmcore进行特征分析,以提高解决系统宕机问题的效率,现有的vmcollect系统采用panic栈进行相似度匹配,错误率较高,无法满足以上需求。

接下来,本文将对当前vmcore分析工具存在的问题进行展开,并向大家介绍一个vmcore自动分析工具,即VAATools(Vmcore Automatic Analysis Tools)

当前vmcore分析工具存在的问题

当前,除crash工具以外,也存在其他大量基于Python、shell、perl等语言的vmcore分析工具,表1对目前已有的vmcore分析工具进行了一个简单对比。

表 1 vmcore分析工具对比

crash crash-Python pykdump crash-extscript analyzevmcore drgn
语言 c c/Python c/Python c/perl shell C
libkdumpfile libkdumpfile
crash
交互方式 嵌套 套接字 直接
多vmcore支持
友好程度 较低 较低

表1从开发语言、依赖库以及交互方式等6个方面对当前已有的6种vmcore分析工具进行总结。在以上vmcore分析工具中,crash-extscript和analyzevmcore分别采用了perl或shell对crash进行扩展,crash-extscript采用套接字与crash进行交互,这种交互的方式非必须和唯一,可以进行优化,analyzevmcore没有较明显的特点和优点可以介绍。Pykdump提供了在crash中使用python编写命令的方法,这种方式给了工程师较大的使用和自由实现命令的空间,依赖Python可以轻松、快速的实现多种数据的对比和关联。drgn与Pykdump较相似,但不依赖于crash获取vmcore种数据,其操作方式更为灵活,语法较多。

以上6种工具提供了分析vmcore文件的基本方式,但在为vmcollect系统选择vmcore分析工具时,还需满足多个vmcore文件分析功能,同时具备更精准的vmcore分析能力,以满足集群中大量相似vmcore文件特征匹配的场景需求。

Quick Start

针对以上问题,我们设计了一个VAATools工具,其功能包括:

1)分析获取多个或单个vmcore文件信息,支持报表信息显示task、cgroup等变量重要信息;

2)支持编写Python脚本对内核中重要数据进行获取和处理;

3)提供几个参考的使用Python编写的命令;

在VAATools中,提供了多个vmcore文件分析功能和可支持利用Python设计crash命令。接下来,对这些功能进行一个简单的介绍。

分析多个vmcore文件

输入vmcores所在文件夹,将各vmcore分析结果可输出到“.crash”文件下,命令如下:

VAATcrash -d /<path-to-vmcore-dir>/

输出结果包含bt、各cpu中runqueues、cfs_rq参数表格显示信息以及当前进程信息。同时,也将runq命令输出信息也保存到结果文件中,如文未链接。

VAATcrash的其他功能可借助'-h'选项查看。

使用Python编写的新命令

在VAATools中command目录下,提供了采用Python编写的cpu、锁信息、cgroup信息等命令。这些命令将平时需要多次操作crash命令并同时需要阅读Linux内核查看数据关联的过程进行封装为一个命令。这些命令与crash自带的命令在功能上无明显的差异,但由于Python的语言环境,设计一个Python命令可能更加容易和较快的处理一些数据和变量间关联性。

接下来,对command下的几个命令进行展示。

1)cpuinfo命令可显示vmcore中core分布以及tlb状态。如图3-1,图3-2所示。

89537615afd20799f6f699db893c87e7.png

图 3-1 cpuinfo命令(cpuinfo -i)

0bd3a3d1efe0b8d888ef6f15b9918695.png
图 3-2 cpuinfo命令(cpuinfo -t)

2)可解析占用某个锁的进程信息。如图3-3所示查看发生panic时,占用“cgroup_mutex”的进程:

cb02a1a9de0714b925d04acdcf1cd63c.png

图 3-3 lockinfo命令

3)表格形式显示vmcore中多个同类型数据,可以明显观察出异常值。如图3-4所示。

9f717fa45aa1340359bcce96c2690fcc.png

图 3-4 tasktableinfo命令

4)层次结构类型数据显示,例如显示cgroup层次结构,如图3-5所示,显示出各级cpuset、cpu等,同时可以获取各层cpus、mem等参数值。

0f119ace64923e8b120dd318bbe446fb.png
图 3-5 cgroupinfo命令

以上命令在实现过程中还可以直接通过相关的接口,如exec_crash_command,调用crash原命令,对原命令打印的数据进行处理。

深入了解VAATools

VAATools主要实现单个以及多个vmcore的分析功能,同时尽量采用Python进行开发,保证代码的维护性,实现较高的可视化数据显示方式。接下来,对VAATools背后的框架以及原理进行介绍。

VAATools原理

为实现vmcollect系统上高效的vmcore分析工具,我们将crash中加入"Python"的元素,借助Python便于解决后续的数据处理、对比,图表显示、以及为后续部署模式匹配、机器学习算法部署搭建友好的框架。VAATools框架如图4-1所示。

ef24bad251881372bc9ef22a2fcd20cc.png

图 4-1 VAATools设计草图

在VAATools中,顶层VAATcrash命令主要采用Python语言进行设计,并通过Python中的subprocess库启动一个crash进程并通过管道非阻塞的方式接收crash返回的数据。

中间层epython命令,主要基于crash提供的命令扩展功能,并借助C语言与Python之间的相互调用接口实现epython调用Python版自定义命令。另外,顶层VAATcrash通过传入的参数控制epython选择不同的vmcore分析方式,比如单个vmcore以及多个vmcore。

当前,可借鉴和使用的项目主要为开源的pykdump,其提供的各类接口满足epython与自定义命令间的功能需求。

C与Python间相互嵌套

在VAATools中多处存在C语言中调用Python,Python中调用C的代码。在VAATools的C与Python两种语言嵌套方式的开发过程中,主要参考和借鉴了Pykdump中相关设计。VAATools依赖于Pykdump提供的库文件

VAATools中存在的性能问题

利用Python设计VAATools,在开发上简单和快速,但是也带来了处理速率慢的问题,尤其在处理vmcore文件较多,或查看整理的变量较多时,整体处理完成的时间较长。

在VAATools设计初,已经从原先的Python与crash间进程交互方式改进为现在的Python直接调用crash内函数,同时转移多个数据获取方式到crash内部的方式。通过统计获取各种数据的等待时间,我们可以了解到当前VAATools的性能信息,图4-2为VAATools优化前后获取rq、cfs、task等数据的等待时间。

c897add9d8c8d3e6e0b2fcddc8350555.png

图 4-2 VAATools性能优化前后对比

从上图的确可以看出优化后,VAATools改进不少,但是cfs的等待延时还是偏大,其原因在于获取cfs数据时,解析的成员变量较多。因此,如果要获取的某类数据过多,将等待很长一段时间才获取结果文件,大幅度降低debug效率。

目前,VAATools的性能还可以在VAATools的架构调整以后,有较大的提升空间。

TODO

1)改善Python与crash间的交互;

目前,VAATools中,最外层VAATcrash命令与crash间还存在一层通过管道获取数据的方式,通过管道获取crash的数据时,需要设置等待延时,从而带来性能问题。后期可以将这一层完全改进为函数调用的方式,不再需要启动crash进程这一过程。

2)vmcore特征提取;

提取vmcore中宕机原因的特征,从而实现后续对大量的vmcore文件进行相似度分析,识别相同问题的vmcore的目标。

3)考虑是否可以将机器学习引入到vmcore;

将机器学习用于提取vmcore特征、训练vmcore特征匹配模型可能是一种vmcore特征匹配精度更高的方法。

Links


[1] https://github.com/jeffmahoney/crash-python

[2] https://github.com/osandov/drgn

[3] https://github.com/g23guy/supportutils

相关文章
|
存储 缓存 虚拟化
PCIe地址转换服务(ATS)详解
PCIe地址转换服务(ATS)详解
4137 1
PCIe地址转换服务(ATS)详解
|
安全 数据库 数据安全/隐私保护
|
5月前
|
人工智能 运维 监控
宕机智能诊断利器来了,助你告别 Linux 宕机分析“三座大山”
阿里云宕机智能诊断功能,基于大模型与内核调试技术,秒级解析dmesg日志、深度分析VMCORE、精准匹配Linux内核补丁,将传统需数小时的宕机分析压缩至5分钟,大幅降低运维门槛。
宕机智能诊断利器来了,助你告别 Linux 宕机分析“三座大山”
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
275898 0
|
1月前
|
人工智能 安全 机器人
企业 AI 落地,第一件事不是买模型,而是建好企业知识库
很多企业现在谈 AI,第一反应还是买模型、接接口、做一个内部聊天机器人。 可以这么开始,但别把它当成落地的核心。真正的问题通常不是模型不会回答,而是模型不知道你这家公司到底怎么运转。
|
人工智能 API
【MCP教程系列】上阿里云百炼,5分钟轻松搭建会分析,能推理,还会自动写文档的Agent
本教程介绍如何在阿里云百炼平台上,用5分钟快速搭建一个能分析、推理并自动写文档的智能体(Agent)。通过零代码方式,结合Flomo MCP应用实现AI分析与自动归档功能。主要步骤包括:开通Flomo服务、获取API KEY、创建智能体并添加MCP服务。完成后,Agent可自动提取关键内容并归档至Flomo。附有详细操作视频和效果演示,新手友好,简单易上手。
2083 0
|
8月前
|
数据采集 弹性计算 运维
云服务诊断:一键定位异常,快速恢复业务
云服务诊断是阿里云推出的免费运维工具,提供“资源健康状态”和“问题诊断”两大功能。可精准监控每个实例的健康状况,支持一键全量诊断与常见问题场景快速排查,帮助用户迅速定位并修复ECS、SLB、EIP等资源异常,提升运维效率,保障业务稳定运行。
585 22
|
8月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
58206 11
|
JSON 自然语言处理 Nacos
垂直和领域 Agent 的护城河:上下文工程
上下文工程是智能体应对复杂任务的核心能力,通过对项目状态、需求文档、团队沟通等多维度信息的结构化整合,提升大模型输出的准确性与适配性。它超越传统提示词工程,构建系统化的信息输入框架,使智能体更贴近人类思维逻辑,成为实现高质量人机协作的关键方法。
927 0