一种文件生成方法、装置和系统与流程

文档序号:11590127阅读:175来源:国知局
本发明涉及计算机
技术领域
:,尤其涉及一种文件生成方法、装置和系统。
背景技术
::在大型数据中心部署的计算机越来越多,因此计算机出现问题的概率也在增大,从而导致计算机维护成本不断上升。一种可用于分析计算机故障的方式是,在计算机操作系统的内核崩溃时,将计算机内存运行参数转储成一个文件,通过这个文件来分析计算机操作系统的内核崩溃的原因,这个文件可称为“内核崩溃转储文件”。kdump是一种用于在计算机操作系统的内核崩溃时用来转储内存运行参数的工具,可用于生成内核崩溃转储文件,生成的内核崩溃转储文件可传送到远端的网络服务器上,用于故障分析。目前,操作系统通过网卡的驱动程序,控制网卡将内核崩溃转储文件分为多个数据包传送到远端的网络服务器上,操作系统崩溃后,无法控制网卡进行数据包的传送,这样远端的服务器上就无法获得内核崩溃转储文件。技术实现要素:本发明实施例提供一种文件生成方法、装置和系统,用于解决设备的操作系统崩溃后,无法控制网卡进行数据包的传送,远端设备无法获得内核崩溃转储文件的问题。第一方面,本发明实施例提供一种文件生成方法,包括:第一设备在操作系统的内核崩溃后,通过第一设备的第一网卡读取所述第一设备的内存中第一存储区域上的第一信息并发给第二设备;第二设备通过第 二设备的第二网卡从第一设备接收所述第一设备的内存中的第一存储区域上的第一信息并存储于所述第二设备的内存中;所述第二设备根据所述第二设备的内存中的所述第一信息,生成第一文件;其中,所述第一信息为生成第一文件所需的信息;所述第一文件用于分析所述第一设备的操作系统的内核崩溃的原因;所述第一网卡为不需要所述第一设备的操作系统通过所述第一网卡的驱动程序对所述第一网卡进行控制,能够读取并传送所述第一设备的内存中的数据、且能够与所述第二设备通信的网卡。所述第二网卡为不需要所述第二设备的处理器调用所述第二网卡的驱动程序时,能够从所述第一设备接收数据并存储于所述第二设备的内存中、且能够与所述第一设备通信的网卡。采用上述方案,由于第一网卡不需要所述第一设备的操作系统通过所述第一网卡的驱动程序对所述第一网卡进行控制,能够读取并传送所述第一设备的内存中的数据、且能够与所述第二设备通信;第二网卡不需要所述第二设备的处理器调用所述第二网卡的驱动程序时,能够从所述第一设备接收数据并存储于所述第二设备的内存中,因而可使得第二设备获取用于分析第一设备的操作系统的内核崩溃原因的信息;而第二设备能够根据获取的信息生成第一文件,一方面,实现了信息的传送,另一方面,在第二设备上生成的第一设备相关的第一文件。使得在第一设备的操作系统的内核崩溃时,即使网卡的驱动不能正常工作,也能够生成用于分析第一设备的操作系统的内核崩溃原因的文件。在一种可能的实现方式中,所述第二设备在通过所述第二网卡读取所述第一信息之前,通过所述第二网卡,向所述第一设备发送第一读取指令;所述第一设备通过所述第一网卡从所述第二设备接收该第一读取指令;其中,所述第一读取指令中包括第一指示信息;所述第一指示信息用于指示所述第一存储区域上的数据中,所述第一信息的存储位置;所述第一设备通过所述第一网卡从所述第一存储区域上,读取所述第一指 示信息所指示的存储位置上的所述第一信息。采用上述方案,通过第一读取指令中包括的第一指示信息可指示所述第一存储区域上的数据中,用于生成第一文件的信息的存储位置,这样,可以更准确地获取第一信息,也避免读取生成第一文件所不需要的信息。在一种可能的实现方式中,所述第一设备在操作系统的内核崩溃后,接收所述第一读取指令之前,所述第一设备通过处理器收集第二信息,所述第二信息包括:所述第一存储区域的内存地址索引信息;所述第一设备通过处理器将所述第二信息存储到所述第一设备的内存的第二存储区域上;以及通过所述第一网卡,读取所述第二存储区域上的所述第二信息,并发送给所述第二设备;第二设备通过所述第二网卡从所述第一设备接收该第二信息并存储于所述第二设备的内存中,以及根据所述第二设备的内存中的所述第二信息生成所述第一指示信息;将生成的所述第一指示信息置于所述第一读取指令中。采用上述方案,第一设备通过所述第一网卡向第二设备发送第二信息,第二设备可根据该第二信息生成第一指示信息,指示第一存储区域中的哪些信息的信息是生成第一文件所需要的信息,避免读取到生成第一文件所不需要的信息。在一种可能的实现方式中,所述第一设备在操作系统的内核崩溃后,接收所述第一读取指令之前,通过所述处理器生成所述第二指示信息并将所述第二指示信息存储到第二存储区域上,所述第二指示信息用于指示所述第二设备具有读取所述第一存储区域上的数据的权限;所述第一设备通过所述第一网卡,读取所述第二存储区域上的所述第二指示信息,并发送给所述第二设备;所述第二设备通过所述第二网卡接收所述第一设备的内存的第二存储区域上的所述第二指示信息;所述第二设备将所述第二指示信息置于所述第一读取指令中;所述第一设备在通过所述第一网卡确认所述第一读取指令中还包括所述第二指示信息在收到所述第一读取指令之后,再通过第一网卡读取所述第一设 备内存中第一存储区域上的第一信息。采用上述方案,第一设备通过所述第一网卡向第二设备发送第二指示信息,可以使第二设备具有访问第一设备的第一存储区域的权限。在一种可能的实现方式中,在所述第一设备在操作系统的内核崩溃前,生成第三指示信息,用于指示所述第二设备具有读取所述第二存储区域上的数据的权限;所述第一设备通过所述第一网卡将所述第三指示信息发送给所述第二设备;所述第二设备通过所述第二网卡接收第三指示信息;在确定所述第一设备的操作系统的内核崩溃之后,通过所述第二网卡向所述第一设备发送第二读取指令,所述第二读取指令中包括所述第三指示信息。在所述第一设备在通过所述第一网卡从所述第二设备接收第二读取指令并确定所述第二读取指令中包括所述第三指示信息之后,再读取所述第二存储区域上的信息。在一种可能的实现方式中,所述第一设备通过所述第一网卡向所述第二设备发送post消息,所述post消息中携带所述第二存储区域上的信息;所述第二设备通过所述第二网卡,接收post消息,从所述post消息中获取第二存储区域上的信息。在一种可能的实现方式中,在所述第一设备将所述第二存储区域上的信息发送给所述第二设备之后,接收所述第一读取指令之前,第一设备的处理器暂停运行。采用上述方案,可以使处理器不再执行任何指令,从而能使得第一设备的内存能够尽量保持在操作系统的内核崩溃时的状态,以便构造的第一文件能更真实地反应第一设备的操作系统的内核崩溃的原因。第二方面,本发明实施例提供一种第一设备,该第一设备具有实现上述方法中第一设备行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。在一种可选的实现方案中,所述第一设备包括:内存和第一网卡,可选地,还可包括处理器;所述第一网卡被配置为支持所述第一设备执行上述方法中的内存读取和数据发送,以及指令接收和/或发送的功能;所述处理器,被配置为支持所述第一设备执行上述方法中相应的控制和处理的功能;所述内存,用于存储上述方法中第一设备中的信息和数据。第三方面,本发明实施例提供一种第二设备,该第二设备具有实现上述方法中第二设备行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。在一种可选的实现方案中,所述第二设备包括:第二网卡,内存和处理器;所述第二网卡被配置为支持所述第二设备执行上述方法中的数据接收和内存访问,以及指令接收和/或发送的功能;所述处理器,被配置为支持所述第二设备执行上述方法中相应的控制和处理的功能;所述内存,用于存储上述方法中第二设备中的信息和数据。第四方面,本发明实施例提供一种文件生成系统,包括:上述第一方面至第三方面的任一方面所述的第一设备和第二设备。第五方面,本发明实施例提供了一种计算机存储介质,用于储存为上述第一方面至第四方面中的任一方面所述的第一设备所用的计算机软件指令,其包含用于执行上述方面所涉及的程序。第六方面,本发明实施例提供了一种计算机存储介质,用于储存为上述第一方面至第四方面中的任一方面所述的第二设备所用的计算机软件指令,其包含用于执行上述方面所涉及的程序。附图说明图1为本发明实施例提供的文件生成系统的结构示意图;图2为本发明实施例提供的一种信息传送方法的流程图;图3为本发明实施例提供的一种第二存储区域中存储的数据格式的示意 图;图4为本发明实施例提供的一种vmcore文件生成方法的流程图;图5为本发明实施例提供的一种第一设备的结构示意图;图6为本发明实施例提供的一种第二设备的结构示意图。具体实施方式为了更好地理解本发明实施例的上述目的、方案和优势,下文提供了详细描述。该详细描述通过使用框图、流程图等附图和/或示例,阐明了装置和/或方法的各种实施方式。在这些框图、流程图和/或示例中,包含一个或多个功能和/或操作。本领域技术人员将理解到:这些框图、流程图或示例内的各个功能和/或操作,能够通过各种各样的硬件、软件、固件单独或共同实施,或者通过硬件、软件和固件的任意组合实施。本发明实施例提供一种文件生成方法、装置和系统。其中,第一设备在操作系统的内核崩溃后,通过第一网卡读取第一设备的内存中第一存储区域上的第一信息并发送给第二设备;第二设备通过第二网卡从第一设备接收第一信息并存储于第二设备的内存中并根据第一信息,生成第一文件。其中,第一信息为生成第一文件所需的信息;第一文件用于分析第一设备的操作系统的内核崩溃的原因;第一网卡为不需要第一设备的操作系统通过第一网卡的驱动程序对第一网卡进行控制,能够读取并传送第一设备的内存中的数据、且能够与第二设备通信的网卡。第二网卡为不需要第二设备的处理器调用第二网卡的驱动程序时,能够从第一设备接收数据并存储于第二设备的内存中、且能够与第一设备通信的网卡。本发明实施例中,第一设备在操作系统的内核崩溃后,通过第一网卡,将第一信息发送给第二设备,第二设备通过第二网卡从第一设备接收第一信息,第二设备根据第一信息生成第一文件。由于第一网卡无需第一设备的操作系统 控制,即可读取并传送第一设备的内存中的数据并能够与第二设备进行通信,且第二网卡无需第二设备的操作系统控制,即可与第一设备进行通信。因此,当第一设备的操作系统崩溃时,仍可通过该第一网卡发送第一信息,从而第二设备可以通过第二网卡接收的第一信息并存储于第二设备的内存中,第二设备根据内存中的第一信息生成第一文件,该第一文件可用于分析第一设备的操作系统的内核崩溃的原因。其中,第一文件可为内核崩溃转储文件。采用本发明实施例提供的方案,可以避免现有技术中当操作系统崩溃时无法向远端的服务器发送内核崩溃转储文件的数据包,远端的服务器无法获取内核崩溃转储文件的问题。为了便于更好的理解本发明实施例,下面介绍本发明实施例涉及的一些公共的描述,这些描述是为了便于理解本发明实施例,不应视为对本发明实施例保护范围的限定。一、kdump工具kdump是一种用于在计算机操作系统的内核崩溃时用来转储内存运行参数的工具,可用于生成内核崩溃转储文件。使用kdump工具生成内核崩溃转储文件时涉及两种内核,即生产内核和捕获内核。生产内核是捕获内核服务的对象,是操作系统正常运行时所启动的内核。捕获内核是在生产内核崩溃时启动的内核,用来生成内核崩溃转储文件。使用kdump工具生成内核崩溃转储文件的一种流程如下:操作系统的生产内核崩溃后,处理器切换到捕获内核;捕获内核通过kdump工具捕获内存镜像,并使用kdump工具收集内存地址索引信息,组成符合elf格式的信息填写在内存的一块存储区域中,并根据该存储区域中的符合elf格式的信息,从内存镜像中读取生成内核崩溃转储文件所需要的信息,进而生成内核崩溃转储文件。二、rdma(remotedirectmemoryaccess,远程直接数据访存)技术rdma技术是为缩短网络传输中服务器数据处理的延迟而产生的,应用rdma技术发送数据时,输入/输出(input/output,i/o)装置直接访问内存并 将其发送出去,不需要操作系统的内核参与;接收数据时,i/o装置将收到的数据直接写入内存,也不需要操作系统的内核参与,缩短了处理时延,并极大减轻了处理器的负荷。rdma网卡是一种采用rdma技术的i/o装置。在装有rdma网卡的设备上,通过将将rdma网卡的寄存器置位,即将rdma网卡的状态置为“可发送状态”,即可使rdma网卡读取内存中的数据,并将读取到的数据发送至远端设备上,比如:远程的服务器上。按照rdma技术,在rdma网卡读取内存并向远端设备发送数据之前,需要本端设备和远端设备进行高层协议(upperlayerprotocol,ulp)协商,协商数据发送时使用的队列对编号(queuepairnumber,qpn)。三、第一网卡和第二网卡本发明实施例中,设备可通过第一网卡和第二网卡读取内存、传送数据和接收数据。第一网卡为:不需要第一网卡所在设备的处理器调用第一网卡的驱动程序时,能够读取并传送第一网卡所在设备的内存中的数据、并能够与远端设备通信的网卡。该第一网卡可为:比如:rdma网卡、hca(hostchanneladapter,主机通道适配器)卡等。第二网卡为:不需要第二网卡所在设备的处理器调用第二网卡的驱动程序时,能够读取并传送第二网卡所在设备的内存中的数据、并能够与远端设备通信的网卡。该第二网卡可为:比如:rdma网卡、hca卡等。下面结合附图,对本发明实施例进行详细介绍。图1示出了本发明实施例中的文件生成系统的结构示意图,该文件生成系统包括第一设备101和第二设备102。其中,第一设备101是配置有前述第一网卡的设备;比如:rdma网卡, hca卡等。其中,第二设备102可配置前述第二网卡,通过该第二网卡与第一设备101的第一网卡通信。图2为本发明实施例提供的图1所示的系统中,第一设备101和第二设备102之间信息传送方法的流程图。如图2所示,该方法可包括如下步骤:s201:第一设备101的处理器在第一设备的操作系统的内核崩溃时,执行预设的第一程序。其中,处理器可包括一个或多个处理器,比如:中央处理单元(centralprocessingunit,cpu)、数字信号处理器(digitalsignalprocessor,dsp)等。该第一程序用于执行如下操作:操作1:收集第二信息,并生成第二指示信息,并将第二信息和第二指示信息存储在内存的第二存储区域上;操作2:将第二存储区域上的数据发送给第二设备102;操作3:暂停处理处理器的运行。其中,该预设的第一程序是占用内存空间较小的一段程序,可预先存储在内存的一块存储区域上,当操作系统的内核崩溃时,第一设备101的处理器可调用该第一程序,执行上述操作。当第一内存区域为部分内存区域时,预设的第一程序可存储在第一内存区域之外的内存区域中,这样,第一程序的执行不会破坏第一设备的操作系统的内核崩溃时内存的原有状态。当第一内存区域为全部内存区域时,预设的第一程序可存储在第一内存区域中,但由于预设的第一程序占用的内存空间较小,且第二设备可事先与第一设备协商,获知预设的第一程序所占用的内存空间,在读取第一设备的内存时选择性地不读取上述被占用的内存空间,因而,第一程序的执行也不会破坏第一设备的操作系统的内核崩溃时内存的原有状态。第一设备101可利用软件狗和硬件狗的握手机制,确定操作系统的内核崩 溃。其中,如果软件狗与硬件狗握手超时,则硬件狗会认为操作系统的内核已崩溃。进而,硬件狗会中断处理器当前所执行的程序,接下来处理器可执行上述预设的第一程序。下面,对上述操作1~操作3进行详细说明。操作1、收集第二信息,并生成第二指示信息,将第二信息和第二指示信息存储在内存的第二存储区域上。其中,该第二信息可包括:内存的第一存储区域的内存地址索引信息;内存地址索引信息可用于指示:第一存储区域中的数据的虚拟地址和物理地址之间的映射关系。其中,内存的第一存储区域可以是内存的全部存储区域,也可以是内存的部分存储区域。当第一设备101上运行多个虚拟机时,第一存储区域可以是内存的部分存储区域,该部分存储区域由崩溃的虚拟机的操作系统的内核所管理;否则,该第一存储区域可以是内存的全部存储区域。第二存储区域也是第一设备101内存的一部分,可以位于第一存储区域中,也可独立于第一存储区域,专用于存储第二指示信息和第二信息。其中,第二信息还可以包括处理器状态信息、bios(basicinputoutputsystem,基本输入输出系统)信息等,这些信息可用于第二设备102生成第一文件时使用。该第一文件用于分析第一设备101的操作系统的内核崩溃的原因,当第二设备102使用kdump工具生成第一文件时,该第一文件为内核崩溃转储文件,比如:vmcore文件。其中,第二指示信息用于指示第二设备102具有读取第一存储区域上的数据的权限;其中,可将第一设备101的第一存储区域映射给第一网卡,即将第一存储区域中的数据的物理地址和第一网卡访问数据时使用的i/o地址的对应关系存储在第一网卡的地址映射表中,映射后生成第二指示信息,第二指示信息可为 第一存储区域的索引。操作1中收集第二存储区域上的数据,需要在操作系统的内核崩溃后执行的原因是:操作系统的内核崩溃后收集到的第二信息能够真实反映第一设备101的操作系统的内核崩溃时操作系统内核的真实状况,以便后续生成的第一文件时能反映如上真实情况,利用第一文件对操作系统的内核崩溃的原因进行分析时更准确。若第二设备102采用kdump工具生成第一文件,即vmcore文件。则第一设备101在收集第二信息并存储在第二存储区域上时,应按照kdump工具要求的elfcorehdr字段的格式组织该第二信息。这样第二设备102的kdump工具才能够正确读取该第二信息,并根据该第二信息生成vmcore文件。或者,也可以定义一种信息的第二信息的组织格式,只要第一设备101和第二设备102预先协商好第二信息的组织格式,或者通过相关标准定义第二信息的组织格式,则第二设备102在收到第二信息后,即可正确读取该第二信息。可选地,第二指示信息可置于该elfcorehdr字段之前,存储在第二存储区域中。若第一网卡为rdma网卡,则该第二指示信息可为rkey。此时,第二存储区域中存储的数据格式可如图3所示。操作2:将第二存储区域上的数据发送给第二设备102。第一设备101将第一网卡的寄存器置为可发送状态,比如,可通过触发第一网卡的寄存器的doorbell指令,将第一网卡的寄存器置为可发送状态;第一设备101通过第一网卡将第二存储区域上的数据发送给第二设备102,可采用的实现方式包括但不限于以下两种:方式一、第一设备101在操作系统的内核崩溃前,可以生成第三指示信息,第三指示信息用于指示第二设备102具有读取第二存储区域上的数据的权限;第一设备101将第三指示信息发送给第二设备102;第二设备102通过第二网卡接收第三指示信息;第二设备102在确定第一设备101的操作系统的内核崩溃之后,通过第二网卡向第一设备101发送第二读取指令,其中,第二读取指令中包括第三指示信息,用于读取第二存储区域上的数据;第一设备101收到第二读取指令后,通过第一网卡读取第二存储区域上的数据,并通过第一网卡将第二存储区域上的数据发送给第二设备102。可选地,第二设备102可在向第一设备101发送某消息,但一直也未收到回复,比如:预设的定时器超时,则确定第一设备101的操作系统的内核崩溃。其中,第三指示信息可用于指示第二设备102具有访问第一设备101上内存的第二存储区域的权限。此外,第二设备102在向第一设备101发送第二读取指令时,可读取第二存储区域上的全部数据。方式二、第一设备101可通过第一网卡向第二设备102发送post消息,post消息中携带第二存储区域上的数据。或者,若采用方式二发送,在收集第二信息和生成第二指示信息后,可不存储于第二存储区域上,而是直接置于post消息中,发送给第二设备102。在方式二中,post消息中携带第二存储区域上的数据,第二设备102在与第一设备101的通信信道上监听是否收到post消息,监听到post消息时则可接收到post消息中携带的第二存储区域上的数据,第二设备102在收到该post消息后,即可确定第一设备101的操作系统已崩溃。操作3:暂停处理处理器的运行。可选地,第一设备101在通过第一网卡将第二存储区域上的数据发送给第二设备102之后,可以将第一设备101的处理器暂停运行。比如:将第一设备101的处理器下电,这样,处理器不再执行任何指令,从而能保证第一设备101的操作系统的内核崩溃时内存的状态不被破坏。目前采用kdump工具生成内核崩溃转储文件时,在生产内核崩溃后,处理 器会启动捕获内核收集内存布局信息,比如上述的第二信息。捕获内核的执行会破坏操作系统崩溃时的内存的原有状态。而采用本发明实施例的方法,第一设备101在操作系统的内核崩溃时,执行第一程序,而第一程序在内存上运行的区域,独立于上述第一存储区域,这样,就能够尽量保留内存在操作系统内核崩溃时的状态。如前所述,步骤s201是由第一设备101的处理器调用第一程序执行的,在第一程序执行的操作3中,暂停运行处理器。下面的步骤是由第一设备101的第一网卡和第二设备102进行交互完成的,无需第一设备101的处理器控制。s202:第二设备102构造第一读取指令;第二设备102在接收到步骤s201中第一设备101发送的第二存储区域上的数据后,从中获取第二指示信息和第二信息。第二设备102根据获取的第二指示信息和第二信息构造第一读取指令的具体方式可以是:第二设备102确定生成第一文件所需要的信息的虚拟地址;第二设备102解析第二信息中的内存地址索引信息;如前所述,该内存地址索引信息用于指示第一存储区域中的数据的虚拟地址和物理地址之间的映射关系,则第二设备102可将确定的生成第一文件所需要的信息的虚拟地址,按照该内存地址索引信息,转换为第一存储区域的物理地址,将转换后的物理地址的相关信息作为第一指示信息,置于第一读取指令中。在转换物理地址时,生成的第一指示信息可包括:第一地址,用于指示要读取的信息在第一存储区域上的起始的物理地址;第一长度,用于指示从该起始的物理地址处要读取的信息的长度。此外,可选地,在第二设备102在自身的内存中分配存储区域,用于存储该第一读取指令读取到的第一信息。第二设备102可在第一读取指令中指示:在自身的内存中存储第一信息时占用的内存的起始地址(第二地址)和长度(第 二长度)。第二设备102可将第一地址、第一长度、第二地址以及第二长度作为第一指示信息,置于第一读取指令中;此外,第二设备102将读取到的第二存储区域的数据中的第二指示信息也置于第一读取指令中,用于指示第二设备102具有读取第一存储区域中的数据的权限。第一读取指令可仅用于读取生成第一文件所必需的信息,无需读取对生成第一文件无用的信息。可选地,第二设备102可通过诸如kdump工具等确定哪些信息是生成第一文件所必需的信息。为了描述简洁,将第一设备101内存的第一存储区域中构造第一文件所需的信息称为“第一信息”。其中,第一信息是第一设备101的操作系统内核崩溃时自动存储在第一存储区域上的信息。s203:第二设备102向第一设备101发送生成的第一读取指令;s204:第一设备101的第一网卡收到第一读取指令后,读取第一存储区域中的第一信息,并发送给第二设备102;第一设备101的第一网卡在收到第一读取指令后,根据第一读取指令中的第一地址和第一长度信息,按照步骤s201中形成的地址映射表索引到需要读取的第一存储区域的i/o地址,按照索引到的i/o地址读取第一存储区域中的第一信息,并将读取到的第一信息发送给第二设备102;s205:第二设备102根据收到的第一信息生成第一文件;第二设备102接收第一设备101发送的第一信息,并存储到第二地址和第二长度所指示的第一设备102的内存中,从而完成第一信息的读取。第二设备102在接收到第一信息后,可结合第二信息中的处理器状态信息、bios信息等生成第一文件。第二设备102生成第一文件的具体方法可参考kdump工具生成第一文件的方法。图2所示的生成第一文件的方式仅为一种可选方式。比如:第一设备101可在操作系统的内核崩溃后,通过第一网卡,将第一信息发送给第二设备102,比如:通过前述的post消息等进行发送。这样,第二设备102也能够获取生成第一文件所需的第一信息。其中,第一设备101还可将处理器状态信息、bios信息等,通过post消息发送给第二设备102,这样第二设备102可根据这些信息生成第一文件。下面,参考图4,举例说明本发明实施例提供的一种vmcore文件生成方法。其中,vmcore文件即为第一文件的一个例子。s401:客户端的操作系统的内核崩溃时,客户端收集rkey和elfcorehdr字段信息并存储在预留内存区域上;其中,预留内存区域是前述第二存储区域的一个例子,是在客户端的内存中预留出来用来存放rkey和elfcorehdr字段信息的一块内存区域;客户端是前述的第一设备101的一个例子;服务器是前述的第二设备102的一个例子;rkey是前述的第二指示信息的一个例子;elfcorehdr字段信息是前述的第二信息的一个例子。rkey的生成方式可以是:将客户端的第一存储区域映射给第一网卡,生成新的rkey写入前述的预留内存区域中。其中,映射的含义可以是:将操作系统的第一存储区域的物理地址和第一存储区域的i/o地址的对应关系保存在第一网卡的dma(directmemoryaccess,直接数据访存)地址映射表中。映射后生成的rkey就是第一存储区域的索引。其中,第一存储区域可以是客户端的全部或部分内存区域。rkey用于指示服务器具有读取客户端的第一存储区域的权限。例如rkey=1时,代表服务器能够访问客户端的内存区域a;rkey=2时,代表服务器能够访问客户端的内存区域b。内存区域a和内存区域b为不同的内存区域。elfcorehdr字段信息可包括内存地址索引信息。内存地址索引信息可用于 指示:第一存储区域中的数据的虚拟地址和物理地址之间的映射关系。elfcorehdr字段信息还可以包括客户端的处理器状态信息、bios(basicinputoutputsystem,基本输入输出系统)信息等。s402:客户端的操作系统的内核崩溃时,客户端通过第一网卡将预留内存区域上的数据发送给服务器;其中,预留内存区域上的数据包含rkey和elfcorehdr字段信息。客户端的操作系统的内核崩溃时,客户端将客户端的预留内存区域上的数据发送给服务器的具体实现方式有多种,下面给出两种可选的实现方式,实际的实现方式不限于这两种。第一种可选的实现方式操作系统的内核崩溃前,客户端通过第一网卡向服务器发送预留内存区域的地址(前述第三指示信息的一个例子)。服务器根据收到的客户端发送的预留内存区域的地址后构造读取预留内存区域上的数据的指令(前述第二读取指令的一个例子)。客户端的操作系统的内核崩溃时,客户端触发第一网卡的寄存器的doorbell指令,将第一网卡的状态置为可发送状态,服务器将读取预留内存区域的数据的指令发送给客户端,客户端的第一网卡收到读取预留内存区域的数据的指令后读取预留内存区域的数据,并通过第一网卡将预留内存区域的数据(rkey和elfcorehdr字段信息)发送给服务器。此处,第一种可选的实现方式是前述步骤s201的实现方式一的一个例子,在第一种可选的实现方式中没有详细描述的操作流程,可参考前述步骤s201的实现方式一。第二种可选的实现方式在第二种可选的实现方式中,客户端不需将预留内存区域的地址发送给服务器。客户端的操作系统的内核崩溃时,客户端触发第一网卡的寄存器的doorbell指令,即将第一网卡的状态置为可发送状态,收集预留内存区域的数 据并通过post消息将预留内存区域的数据(包含rkey和elfcorehdr字段信息)发送给服务器。服务器在其与客户端的协商的队列对上监听是否收到post消息,监听到post消息时则可接收post消息中携带的预留内存区域的数据。此处,第二种可选的实现方式是前述步骤s201的实现方式二的一个例子,在第二种可选的实现方式中没有详细描述的操作流程,可参考前述步骤s201的实现方式二。s403:客户端调用操作系统的高级配置和电源管理接口(advancedconfigurationandpowermanagementinterface,acpi),将操作系统的处理器暂停运行(即pause);acpi是一种电源管理标准,每一个与计算机相连的设备的电量都通过该标准控制和划拨,操作系统通过acpi可以关闭不同的外部设备。将处理器pause,就可以将处理器下电,处理器不再执行任何指令,从而能保证客户端的内存保持操作系统的内核崩溃时的状态不被破坏,以便构造的vmcore文件能更真实地反应客户端的操作系统的内核崩溃的原因。可选地,上述步骤s401~s403可以由预先存储在内存的一块存储区域上的一段程序执行。s404:服务器根据预留内存区域的数据,构造用于读取客户端的第一存储区域中的第一信息的读取(read)消息;其中,read消息是前述的第一读取指令的一个例子。服务器中的kdump工具可解析出生成vmcore文件所需要的信息的虚拟地址,服务器根据elfcorehdr字段信息中的内存地址索引信息,可以得到生成vmcore文件所需要的信息的物理地址。服务器发送的read消息包含rkey以及根据elfcorehdr字段信息解析出来的信息,read消息可仅读取生成vmcore文件所必需的信息,不读取对生成vmcore文件无用的信息。比如,在rkey所指示的客户端的第一存储区域中,地址6、地址7、地址 8所对应的内存区域为连续的内存区域,服务器中的kdump工具解析该区域内存后,发现地址7下的内存信息不是生成vmcore文件所需要的信息,而地址6和地址8下的内存信息是生成vmcore文件所必需的信息,则构造的read消息可指示在读取地址6中的内存信息之后,不读取地址7中的内存信息,直接读取地址8中的内存信息。s405:服务器向客户端发送read消息,以读取客户端的第一存储区域中的第一信息;对于服务器可采用的不同的虚拟系统,服务器通过read消息读取客户端的第一存储区域中的第一信息、生成vmcore文件的流程相类似,下面以xen这种虚拟系统为例,详述服务器发送read消息,读取客户端第一存储区域中的第一信息的流程。elfcorehdr字段的起始处包含elf_header字段,服务器从elf_header中获取pt_note字段,其中pt_note字段包含:xenvmcore,kernelvmcore和物理cpu状态(state)信息。其中,xenvmcore,kernelvmcore和物理cpustate信息中分别包含了第一存储区域中的信息的虚拟地址。以读取xenvmcore中的信息为例,服务器获取xenvmcore的虚拟地址,并根据内存地址索引信息将该虚拟地址转化为物理地址,其中包含了max_page,domain_list,idle_pg_table等信息的物理地址,这些物理地址下的信息都是构成vmcore文件所需要的信息。读取这些物理地址下的信息的流程近似相同。下面,以读取domain_list为例,详述如何构造read消息。服务器从xenvmcore导出的物理地址中获取domain_list的起始的物理地址(为前述的第一地址的一个例子)并根据domain_list的数据结构长度获取需要读取的信息的长度(即前述的第一长度的一个例子),。然后,服务器从服务器的缓冲区中为读取的domain_list信息分配内存空间,并记录下该内存空间的启示地址(为前述的第二地址的一个例子)和长度(为前述的第二长度的一个 例子)。客户端的第一网卡根据收到的read消息中的rkey索引到rkey所指示的第一存储区域,并根据read消息中的domain_list的起始物理地址和数据结构长度,通过步骤s401中形成的dma地址映射表索引到需要读取的内存区域的i/o地址,读取相应的信息并发送给服务器;服务器收到客户端的第一网卡发送的相应信息后,将该信息存储到服务器从服务器的缓冲区中为读取的domain_list信息分配的内存空间中,从而完成domain_list的读取。其他信息的读取与上述读取流程类似,在此不再一一赘述。s406:服务器根据步骤s405中读取的客户端的第一存储区域中的第一信息,生成vmcore文件。服务器读取每一条生成vmcore文件所需要读取的信息后(这些信息组合起来称为“第一信息”),将第一信息存储到服务器的内存空间中,结合elfcorehdr字段的处理器状态信息、bios信息等,在服务器中生成vmcore文件。图5为本发明实施例提供的一种第一设备的结构示意图。如图5所示,该第一设备包括:内存501和第一网卡502。第一网卡502,用于在第一设备的操作系统的内核崩溃后,读取第一设备的内存501中的第一存储区域上的第一信息,并将读取的第一信息发送给第二设备;其中,第一信息为生成第一文件所需的信息;第一文件用于分析第一设备的操作系统的内核崩溃的原因;其中,第一网卡502为不需要第一设备的操作系统通过第一网卡502的驱动程序对第一网卡502进行控制,能够读取并传送第一设备的内存501中的数据、且能够与第二设备通信的网卡。可选地,第一网卡502还用于在读取第一设备内存501中第一存储区域上 的第一信息之前,在第一设备的操作系统的内核崩溃之后,从第二设备接收第一读取指令;第一读取指令中包括第一指示信息;第一指示信息用于指示第一存储区域上的数据中,第一信息的存储位置;第一网卡502在读取第一设备内存501中第一存储区域上的第一信息时,具体用于:从第一存储区域上,读取第一指示信息所指示的存储位置上的第一信息。可选地,第一设备还包括:处理器503,用于在第一设备的操作系统的内核崩溃之后,在第一网卡502从第二设备接收第一读取指令之前,收集第二信息并存储于第一设备的内存501的第二存储区域上,第二信息包括:第一存储区域的内存地址索引信息;第二网卡,还用于读取第二存储区域上的第二信息并发送给第二设备;第一读取指令中包括的第一指示信息是第二设备根据收到的第二信息生成的。可选地,处理器503还用于在第一设备的操作系统的内核崩溃后,在第一网卡502接收第一读取指令之前,生成第二指示信息,第二指示信息用于指示第二设备具有读取第一存储区域上的数据的权限;并将第二指示信息存储到第二存储区域上;第一网卡502还用于读取第二存储区域上的第二指示信息,并发送给第二设备;以及在收到第一读取指令之后,读取第一设备内存501中第一存储区域上的第一信息之前,确认第一读取指令中还包括第二指示信息。可选地,处理器503还用于在第一设备的操作系统的内核崩溃前,生成第三指示信息,其中,第三指示信息用于指示第二设备具有读取第二存储区域上的数据的权限;处理器503还用于控制第一网卡502将第三指示信息发送给第二设备;第一网卡502还用于在读取第二存储区域上的信息之前,从第二设备接收 第二读取指令,并确定第二读取指令中包括第三指示信息。可选地,第一网卡502在将第二存储区域上的指示信息发送给第二设备时,具体用于:第一网卡502向第二设备发送投递post消息,post消息中携带指示信息。可选地,处理器503还用于在通过第一网卡502将第二存储区域上的指示信息发送给第二设备之后,将第一设备的处理器503暂停运行。该第一设备的其他可选实现方式,可参考前述的第一设备101,这里不再赘述。图6为本发明实施例提供的一种第二设备的结构示意图。如图6所示,该第二设备包括:第二网卡601、内存602和处理器603;第二网卡601,用于接收第一设备发送的第一设备内存中的第一存储区域上的第一信息,并将接收的第一信息存储在第二设备的内存602中;处理器603,用于根据内存602中存储的第一信息,生成第一文件;其中,第一信息为生成第一文件所需的信息;第一文件用于分析第一设备的操作系统的内核崩溃的原因;第二网卡601为不需要第二设备的处理器603调用第二网卡601的驱动程序时,能够从第一设备接收数据并存储于第二设备的内存602中、且能够与第一设备通信的网卡。可选地,第二网卡601还用于在读取第一设备内存中的第一存储区域上的第一信息之前,向第一设备发送第一读取指令;第一读取指令中包括第一指示信息;第一指示信息用于指示第一存储区域上的数据中,第一信息的存储位置。可选地,第二网卡601还用于在发送第一读取指令之前,接收第一设备的内存的第二存储区域上的第二信息;第二信息包括第一存储区域的内存地址索引信息;处理器603,还用于根据第二信息生成第一指示信息,并将生成的第一指 示信息置于第一读取指令中。可选地,第二网卡601还用于在发送第一读取指令之前,接收第一设备的内存的第二存储区域上的第二指示信息,并将第二指示信息置于第一读取指令中;第二指示信息用于指示第二设备具有读取第一存储区域上的数据的权限。可选地,第二网卡601还用于在接收第二存储区域上的信息之前,接收第三指示信息,第三指示信息用于指示第二设备具有读取第二存储区域上的数据的权限;以及在确定第一设备的操作系统的内核崩溃之后,向第一设备发送第二读取指令,第二读取指令中包括第三指示信息。可选地,第二网卡601在接收第二存储区域上的信息时,具体用于:接收post消息,post消息中携带第二存储区域上的信息;从post消息中获取第二存储区域上的信息。该第二设备的其他可选实现方式,可参考前述的第二设备102,这里不再赘述。综上,本发明实施例提供一种文件生成方法、装置和系统,第一设备可在操作系统的内核崩溃后将生成内核崩溃转储文件所需的信息传送给第二设备,第二设备根据该信息生成内核崩溃转储文件,因而避免了第一设备的操作系统崩溃后,无法控制网卡向远端设备传送内核崩溃转储文件的问题。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/ 或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1