[发明专利]解析vmcore文件的方法和装置有效
申请号: | 201310152610.9 | 申请日: | 2013-04-27 |
公开(公告)号: | CN103226510A | 公开(公告)日: | 2013-07-31 |
发明(设计)人: | 王力;杜巍 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F11/34 | 分类号: | G06F11/34 |
代理公司: | 北京中博世达专利商标代理有限公司 11274 | 代理人: | 申健 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 解析 vmcore 文件 方法 装置 | ||
技术领域
本发明涉及通信技术领域和计算机操作系统领域,尤其涉及解析vmcore文件的方法和装置。
背景技术
vmcore文件是内存转储机制的转储文件,内存转储机制是当内核发生错误并崩溃时,将内存中的数据存储到vmcore文件中,可以供专业人员分析错误原因甚至恢复重要信息。
Linux系统可以包括Kdump(一种内存转储机制),Kdump是一种基于kexec技术的内核转储机制,kexec是内核快速启动机制,允许通过已经运行的内核的上下文启动一个新的内核,且新启动的内核占用内存小。这样,当当前内核发生错误并崩溃时,Kdump可以快速启动一个新的内核接管系统,然后,该新内核获取并存储前一个崩溃的内核的内存数据,具体的,可以是将前一个崩溃的内核的内存数据存储至新内核的vmcore文件中。
通常的,Linux系统需要根据vmcore文件中存储的数据分析错误原因甚至恢复重要信息,这样,Linux系统首先需要获取待获取内存数据在vmcore文件中存储的线性地址,然后再根据线性地址获取从vmcore文件中获取待获取内存数据,即为对vmcore文件进行解析。
现有技术中,获取待获取内存数据可以包括:
1.获取已存储的内核符号表,该内核符号表中可以包括内存中的部分数据的线性地址,该内存中的部分数据不包括在系统运行中生成的数据;
2.从内核符号表中获取待获取内存数据的所有线性地址;
具体的,如果获取到的线性地址是一段内存数据,例如,内核符号log_buf为一段待获取内存数据的起始地址,那么读出整段待获取内存数据,并将该段数据的二进制编码转换成ASCII编码,多次使用该方法便可以获取到所有待获取内存数据的线性地址;
如果获取到的线性地址是一个数据结构或解析的数据为非连续存储的数据,则可以通过该线性地址和gdb调试模块获取数据结构各成员的值,有些成员变量的值是下一个数据结构的线性地址,可以从该数据结构成员中获得下一个数据结构的线性地址,多次使用该方法便可以获取到所有待获取内存数据的线性地址;
3、根据获取到线性地址获取待获取内容的物理地址;
4.根据物理地址对待获取内容进行解析,即根据获取到的物理地址从vmcore文件中获取待获取内存数据。
大部分待获取内存数据为系统运行时生成的数据,由于,内核符号表中不包括系统运行时生成的数据的线性地址,因此,无法通过内核符号表直接获取全部的待获取内存数据的线性地址,进而无法获取到全部的待获取内存数据,因此,还需要通过gdb调试模块获取所有待获取内存数据的线性地址。
但是,通过gdb调试模块获取线性地址过于复杂,需要多次调用gdb调试模块才可获取到所有待获取内存数据的线性地址,由于调用gdb调试模块有一定的性能消耗,因此,调用次数越多系统消耗越大;另外,gdb调试模块内部实现复杂,返回结果可用性差,进而降低了系统的性能。
发明内容
本发明的实施例提供一种解析vmcore文件的方法和装置,一定程度上解决了通过gdb调试模块获取线性地址过于复杂,且返回结果可用性差的问题,进而提高了系统的性能。
本发明的实施例采用如下技术方案:
第一方面,提供一种解析vmcore文件的方法,包括:
在内核崩溃前,将获取到的内存数据的地址信息进行第一次存储,在内核崩溃时,进行第一次存储后的地址信息允许被获取,所述地址信息包括:内存数据的线性地址、内存数据的偏移地址以及内存数据的标识;
在内核崩溃时,获取进行第一次存储后的地址信息;
将进行第一次存储后的地址信息进行第二次存储,并将所述内存数据存储至所述vmcore文件中,在内核崩溃后,进行第二次存储后的地址信息允许被获取;
根据所述内存数据的标识从进行第二次存储后的地址信息中获取待获取内存数据的地址信息,所述待获取内存数据包括待获取内存数据的标识;
根据所述待获取内存数据的地址信息从所述vmcore文件中解析出所述待获取内存数据。
在第一种可能的实现方式中,所述将进行第一次存储后的地址信息进行第二次存储包括:
将进行第一次存储后的地址信息存储至与所述vmcore文件相互独立的地址文件中;
所述根据所述内存数据的标识从进行第二次存储后的地址信息中获取待获取内存数据的地址信息为:
根据所述内存数据的标识从所述地址文件中获取待获取内存数据的地址信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310152610.9/2.html,转载请声明来源钻瓜专利网。