CN100456254C - 在***崩溃时提取日志和追踪缓冲器的方法和*** - Google Patents
在***崩溃时提取日志和追踪缓冲器的方法和*** Download PDFInfo
- Publication number
- CN100456254C CN100456254C CNB2006101438305A CN200610143830A CN100456254C CN 100456254 C CN100456254 C CN 100456254C CN B2006101438305 A CNB2006101438305 A CN B2006101438305A CN 200610143830 A CN200610143830 A CN 200610143830A CN 100456254 C CN100456254 C CN 100456254C
- Authority
- CN
- China
- Prior art keywords
- impact damper
- data
- memory
- memsave
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1441—Resetting or repowering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Retry When Errors Occur (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种用于在操作***发生故障之后提取缓冲器数据的方法和***。在所述故障之前注册应用。所述注册包括标识在所述故障之前存储了将提取的数据的缓冲器。所述缓冲器被保留,以将驻留于所述缓冲器中的所述数据维护为从启动直到完成所述操作***的快速重新引导均未改变。所述快速重新引导响应于所述故障。在所述快速重新引导期间生成内存储器文件,其指向驻留于所述缓冲器中的所述数据,并且被存储在易失性存储器中而不是永久性存储媒体中。经由在完成所述快速重新引导之后由应用执行的、对所述内存储器文件操作的指令来提取所述数据。
Description
技术领域
本发明涉及在操作***发生故障之后提取数据,并更具体地涉及在操作***发生故障之后从日志和追踪缓冲器中提取数据。
背景技术
日志记录和追踪工具收集与在计算***上运行的程序相关的关键信息(即,日志和追踪数据)。所收集的信息首先被写入存储器缓冲器,并随后被记录在永久性存储媒体(例如硬盘)上的文件中。不同于日志和追踪工具的实用工具被用来分析所收集和记录的日志和追踪数据。当发生***崩溃时,日志和追踪数据对于问题确定是重要的,但该数据在发生***崩溃之前可能未被完整地写出到永久性存储装置。典型地,日志和追踪数据的最重要的部分是距离崩溃时间最近时所收集的数据,但是这些数据也是最可能从永久性存储文件中丢失的部分。
传统的技术尝试在***崩溃时解决对存储于缓冲器中的日志或追踪数据进行检索,所述技术包括:内核等级调试器、崩溃转储工具以及LinuxKernel Messages Dump工具(kmsgdump)。内核等级调试器是有限制的,因为它们需要重新创建***问题,并且无法自动记录缓冲器内容。崩溃转储工具(例如Linux Kernel Crash Dump(LKCD)和用于Linux的内存储器核转储***)受到下述限制,所述限制包括时间消耗,以及当仅有相对较小部分的存储器包括了所想要的缓冲器时对整个***存储器或大部分的存储器进行的效率很低的转储。另外,不需要的开发和维护成本与必须被构建在崩溃转储工具或从转储数据中提取想要的缓冲器的单独的实用工具之中的智能有关。因为此智能必须对于每个日志或追踪工具进行定制,所以包括了额外的开发成本。kmsgdump工具在崩溃时从***提取消息,并将其传送到软盘,但是必须对于每个设备开发和维护定制起来昂贵并且依赖于硬件的代码。
因此,需要一种用于在***崩溃时从缓冲器中提取日志和追踪数据的改进技术。
发明内容
在第一实施例中,本发明提供了一种用于在操作***发生故障之后提取缓冲器数据的方法,其中在所述故障之前在所述缓冲器中存储所述数据,所述方法包括:
在所述故障之前注册应用,所述注册包括标识数据所驻留的缓冲器,由所述应用在所述缓冲器中存储所述数据,所述应用在所述操作***中执行;
保留所述缓冲器,所述保留将驻留于所述缓冲器中的所述数据维护为从所述操作***响应于所述故障而启动重新引导直到完成所述重新引导均未改变,所述重新引导是快速重新引导;
在所述重新引导期间生成内存储器文件,所述内存储器文件指向驻留于所述缓冲器中的所述数据,并且所述内存储器文件被存储在所述易失性存储器中而不是永久性存储媒体中;以及
经由对所述内存储器文件操作的指令来提取所述数据,所述指令在所述重新引导的所述完成之后由所述应用执行。
在第二实施例中,本发明提供了一种用于在操作***发生故障之后提取缓冲器数据的***,其中在所述故障之前在所述缓冲器中存储所述数据,所述***包括:
用于在所述故障之前注册应用的装置,所述用于注册应用的装置包括用于标识数据所驻留的缓冲器的装置,由所述应用在所述缓冲器中存储所述数据,所述应用在所述操作***中执行;
用于保留所述缓冲器的装置,所述保留将驻留于所述缓冲器中的所述数据维护为从所述操作***响应于所述故障而启动重新引导直到完成所述重新引导均未改变,所述重新引导是快速重新引导;
用于在所述重新引导期间生成内存储器文件的装置,所述内存储器文件指向驻留于所述缓冲器中的所述数据,并且所述内存储器文件被存储在所述易失性存储器中而不是永久性存储媒体中;以及
用于经由对所述内存储器文件操作的指令来提取所述数据的装置,所述指令在所述重新引导的所述完成之后由所述应用执行。
在第三实施例中,本发明提供了至少一个机器可读的程序存储设备,其有形地包括可被机器执行的至少一个指令程序,用以执行一种在操作***发生故障之后提取缓冲器数据的方法,所述方法包括:
在所述故障之前注册应用,所述注册包括标识数据所驻留的缓冲器,由所述应用在所述缓冲器中存储所述数据,所述应用在所述操作***中执行;
保留所述缓冲器,所述保留将驻留于所述缓冲器中的所述数据维护为从所述操作***响应于所述故障而启动重新引导直到完成所述重新引导均未改变,所述重新引导是快速重新引导;
在所述重新引导期间生成内存储器文件,所述内存储器文件指向驻留于所述缓冲器中的所述数据,并且所述内存储器文件被存储在所述易失性存储器中而不是永久性存储媒体中;以及
经由对所述内存储器文件操作的指令来提取所述数据,所述指令在所述重新引导的所述完成之后由所述应用执行。
在第四实施例中,本发明提供了一种用于部署计算基础设施的方法,包括将计算机可读代码集成到计算***中,其中所述代码与所述计算***相结合能够执行在操作***发生故障之后提取缓冲器数据的过程,其中在所述故障之前在所述缓冲器中存储所述数据,所述过程包括:
在所述故障之前注册应用,所述注册包括标识数据所驻留的缓冲器,由所述应用在所述缓冲器中存储所述数据,所述应用在所述操作***中执行;
保留所述缓冲器,所述保留将驻留于所述缓冲器中的所述数据维护为从所述操作***响应于所述故障而启动重新引导直到完成所述重新引导均未改变,所述重新引导是快速重新引导;
在所述重新引导期间生成内存储器文件,所述内存储器文件指向驻留于所述缓冲器中的所述数据,并且所述内存储器文件被存储在所述易失性存储器中而不是永久性存储媒体中;以及
经由对所述内存储器文件操作的指令来提取所述数据,所述指令在所述重新引导的所述完成之后由所述应用执行。
有利地,本发明通过提供用于在***崩溃之后获得日志和追踪缓冲器的内容的可靠的方法和***,增强了操作***的可服务性,其中所述内容已在崩溃之前被保存。缓冲器内容被提取而不会由于崩溃导致丢失任何日志和追踪信息。在***重新引导之后,本发明提供了允许写出缓冲器内容的易于使用的接口。本发明提供了新颖的基础设施,其可以被任何应用、工具或实用工具用来在***崩溃时保留其缓冲器数据。即,这里所公开的新颖的基础设施是可被多种应用、工具和实用工具共享的公共基础设施,从而避免了对多种提取机制(每种机制具有被定制用于特定应用、工具或实用工具的编码)的需要。此外,由于本发明在内核层中实现,所以易于防止黑客对所公开方法的滥用。
附图说明
图1是根据本发明实施例的用于在操作***发生故障后提取缓冲器数据的***的框图。
图2是描述根据本发明实施例的提取图1的***的缓冲器的数据的过程的流程图。
图3A描述根据本发明实施例的图2的元数据存储图1的缓冲器的存储器区域。
图3B描述根据本发明实施例的图2的存储保留模块保留图3A的存储器区域。
图3C描述根据本发明实施例的图2的缓冲器提取模块从图3A的存储器区域提取缓冲器。
图4描述根据本发明实施例的用于实现提取图1的***的缓冲器的数据的计算机***。
具体实施方式
本发明的方法和***公开了一种单一的、公用的、高效的机制,该机制可以由操作***提供给操作***资源的用户(例如应用和设备驱动程序),并且可以在***崩溃时提取日志或追踪缓冲器数据。当计算***正运行在***崩溃之前就运行的操作***的第一实例之时存储所述日志或追踪缓冲器数据,并且当操作***的第二实例正在运行时进行数据提取。由响应于***崩溃而执行的快速重新引导来生成所述第二实例。
定义
以下定义适用于这里所公开的本发明:
操作***:通过充当软件程序和***硬件之间的接口而管理计算***并使得软件程序在计算***上的运行更便利的软件。操作***的功能包括:管理硬件(例如随机存取存储器(RAM)、硬盘、打印机、软盘驱动器、CD-ROM驱动器、声卡和视频卡以及其它设备)、向用户提供图形界面、确保***的安全性、以及提供网络基础设施。
内核:任何操作***的核心部件。内核充当硬件和其它***部件(软件程序、设备驱动程序等)之间的接口。内核在“特权”级别运行,并可以执行对硬件的大多数的允许操作。
设备驱动程序:管理计算***中的特定硬件设备的软件。设备驱动程序在与内核相同的特权级别运行。设备驱动程序的示例包括键盘驱动程序和网卡驱动程序。
***崩溃:操作***(并且由此导致其它软件)发生故障或者检测到其无法继续的状态。***崩溃的原因包括:访问无效存储器区域、数据讹误或死锁。
日志记录工具:应用或设备驱动程序在***工作期间捕获服务成员的必要信息的机制。信息或“日志”(也称作日志数据)首先被写入作为(例如随机存取存储器中的)存储器区域的一个或多个缓冲器,并随后(例如以一个或多个文件的形式)被传送到存储媒体或设备,诸如硬盘或软盘。编写与日志记录工具不同的实用工具或工具来分析日志数据。日志记录工具的示例是Linux操作***内核中的syslog机制。
追踪工具:追踪软件的特定部分中的代码流的机制。与通过日志记录工具收集日志数据类似,追踪工具首先将其收集的数据(也称作追踪数据)写入缓冲器,并随后将所述数据传送到存储媒体/设备上的文件。追踪工具的示例是Linux操作***内核的dprobes追踪工具。
引导:将计算机***引至可用状态的过程。引导包括下述步骤,诸如:验证附接于***的设备、运行操作***、初始化各种设备等等。
重新引导:退出或关闭当前的操作***上下文并重新进行“引导”定义中描述的引导过程的过程。在重新引导期间,能够切换到不同的内核、不同的设备驱动程序或甚至完全不同的操作***。
快速重新引导的特征
当与操作***一起工作时,***重新引导的时间是主要瓶颈。例如,在生产***中,***可用性是重要需求,并且软件开发者在其工作期间需要多次重新引导***,二者都需要一种快速重新引导***并使***返回工作状况的方法。通过“快速重新引导”特征来提供这种方法。
如果未执行快速重新引导,则***重新引导的典型阶段如下:
(1)当前***被关闭。文件***被卸载,文件被写回存储媒体,并且应用被终止;
(2)将控制移交给***固件或者基本输入/输出***(BIOS),以执行基本操作,诸如:检查***上存在的设备、复位设备、清除***存储器等等;
(3)固件或BIOS将控制移交给引导加载程序。该引导加载程序加载操作***内核,并将控制移交给该内核;以及
(4)操作***内核启用***中的处理器、初始化设备、安装文件***、加载应用并将***引至可用状况(例如,操作***准备好与用户联系)。
如上所述,当操作***在没有快速重新引导的情况下进行重新引导时,固件或者基本输入/输出***(BIOS)擦除***存储器内容(即,在重新引导被完全擦除之前存在的内核中的存储器内容)。与之相反,当***执行快速重新引导时,上述的阶段(2)和(3)被跳过。因此,快速重新引导避免了***存储器清除过程,并且之前的内核中的存储器内容(即,在快速重新引导之前存在的内核)在快速重新引导之后仍保持可用。用于Linux内核的快速重新引导特征的一个示例是kexec,在http://www-106.ibm.com/developerworks/linux/library/l-kexec.html以及可在http://www.osdl.org/docs/reducing_system_reboot_time_with_kexec.pdf找到的Pfiffer、Andy的“Reducing System Reboot Time With kexec”(Open Source Development Labs,Inc.)中均对其进行了描述。
本发明使用了快速重新引导特征及其从一个内核保留到下一个内核的存储器内容的副效益,以在***崩溃之后提取(即获取)缓冲器数据。在下文中,除非另外说明,否则术语“重新引导”指代使用快速重新引导特征的重新引导。
***概述
图1是根据本发明实施例的用于在操作***发生故障后提取缓冲器数据的***的框图。在***100中,日志记录工具或追踪工具经由接口106从缓冲器104提取数据。所述日志记录工具或追踪工具驻留于例如操作***内核(未示出)之中。将被提取的数据在***崩溃之前被收集和保存,并在重新引导期间可用。如这里所使用的,下文的“重新引导期间”(即,“***崩溃期间”)被定义为在从就在***崩溃之前存在的操作***的第一实例(即,第一上下文)到响应于所述崩溃而执行的重新引导所生成的操作***的第二实例(即,第二上下文)的转换之后。
接口106由本发明提供,并包括多种模块,所述模块包括构建在操作***内核之中的基础设施。所述基础设施允许日志记录和追踪工具快速地和容易地访问它们各自的缓冲器,所述缓冲器的内容在***崩溃之前被保存并被保留,从而这些内容可以在重新引导之后访问。以下相对于图2描述了包括所述基础设施的模块。
缓冲器提取过程
图2是描述根据本发明实施例的提取图1的***的缓冲器的数据的过程的流程图。提取缓冲器的数据或提取缓冲器的内容在此也被简称为提取缓冲器或缓冲器提取。在步骤200开始缓冲器提取过程。注册模块202将自身注册到缓冲器追踪模块204。在可替换实施例中,多个注册模块注册到缓冲器追踪模块204。注册模块是在操作***中执行的软件应用,并且包括例如被设计用于问题确定任务的应用、工具和实用工具,诸如日志记录工具和追踪工具。下文中,术语“应用”、“实用工具”和“工具”被互换地使用,并被特别地指代在***崩溃之前在易失性存储器的区域中存储数据的软件,其中所述数据将在崩溃之后被提取出来。由注册模块202进行的注册包括向缓冲器追踪模块204请求标识出存储数据的易失性存储器中的存储器区域(即缓冲器),所述数据需要在重新引导期间可用(例如日志记录工具所需的缓冲器数据)。在注册模块202所标识的存储器区域中存储所述数据。即,所标识的存储器区域在***崩溃之前存储数据,并且本发明使得该数据可以在响应于崩溃而执行的对操作***的重新引导之后进行访问。前述的由注册模块202执行的标识在此也被简称为标识出将在重新引导期间保留的存储器区域。
例如,一应用在其操作期间创建和使用数据结构1到10。由于该应用为这些数据结构分配存储器,因此该应用了解所分配的存储器总量以及与每一数据结构相关联的存储器地址。当此应用请求向缓冲器追踪模块204注册时,该应用将数据结构1标识为其存储器区域需要在重新引导期间保留的数据结构。注册请求通过包括分配给数据结构1的存储器总量以及数据结构1的起始存储器地址而标识该存储器区域。
通过注册模块202进行的注册被缓冲器追踪模块204所接受。对于每次注册,缓冲器追踪模块204记录请求过注册的注册模块以及注册中所标识的存储器区域,并将所标识的存储器区域信息存储在元数据206(即,一个或多个数据结构)中。如这里所使用的,存储器区域信息被定义为存储器区域所需要的存储器总量以及存储器区域的基本存储器地址,诸如该区域的起始地址。元数据206由缓冲器追踪模块204所维护,并使其在重新引导期间可用,如下所述。元数据206包括注册名称、注册模块202所需的存储器区域的大小、注册模块202所需的存储器区域的列表。注册名称标识了进行注册请求的注册模块202,并在重新引导之后被用来将请求中包括的所存储的存储器区域信息关联于进行请求的注册模块。存储器区域的列表例如是把指示出将要保留的存储器区域的起始地址以及存储器区域的大小的列表的每个节点链接起来的列表。
元数据206的存储位置是存储器中的固定位置或者下述存储器地址,其在第一内核中存在,并被传递到响应于***崩溃而执行的快速重新引导期间被引导的第二内核,如下所述。本领域技术人员将了解,已存在用于将地址传递给第二内核的技术。
缓冲器追踪模块204还允许对元数据206中的存储器区域信息的动态(即实时)更新,以反映注册模块202对存储器使用的改变。对存储器使用的这些改变是对存储器区域信息的改变,并且例如包括:用于将在重新引导期间保留的数据的存储器使用的增加、或者清除用于该数据的存储器。
在生成元数据206中的数据结构之后的某时,发生***崩溃。在崩溃之后,使用快速重新引导特征来启动步骤208中的重新引导。图2中在虚线之间描述的部分包括在快速重新引导期间发生动作的模块和发生的步骤。再一次地,快速重新引导跳过了典型的由固件或BIOS对***存储器的清除。在重新引导期间,存储器保留模块210工作,并访问元数据206中的存储器区域。在将元数据存储器地址传递到第二内核的前述情形中,存储器保留模块210接收所传递的元数据地址。在重新引导期间,但在内核开始将存储器分配给其它部件(例如,设备驱动程序和应用)使用之前,存储器保留模块210指示内核的存储器管理模块(未示出)来保留在元数据206中指示的存储器区域。该保留确保了将在重新引导期间保留的存储器区域不会被分配给操作***资源的任何其它用户所使用。如这里所使用的,操作***资源的用户包括应用和设备驱动程序。该保留还确保了驻留于所指示的存储器区域中的数据从重新引导开始直到重新引导完成均被维护为未改变状态。
在由元数据206指示的存储器区域被存储器保留模块210保留之后,在重新引导期间缓冲器提取模块212进行工作。对于缓冲器追踪模块204接收的每次注册,由缓冲器提取模块212创建伪文件。如这里所使用的,伪文件(也称为内存储器文件)被定义为仅在易失性存储器(例如RAM)中作为已命名单元而存储的数据位的序列,其不在非易失性存储媒体(即,永久性存储媒体)中进行任何备份存储。伪文件的名称标识或指向在易失性存储器中存储的数据。伪文件类似于典型的计算机文件,除了计算机文件在非易失性存储媒体(例如,硬盘或软盘)上存储,而伪文件仅在易失性存储器上存储。
由缓冲器提取模块212创建的伪文件指向数据,所述数据也是元数据206指示的存储器区域的内容。即,伪文件的数据是注册模块202请求在重新引导期间保留的存储器区域(即缓冲器)的实际内容。由于日志记录工具无法直接访问元数据206,所以伪文件充当了允许日志记录工具访问其内容在重新引导期间被保留的缓冲器的接口。
例如,在Linux内核中,可以使用“proc”文件***来创建伪文件。在此情形中,伪文件或内存储器文件不在任何后备媒体(硬盘、软盘等)上存储。由proc创建的伪文件可以由其在/proc文件***中的名称所访问。例如,proc创建的名为xyz的伪文件通过/proc/xyz来引用。
使用标准的独立于平台的文件格式(诸如Executable and LinkingFormat(ELF))来创建本发明中的伪文件。使用标准的独立于平台的文件格式是有利的,因为它允许标准命令被用于对伪文件进行操作,从而避免对用于访问所保留的缓冲器的数据的定制编码或依赖于硬件的技术的需要。在步骤214,在重新引导完成之后,使用对伪文件进行操作的指令而将由缓冲器提取模块212创建的伪文件写出(即,在重新引导期间保留的日志或追踪缓冲器的内容被提取)。在重新引导完成后由注册模块202执行写出伪文件的指令。在一实施例中,指令通过引用伪文件名称而写出缓冲器数据,所述伪文件名称精确地指向缓冲器数据而不会标识易失性存储器的任何其它内容。伪文件数据例如由***管理员所写出。在前述的/proc/xyz伪文件的情形中,任何标准的文件拷贝命令(诸如Linux的cp命令)都可以被用于写出文件。因此,通过用标准命令借助名称来访问伪文件,可以提取日志和追踪缓冲器中的数据。一旦数据被提取出来,就在步骤216将了解缓冲器内容的软件工具用于分析所提取的日志或追踪数据。
在步骤214已将缓冲器内容提取出来之后,所保留的存储器区域可选地可被存储器清除模块218所清除。清除所保留的存储器区域的一个示例包括删除对应于缓冲器的伪文件。一旦存储器被清除,它就可以被再次用于正常的内核存储器分配。在写出和分析伪文件数据之后以及在清除与所保留的存储器区域相关联的存储器的可选步骤之后,在步骤220缓冲器提取过程结束。
如上述的缓冲器提取过程所指示的,注册模块202、缓冲器追踪模块204、存储器保留模块210和缓冲器提取模块212共同提供可以将数据存储在易失性存储器的缓冲器中的任何应用所使用的单一接口,其中数据将在***发生故障之后从该缓冲器中提取。该单一接口可被任何应用一起共享。此外,该接口向任何应用提供以下装置,用于:(1)注册应用,(2)保留存储将被提取数据的存储器区域,从而在***重新引导期间不会向操作***资源的用户分配这些存储器区域,以及(3)在重新引导期间生成指向将被提取数据的伪文件。响应于应用的注册,由接口自动提供所述保留和生成的特征。因此,该接口提供了一种易于使用的机制,用于通过使用对伪文件操作的指令,在***出现故障时提取数据,如上所述。
附录呈现了用于实现图2的缓冲器提取过程的代码。以下呈现了缓冲器提取过程的示例。尽管这里呈现的示例解决了对应用所使用的缓冲器数据的保留,但是本发明还可由设备驱动程序利用,以在快速重新引导期间保留设备阶段信息,以便使从前一阶段恢复操作更方便。
缓冲器提取的示例
图3A-3C描述了图2的缓冲器提取过程的实现的示例。图3A描述在图2的缓冲器提取过程中关注于缓冲器追踪模块204在***崩溃和快速重新引导之前的操作的第一部分300。名为logxyz工具302的日志记录工具将自身注册到缓冲器追踪模块204。由logxyz使用的日志记录缓冲器被存储在***存储器308的三个不同存储器区域310、312、314。关于存储器区域310、312、314的大小和起始地址的信息由缓冲器追踪模块204从logxyz工具302所收集,并被存储在用于logxyz的元数据306中。
图3B描述在图2的缓冲器提取过程中关注于存储器保留模块210的操作的第二部分320。由于***挂起导致***崩溃,随后启动快速重新引导。在重新引导阶段期间,存储器保留模块210访问用于logxyz的元数据306。通过使用从对用于logxyz的元数据306的访问中收集的存储器区域信息,存储器保留模块210保留驻留于***存储器308中的存储器区域310、312、314。所保留的存储器区域是由元数据指示的区域。
图3C描述在图2的缓冲器提取过程中关注于缓冲器提取模块212的操作的第三部分340。在重新引导阶段期间,缓冲器提取模块212使用所存储的用于logxyz的元数据306(参见图3B)来创建名为logxyz-buffer的伪文件,其数据是驻留于***存储器308中的存储器区域310、312、314的内容。伪文件在/proc文件***中创建,并作为/proc/logxyz-buffer 344而引用。通过执行简单文件复制操作而提取logxyz工具302(参见图3A)的日志缓冲器的数据。在Linux***中,命令
cp/proc/logxyz-buffer/home/test/log.buf
将缓冲器内容拷贝到/home/test目录中的名为log.buf的文件中。
被设计与logxyz工具一起使用的日志分析器实用工具分析文件log.buf的内容。
尽管以上呈现的实施例仅使用一种日志工具,但是本发明预期了将***100(参见图1)扩大为同时执行上述操作的若干工具或实用工具。
用于缓冲器数据提取的计算机***
图4描述根据本发明实施例的用于实现在图1的***中在操作***发生故障之后提取缓冲器数据的计算机***。计算机***400适当地包括处理器402、主存储器404、存储器控制器408和至少一个输入/输出(I/O)接口410,所有这些部件经由***总线412互连。主存储器404包括操作***406和计算机程序414。主存储器404是易失性存储器(例如RAM),并包括一种包括了图2的流程图中描述的缓冲器提取逻辑的算法。在一实施例中,计算机程序414包括图2的逻辑的算法。作为图4中的计算机程序414的可替换位置,计算机程序414还可被包括在操作***406中。作为一个示例,处理器402是基于x86体系结构的Intel处理器,而操作***406是Linux操作***。
处理器402执行计算机***400的计算和控制功能,并且包括适当的中央处理单元。处理器402可包括单个集成电路(诸如微处理器),或可包括任何适当数量的集成电路设备和/或电路板,其协同工作来完成处理器的功能。处理器402适当地执行一个或多个计算机程序,包括计算机程序414。在一实施例中,处理器402执行实现图2的流程图中描述的逻辑的算法。
I/O接口410可包括用于从外部源(诸如外部设备416)交换信息的任何***。外部设备416可包括传统的外部设备,包括显示监视器、键盘、鼠标、打印机、绘图机、传真机等。计算机***400可使用适合的通信信道(未示出)经由通信接口连接于一个或多个其它计算机,所述通信信道诸如调制解调器通信路径、计算机网络等。计算机网络(未示出)可包括局域网(LAN)、广域网(WAN)、内联网、和/或因特网。
I/O接口410还允许计算机***400存储并从辅助的存储设备418检索信息(例如程序指令或数据),所述存储设备418诸如非易失性存储设备(例如,接收CD-ROM盘(未示出)的CD-ROM驱动器)。计算机***400可以存储并从其它的辅助存储设备(未示出)检索信息,所述存储设备418可包括直接存取存储设备(DASD)(例如硬盘或软盘)、磁光盘驱动器、磁带驱动器或无线通信设备。
存储器控制器408通过使用与处理器402不同的处理器(未示出),而负责将所请求的信息从主存储器404和/或通过I/O接口410移动到处理器402。尽管出于解释目的将存储器控制器408示出为单独实体,但是本领域技术人员应理解,在实践中,由存储器控制器408提供的功能的某些部分实际可驻留于与处理器402、主存储器404和/或I/O接口410相关联的电路中。
应该理解,主存储器404将不必非要包含所示出的所有机制的所有部分。例如,计算机程序414和操作***406的某些部分可被加载到指令高速缓存(未示出)中,用于处理器402来执行,而其它文件可被存储在磁或光盘存储设备(诸如存储设备418)上。此外,尽管所示出的计算机程序414驻留于与操作***406相同的存储位置中,但是应该理解,主存储器404可包括完全不同的存储位置。
I/O接口410的终端接口允许***管理员和计算机程序员与计算机***400通信。尽管图4中描述的计算机***400仅包含单个主处理器402和单个***总线412,但是应该理解,本发明可同等地应用于具有多个处理器和多个***总线的计算机***。类似地,尽管***总线412是典型的硬连线的、多点总线,但是在与计算机有关的环境中支持双向通信的任何连接装置都是可用的。
根据本发明的计算机***400例如是个人计算机。不过,本领域技术人员将理解,本发明的方法和装置可同等地应用于任何计算机***,不管该计算机***是复杂的多用户计算装置还是单个用户的设备,诸如工作站。
注意,可在本发明范围内对图4所述的计算机***400做出多种修改、添加或删除,诸如添加高速缓冲存储器或其它***设备。所呈现的图4仅例示了计算机***400的某些突出特征。
重要地是要注意,尽管本发明已经(并将继续)在完全运行的计算机***的上下文中进行描述,不过,本领域技术人员将理解,本发明的机制能够作为程序产品以多种形式分布,并且本发明可同等地被应用,而不管实际用来执行所述分布的信号承载媒体的具体类型。信号承载媒体的示例包括可记录类型的媒体(诸如软盘和CD-ROM)以及传输类型的媒体(诸如,包括无线通信链路的数字和模拟通信链路)。
因此,本发明公开了一种用于部署或集成计算基础设施的方法,包括将计算机可读代码集成到计算机***400中,其中所述代码与计算机***400相结合能够执行用于在操作***发生故障之后提取缓冲器数据的过程。
本发明可以被包括在例如制品(例如一个或多个计算机程序产品)中,所述制品例如具有计算机可用媒体。该媒体中包括例如用于提供本发明的能力并使其更便利的计算机可读程序代码工具。所述制品可被包括为计算机***的一部分,或者单独出售。
此外,可以提供用来执行本发明的能力的机器可读的至少一个程序存储设备,其有形地包括机器可执行的至少一个代码程序。
通过示例提供了这里描述的流程图。在不脱离本发明精神的情况下,存在对于这里所述的这些图或步骤(或操作)的变体。例如,在某些情形中,可以用不同顺序执行步骤,或者可以添加、删除或修改步骤。所有这些变体都被认为是权利要求所阐述的本发明的一部分。
尽管这里已经出于例示性目的描述了本发明的实施例,但是对于本领域技术人员来说许多修改和改变将变得明显。因而,权利要求旨在包含落在本发明真正的精神和范围内的所有这些修改和改变。
附录
Memsave.patch代码
以下代码(memsave.patch)实现了本发明的易于使用的新颖的基础设施,其充当了将由任意日志或追踪工具使用的公用接口。此代码允许Linux内核的任意部件将自身注册到模块,以请求在重新引导期间保留指定的存储器区域。一旦发生重新引导,该区域的内容就可被写出为普通文件。此代码提供的示范说明具有为保留存储器的两个不同区域而进行的两次注册。一旦进行快速重新引导,这两个区域就被提取为文件。
---
linux-patch-hari/arch/i386/Kconfig | 6++
linux-patch-hari/arch/i386/kernel/Makefile | 2
linux-patch-hari/arch/i386/kernel/mdummy.c | 46+++++++++++++++++
linux-patch-hari/arch/i386/kernel/memsave.c | 45+++++++++++++++++
linux-patch-hari/arch/i386/kernel/setup.c | 6++
linux-patch-hari/fs/proc/Makefile | 1
linux-patch-hari/fs/proc/proc_memsave.c | 73
++++++++++++++++++++++++++++
linux-patch-hari/fs/proc/proc_misc.c | 23++++++++
linux-patch-hari/fs/proc/root.c | 4+
linux-patch-hari/include/asm-i386/memsave.h | 58++++++++++++++++++++++
linux-patch-hari/include/linux/proc_fs.h | 5+
11 fi1es changed,269 insertions(+)
diff-puN arch/i386/Kconfig~memsave arch/i386/Kconfig
---linux-patch/arch/i386/Kconfig~memsave 2004-08-29 11:19:10.000000000+0530
+++linux-patch-hari/arch/i386/Kconfig 2004-08-29 11:20:55.000000000+0530
@@-864,6+864,12@@config REGPARM
generate incorrect output with certain kernel constructs when
-mregparm=3is used.
+config MEMSAVE
+ bool“preserve memory across reboots”
+ depends on KEXEC
+ help
+ Allow memory to be preserved across reboots
+
endmenu
diff-puN arch/i386/kernel/setup.c~memsave arch/i386/kernel/setup.c
---linux-patch/arch/i386/kernel/setup.c~memsave 2004-08-29
11:22:24.000000000+0530
+++linux-patch-hari/arch/i386/kernel/setup.c 2004-08-30 22:32:02.000000000
+0530
@@-48,6+48,7@@
#include<asm/io_apic.h>
#include<asm/ist.h>
#include<asm/io.h>
+#include<asm/memsave.h>
#include“setup_arch_pre.h”
#include<bios_ebda.h>
@@-1097,6+1098,9@@static unsigned long_init setup_memory
}
}
#endif
+
+ reserve_bootmem(MEMSAVE_BASE,MEMSAVE_SIZE);
+
return max_low_pfn;
}
#else
@@-1358,6+1362,8@@void_init setup_arch(char**cmdline_p)
#endif
paging_init();
+ reserve_memsave_bootmem();
+
#ifdef CONFIG_EARLY_PRINTK
{
char*s=strstr(*cmdline_p,“earlyprintk=”);
diff-puN/dev/null include/asm-i386/memsave.h
---/dev/null 2003-01-30 15:54:37.000000000+0530
+++linux-patch-hari/include/asm-i386/memsave.h 2004-08-30 22:26:51.000000000
+0530
@@-0,0+1,58@@
+/*
+*Arch specific functions for the memory preserving reboot infrastructure
+*API
+*
+*Created by:Hariprasad Nellitheertha
+*
+*Copyright(C)IBM Corporation,2004.All rights reserved.
+*/
+
+#include<linux/bootmem.h>
+
+#define MEMSAVE_BASE 0x2000000
+#define MEMSAVE_SIZE 0x0001000/*1 page should be sufficient*/
+#define MEMSAVE_ENTRY_SIG 0xaeaecece
+#define MEMSAVE_END_SIG 0xdeadbeef
+
+/*The memsave structure*/
+
+struct memsave{
+ unsigned long sig;/*Indicates end of list*/
+ char name[10];/*Name of the interface*/
+ unsigned long start;/*Start of memory region,physical address*/
+ unsigned long size;/*Size of the region*/
+};
+
+ extern int memsave_add_entry(struct memsave*);
+
+#ifdef CONFIG_MEMSAVE
+static inline void reserve_memsave_regions(void)
+{
+
+ struct memsave*ufp;
+ int n,i=MEMSAVE_SIZE/sizeof(struct memsave);
+
+ bufp=(struct memsave*)_va(MEMSAVE_BASE);
+
+ for(n=0;n<i;n++){
+ if(bufp->sig!=MEMSAVE_ENTRY_SIG)
+ return;
+ /*Reserve the memory claimed by this entry*/
+ reserve_bootmem(bufp->start,bufp->size);
+ (char*)bufp+=sizeof(struct memsave);
+ }
+}
+
+static inline void reserve_memsave_bootmem(void)
+{
+ unsigned long*sig;
+
+ sig=(unsigned long*)_va(MEMSAVE_BASE);
+ if(*sig!=MEMSAVE_ENTRY_SIG)/*List is empty*/
+ *sig=MEMSAVE_END_SIG;/*Initialize the list*/
+ else /*There are entries.Reserve the regions*/
+ reserve_memsave_regions();
+}
+#else
+static inline void reserve_memsave_bootmem(void);
+#endif
diff-puN/dev/null arch/i386/kernel/memsave.c
---/dev/null 2003-01-30 15:54:37.000000000+0530
+++linux-patch-hari/arch/i386/kernel/memsave.c 2004-08-31 00:20:00.000000000
+0530
@@-0,0+1,45@@
+/*
+*The APIs for the memory saving reboot infrastructure.
+*
+*Created by Hariprasad Nellitheertha
+*
+*Copyright(C)IBM Corporation,2004.All rights reserved.
+*/
+
+#include<asm/errno.h>
+#include<asm/memsave.h>
+
+/*
+*This routine adds a new memsave entry to the list.If no entry
+*exists,a new one is initialized.
+*/
+int memsave_add_entry(struct memsave*msave)
+{
+
+ struct memsave*bufp;
+ int n,i=MEMSAVE_SIZE/sizeof(struct memsave);
+
+ bufp=(struct memsave*)_va(MEMSAVE_BASE);
+
+ /*Loop through the structure till we find an empty slot*/
+ while((i--)&&(bufp->sig!=MEMSAVE_END_SIG))
+ (char*)bufp+=sizeof(struct memsave);
+
+ if(!i)/*No more entries accepted*/
+ return-EFAULT;
+
+ /*We found an available slot.Register the entry.
+ *We do not validate the entry.Just copy it
+ */
+ memcpy(bufp,msave,sizeof(struct memsave));
+ bufp->sig=MEMSAVE_ENTRY_SIG;
+
+ /*Mark the next entry as available*/
+ if(i>1){
+ (char*)bufp+=sizeof(struct memsave);
+ bufp->sig=MEMSAVE_END_SIG;
+ }
+
+ return 0;
+}
diff-puN arch/i386/kernel/Makefile~memsave arch/i386/kernel/Makefile
---linux-patch/arch/i386/kernel/Makefile~memsave 2004-08-29
13:50:53.000000000+0530
+++linux-patch-hari/arch/i386/kernel/Makefile 2004-08-30 20:27:27.000000000
+0530
@@-32,6+32,8@@obj-$(CONFIG_ACPI_SRAT)+=srat.o
obj-$(CONFIG_HPET_TIMER) +=time_hpet.o
obj-$(CONFIG_EFI) +=efi.o efi_stub.o
obj-$(CONFIG_EARLY_PRINTK) +=early_printk.o
+obj-$(CONFIG-MEMSAVE) +=memsave.o
+obj-$(CONFIG-MEMSAVE) +=mdummy.o
EXTRA_AFLAGS:=-traditional
diff-puN fs/proc/proc_misc.c~memsave fs/proc/proc_misc.c
---linux-patch/fs/proc/proc_misc.c~memsave 2004-08-29 20:44:57.000000000
+0530
+++linux-patch-hari/fs/proc/proc_misc.c 2004-08-30 22:26:21.000000000+0530
@@-49,6+49,7@@
#include<asm/io.h>
#include<asm/tlb.h>
#in clude<asm/div64.h>
+#in nclude<asm/memsave.h>
#define LOAD_INT(x)((x)>>FSHIT)
#define LOAD_FRAC(x)LOAD_INT(((x)&(FIXED_1-1))*100)
@@-689,6+690,28@@void_init_proc_misc_init(void)
(size_t)high_memory-PAGE_OFFSET+PAGE_SIZE;
}
#endif
+#ifdef CONFIG_MEMSAVE
+ /*Scan through the entries and create files for registered
+ *entries
+ */
+ {
+ struct memsave*bufp;
+ int n,i=MEMSAVE_SIZE/sizeof(struct memsave);
+
+ bufp=(struct memsave*)_va(MEMSAVE_BASE);
+
+ for(n=0;n<i;n++){
+ if(bufp->sig!=MEMSAVE_ENTRY_SIG)
+ break;
+ entry=create_proc_entry(bufp->name,s_IRUSR,NULL);
+ if(entry){
+ entry->proc_fops=&proc_memsave_operations;
+ entry->size=bufp->size;
+ }
+ (char*)bufp+=sizeof(struct memsave);
+ }
+ }
+#endif
if(prof_on){
entry=create_proc_entry(“profile”,S_IWUSR|S_IRUGO,NULL);
if(entry){
diff-puN include/linux/proc_fs.h~memsave include/linux/proc_fs.h
---/linux-patch/include/linux/proc_fs.h~memsave 2004-08-29 20:59:30.000000000
+0530
+++linux-patch-hari/include/linux/proc_fs.h 2004-08-30 23:41:17.000000000
+0530
@@-114,6+114,11@@extern struct dentry*proc_lookup(struct
extern struct file_operations proc_kcore_operations;
extern struct file_operations proc_kmsg_operations;
extern struct file_operations ppc_htab_operations;
+#ifdef CONFIG_MEMSAVE
+extern struct file_operations proc_memsave_operations;
+extern void memsave_dummy_entry(void);
+extern void memsave_dummy_entry_2(void);
+#endif
/*
*proc_tty.c
diff-puN fs/proc/Makefile~memsave fs/proc/Makefile
---linux-patch/fs/proc/Makefile~memsave 2004-08-29 21:03:28.000000000+0530
+++linux-patch-hari/fs/proc/Makefile 2004-08-29 21:04:10.000000000+0530
@@-12,3+12,4@@proc-y+=inode.o root.o base.o ge
proc-$(CONFIG_PROC_KCORE)+=kcore.o
proc-$(CONFIG_PROC_DEVICETREE)+=proc_devtree.o
+proc-$(CONFIG_MEMSAVE)+=proc_memsave.o
diff-puN/dev/null fs/proc_memsave.c
---/dev/null 2003-01-30 15:54:37.000000000+0530
+++linux-patch-hari/fs/proc/proc_memsave.c 2004-08-31 00:20:19.00000000
+0530
@@-0,0+1,73@@
+/*
+*fs/proc/proc_memsave.c Contains the routines that abstract the saved
+*memory regions as files.
+*
+*Created by:Hariprasad Nellitheertha
+*
+*Copyright(C)IBM Corporation,2004.All rights reserved
+*
+*/
+
+#include<linux/mm.h>
+#include<linux/proc_fs.h>
+#include<linux/capability.h>
+#include<linux/user.h>
+#include<linux/user.h>
+#include<asm/memsave.h>
+#include<asm/uaccess.h>
+#include<asm/io.h>
+
+static int open_memsave(struct inode*inode,struct file*filp)
+{
+ return capable(CAP_SYS_RAWIO)?0:-EPERM;
+}
+
+static ssize_t read_memsave(struct file*,char_user*,size_t,loff_t*);
+
+struct file_operations proc_memsave_operations={
+ .read =read_memsave,
+ .open =oper_memsave,
+};
+
+/*
+*read_memsave()
+*
+*This routine provides the interface to read the saved memory regions.
+*It uses the file pointer to identify the region based on the name.It
+*then reads the corresponding memory region and returns it back to the
+*user.
+*
+*/
+static ssize_t read_memsave(
+struct file*file,char_user*buffer,size_t buflen,loff_t*fops)
+{
+ struct memsave*msave;
+ int n;
+ void*region;
+
+ /*First,get to the correct entry in the list*/
+ msave=(struct memsave*)_va(MEMSAVE_BASE);
+ for(n=0;n<(MEMSAVE_SIZE/sizeof(struct memsave));n++){
+ if(msave->sig!=MEMSAVE_ENTRY_SIG)
+ return-EFAULT;
+ if(!strcmp(msave->name,file->f_dentry->d_name.nema))
+ break;/*Found the entry*/
+ (char*)msave+=sizeof(struct memsave);
+ }
+
+ if(msave->sig!=MEMSAVE_ENTRY_SIG)
+ return-EFAULT;
+
+ if(buflen>msave->size-*fpos)
+ buflen=msave->size-*fops;
+
+ region=_va(msave->start);
+
+ if(copy_to_user(buffer,region+*fops,buflen)){
+ return-EFAULT;
+ }
+
+ *fops+=buflen;
+
+ return buflen;
+}
diff-puN/dev/null arch/i386/kernel/mdummy.c
---/dev/null 2003-01-30 15:54:37.000000000+0530
+++linux-patch-hari/arch/i386/kernel/mdummy.c 2004-08-30 23:38:01.000000000
+0530
@@-0,0+1,46@@
+/*
+*Contains code to create dummy entries for memsave.
+*
+*Created by Hariprasad Nellitheertha
+*
+*Copyright(C)IBM Corporation,2004.All rights reserved.
+*
+*/
+
+#include<asm/errno.h>
+#include<asm/memsave.h>
+
+struct memsave msave_dum;
+struct memsave msave_dum_2;
+
+/*
+*Create a dummy entry to save a particular region
+*Save 1 page starting from 144MB.
+*/
+void memsave_dummy_entry(void)
+{
+
+ int ret;
+
+ strcpy(msave_dum.name,“msave”);
+ msave_dum.start=0x09000000;
+ msave_dum.size=0x1000;
+
+ ret=memsave_add_entry(&msave_dum);
+
+ strcpy((char*)0xc9000000,“harihari”);
+}
+
+void memsave_dummy_entry_2(void)
+{
+
+ int ret;
+
+ strcpy(msave_dum_2.name,“msave2”);
+ msave_dum_2.start=0x0a000000;
+ msave_dum_2.size=0x1000;
+
+ ret=memsave_add_entry(&msave_dum_2);
+
+ strcpy((char*)0xc9000000,“dummydummy”);
+}
diff-puN fs/proc/root.c~memsave fs/proc/root.c
---linux-patch/fs/proc/root.c~memsave 2004-08-30 22:30:59.000000000+0530
+++linux-patch-hari/fs/proc/root.c 2004-08-30 23:38:23.000000000+0530
@@-52,6+52,10@@void_init proc_root_init(void)
return;
}
proc_misc_init();
+#ifdef CONFIG_MEMSAVE
+ memsave_dummy_entry();
+ memsave_dummy_entry_2();
+#endif
proc_net=proc_mkdir(“net”,NULL);
#ifdef CONFIG SYSVIPC
proc_mkdir(“sysvipc”,NULL);
安装和运行代码的指令
以下指令可被用于安装和运行以上提供的缓冲器提取代码。
1)从http://www.kernel.org/获得Linux版本2.6.9-rcl的源代码
注意:以上呈现的代码已被准备用于此版本的Linux。
它可以稍后被更新至任何级别。
2)从http://www.xmission.com/~ebiederm/files/kexec/2.6.8.1-kexec3/
http://www.xmission.com/~ebideerm/files/kexec/kexec-tools-1.96.tgz
获得kexec和kexec-tools的补丁。
3)通过包中给出的指令来安装kexec-tools的用户空间实用工具。
4)解压缩Linux内核源代码:
tar-xzVf linux-2.6.9-rcl.tar.gz
5)将kexec补丁应用于Linux源代码:
patch-pl<kexec-file-name
6)将memsave.patch(在以上附录中示出)应用于代码:
patch-pl<memsave.patch
7)构建Linux内核并引导至该内核。
8)该补丁将创建对基础设施的两次注册,以在kexec引导期间保存两个存储器区域。这些存储器区域将被注册为“msave”和“msave2”。
9)加载kexec内核:
kexec-l<kernel-name>--append=“<command-line-options>”
10)重新引导到新的kexec内核:
kexec-e
11)观察到在/proc下已经创建两个文件:
/proc/msave和/proc/msave2
12)使用“cp”命令写出这两个文件:
cp/proc/msave file1
cp/proc/msave2 file2
为了通过此方法验证重新引导期间被保留的正确的存储器区域,所述代码将虚拟标识符串添加到所保留的存储器区域中。由msave表示的第一区域在开头包括“harihari”串。由msave2表示的第二区域包括“dummydummy”串。在重新引导之后,一旦文件已被写出(参见以上列出的指令的步骤12),每个虚拟标识符串就可以在其相应文件中找到,从而验证该方法。
Claims (18)
1.一种用于在计算环境中在操作***发生故障之后提取缓冲器数据的方法,其中所述缓冲器是易失性存储器的区域,其中在所述故障之前存储所述数据,所述方法包括:
在所述故障之前注册应用,所述注册包括标识数据所驻留的缓冲器,由所述应用在所述缓冲器中存储所述数据,所述应用在所述操作***中执行;
保留所述缓冲器,所述保留将驻留于所述缓冲器中的所述数据维护为从所述操作***响应于所述故障而启动重新引导直到完成所述重新引导均未改变,所述重新引导是快速重新引导;
在所述重新引导期间生成内存储器文件,所述内存储器文件指向驻留于所述缓冲器中的所述数据,并且所述内存储器文件被存储在所述易失性存储器中而不是永久性存储媒体中;以及
经由对所述内存储器文件操作的指令来提取所述数据,所述指令在所述重新引导的所述完成之后由所述应用执行。
2.根据权利要求1所述的方法,其中所述提取包括:
通过在所述指令中引用所述内存储器文件的标识符而获得所述数据,所述标识符标识所述内存储器文件的内容,而不标识所述易失性存储器的任何其它内容。
3.根据权利要求1所述的方法,还包括:
提供单个接口,所述单个接口提供所述注册,响应于所述注册而自动提供所述保留和所述生成,以及使得经由所述注册、所述保留和所述生成的所述提取更便利,其中在所述易失性存储器的区域中存储将在所述故障之后提取的内容的任何应用能够使用所述单个接口而在所述故障之后提取所述内容。
4.根据权利要求1所述的方法,其中所述标识缓冲器包括提供与所述缓冲器相关联的存储器区域信息,所述信息包括存储所述数据所需的所述易失性存储器的总量以及所述缓冲器起始的存储器地址。
5.根据权利要求4所述的方法,还包括将所述存储器区域信息存储在元数据中。
6.根据权利要求5所述的方法,还包括:
在所述重新引导期间并且在所述重新引导期间启动对所述易失性存储器的分配之前,防止所述缓冲器被分配由所述操作***的一个或多个资源的用户所使用,存储器管理模块使所述防止更便利,所述防止接收所述存储器区域信息,所述存储器管理模块驻留于所述操作***中。
7.根据权利要求5所述的方法,其中所述元数据包括标识所述应用的名称以及所述应用所需的所述易失性存储器的总量。
8.根据权利要求5所述的方法,还包括响应于所述存储器区域信息的改变,实时地动态更新所述元数据。
9.根据权利要求1所述的方法,其中所述生成包括使用用于所述内存储器文件的独立于平台的文件格式。
10.一种用于在计算环境中在操作***发生故障之后提取缓冲器数据的***,其中所述缓冲器是易失性存储器的区域,其中在所述故障之前存储所述数据,所述***包括:
用于在所述故障之前注册应用的装置,所述用于注册应用的装置包括用于标识数据所驻留的缓冲器的装置,由所述应用在所述缓冲器中存储所述数据,所述应用在所述操作***中执行;
用于保留所述缓冲器的装置,所述保留将驻留于所述缓冲器中的所述数据维护为从所述操作***响应于所述故障而启动重新引导直到完成所述重新引导均未改变,所述重新引导是快速重新引导;
用于在所述重新引导期间生成内存储器文件的装置,所述内存储器文件指向驻留于所述缓冲器中的所述数据,并且所述内存储器文件被存储在所述易失性存储器中而不是永久性存储媒体中;以及
用于经由对所述内存储器文件操作的指令来提取所述数据的装置,所述指令在所述重新引导的所述完成之后由所述应用执行。
11.根据权利要求10所述的***,其中用于提取的所述装置包括:
用于通过在所述指令中引用所述内存储器文件的标识符而获得所述数据的装置,所述标识符标识所述内存储器文件的内容,而不标识所述易失性存储器的任何其它内容。
12.根据权利要求10所述的***,还包括:
单个接口装置,所述单个接口装置用于提供所述注册,响应于所述注册而自动提供所述保留和所述生成,以及使得经由所述注册、所述保留和所述生成的所述提取更便利,其中在所述易失性存储器的区域中存储将在所述故障之后提取的内容的任何应用能够使用所述单个接口装置而在所述故障之后提取所述内容。
13.根据权利要求10所述的***,其中用于标识缓冲器的所述装置包括用于提供与所述缓冲器相关联的存储器区域信息的装置,所述信息包括存储所述数据所需的所述易失性存储器的总量以及所述缓冲器起始的存储器地址。
14.根据权利要求13所述的***,还包括用于将所述存储器区域信息存储在元数据中的装置。
15.根据权利要求14所述的***,还包括
用于在所述重新引导期间并且在所述重新引导期间启动对所述易失性存储器的分配之前,防止所述缓冲器被分配由所述操作***的一个或多个资源的用户所使用的装置,存储器管理模块使所述防止更便利,所述防止接收所述存储器区域信息,所述存储器管理模块驻留于所述操作***中。
16.根据权利要求14所述的***,其中所述元数据包括标识所述应用的名称以及所述应用所需的所述易失性存储器的总量。
17.根据权利要求14所述的***,还包括用于响应于所述存储器区域信息的改变,实时地动态更新所述元数据的装置。
18.根据权利要求10所述的***,其中用于生成的所述装置包括用于使用用于所述内存储器文件的独立于平台的文件格式的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/271,248 US7506203B2 (en) | 2005-11-10 | 2005-11-10 | Extracting log and trace buffers in the event of system crashes |
US11/271,248 | 2005-11-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1963773A CN1963773A (zh) | 2007-05-16 |
CN100456254C true CN100456254C (zh) | 2009-01-28 |
Family
ID=38082840
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101438305A Active CN100456254C (zh) | 2005-11-10 | 2006-11-09 | 在***崩溃时提取日志和追踪缓冲器的方法和*** |
Country Status (2)
Country | Link |
---|---|
US (2) | US7506203B2 (zh) |
CN (1) | CN100456254C (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7788537B1 (en) * | 2006-01-31 | 2010-08-31 | Emc Corporation | Techniques for collecting critical information from a memory dump |
US20080086515A1 (en) * | 2006-10-06 | 2008-04-10 | International Business Machines Corporation | Method and System for a Soft Error Collection of Trace Files |
US7818616B2 (en) * | 2007-07-25 | 2010-10-19 | Cisco Technology, Inc. | Warm reboot enabled kernel dumper |
GB2455537A (en) * | 2007-12-12 | 2009-06-17 | Symbian Software Ltd | Recording information relevant to exceptions |
KR101283809B1 (ko) * | 2009-08-04 | 2013-07-08 | 후지쯔 가부시끼가이샤 | 리셋 방법 및 감시 장치 |
CN102063344A (zh) * | 2009-11-18 | 2011-05-18 | 中兴通讯股份有限公司 | 一种***故障信息转储的方法与*** |
CN102193843B (zh) * | 2010-03-19 | 2013-05-29 | 复旦大学 | 虚拟机***崩溃现场保存的加速方法 |
US8505003B2 (en) | 2010-04-28 | 2013-08-06 | Novell, Inc. | System and method for upgrading kernels in cloud computing environments |
US8862930B2 (en) * | 2010-11-24 | 2014-10-14 | Red Hat, Inc. | Crash recovery memory reservation based on device drivers for an operational kernel |
WO2012098434A1 (en) | 2011-01-21 | 2012-07-26 | Freescale Semiconductor, Inc. | Method, system, and computer program product |
US20190073720A1 (en) * | 2012-02-27 | 2019-03-07 | Ehud Yehuda Tal | Platform, system and method for diamond trading |
US9519564B1 (en) | 2012-09-28 | 2016-12-13 | EMC IP Holding Company LLC | Trace saving intervals |
CN103809989B (zh) * | 2012-11-08 | 2017-07-11 | 英华达(南京)科技有限公司 | 操作***发生核心崩溃情况下读取完整核心日志的方法 |
US9348533B2 (en) | 2013-03-14 | 2016-05-24 | Microsoft Technology Licensing, Llc | Memory image capture via memory write from a running system |
GB2520712A (en) | 2013-11-28 | 2015-06-03 | Ibm | Data dump method for a memory in a data processing system |
US9875115B2 (en) | 2013-12-20 | 2018-01-23 | Microsoft Technology Licensing, Llc | Memory-preserving reboot |
US9262274B2 (en) | 2013-12-24 | 2016-02-16 | International Business Machines Corporation | Persistent data across reboots |
CN104915336B (zh) * | 2014-03-12 | 2021-03-23 | 腾讯科技(深圳)有限公司 | 文档翻译的方法及装置 |
CN105204969B (zh) * | 2014-06-30 | 2018-10-30 | 腾讯科技(深圳)有限公司 | 异常日志处理方法以及异常日志处理装置 |
CN104268067B (zh) * | 2014-09-24 | 2017-06-06 | 湖北盛天网络技术股份有限公司 | 用于获取操作***的崩溃信息的方法和装置 |
US9619329B2 (en) * | 2015-06-22 | 2017-04-11 | International Business Machines Corporation | Converting volatile memory module devices to flashless non-volatile memory module devices |
CN105159819B (zh) * | 2015-09-01 | 2018-03-13 | 汉柏科技有限公司 | 一种记录内核异常栈及调试信息的方法及*** |
US10025650B2 (en) | 2015-09-17 | 2018-07-17 | International Business Machines Corporation | Determining a trace of a system dump |
KR101715759B1 (ko) * | 2015-09-22 | 2017-03-15 | 한국전자통신연구원 | 멀티코어 환경에서의 악성코드 분석 장치 및 방법 |
CN105530658B (zh) * | 2016-01-22 | 2021-04-23 | 深圳高新兴物联科技有限公司 | 一种无线通讯模块的远程诊断方法、装置和*** |
US9952890B2 (en) * | 2016-02-29 | 2018-04-24 | Red Hat Israel, Ltd. | Kernel state data collection in a protected kernel environment |
US10216649B2 (en) | 2016-02-29 | 2019-02-26 | Red Hat Israel, Ltd. | Kernel transitioning in a protected kernel environment |
CN110673974A (zh) * | 2019-08-20 | 2020-01-10 | 中科创达软件股份有限公司 | ***调试方法及装置 |
US11709683B2 (en) * | 2020-08-07 | 2023-07-25 | EMC IP Holding Company LLC | State semantics kexec based firmware update |
CN114115025B (zh) * | 2021-11-24 | 2024-05-28 | 国汽智控(北京)科技有限公司 | 基于自动驾驶***的故障信息的保存方法、装置和设备 |
CN116089563B (zh) * | 2022-07-28 | 2024-03-26 | 荣耀终端有限公司 | 日志处理方法及相关装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1299483A (zh) * | 1998-04-30 | 2001-06-13 | 英特尔公司 | 初始化和重新启动操作*** |
CN1317742A (zh) * | 2000-04-10 | 2001-10-17 | 国际商业机器公司 | 恢复数据库时并行读取主从备份的***和方法 |
US20020133738A1 (en) * | 1999-11-10 | 2002-09-19 | Art Zeigler | Methods and systems for saving data potentially modified by a crashed computer program executing in a preemptive multitasking operating system environment |
US20020194528A1 (en) * | 2001-05-22 | 2002-12-19 | Nigel Hart | Method, disaster recovery record, back-up apparatus and RAID array controller for use in restoring a configuration of a RAID device |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5111384A (en) | 1990-02-16 | 1992-05-05 | Bull Hn Information Systems Inc. | System for performing dump analysis |
US5339406A (en) | 1992-04-03 | 1994-08-16 | Sun Microsystems, Inc. | Reconstructing symbol definitions of a dynamically configurable operating system defined at the time of a system crash |
US5999933A (en) | 1995-12-14 | 1999-12-07 | Compaq Computer Corporation | Process and apparatus for collecting a data structure of a memory dump into a logical table |
KR100283243B1 (ko) | 1998-05-11 | 2001-03-02 | 구자홍 | 운영체제의 부팅방법 |
US7062645B2 (en) | 1998-06-04 | 2006-06-13 | Gateway Inc. | Build to order personal computer manufacturing fast boot method |
US6226761B1 (en) | 1998-09-24 | 2001-05-01 | International Business Machines Corporation | Post dump garbage collection |
US6295611B1 (en) * | 1998-12-14 | 2001-09-25 | Sun Microsystems, Inc.. | Method and system for software recovery |
US6543010B1 (en) * | 1999-02-24 | 2003-04-01 | Hewlett-Packard Development Company, L.P. | Method and apparatus for accelerating a memory dump |
US6728907B1 (en) | 2000-04-14 | 2004-04-27 | Microsoft Corporation | System and method for self-diagnosing system crashes |
US6807630B2 (en) | 2000-12-15 | 2004-10-19 | International Business Machines Corporation | Method for fast reinitialization wherein a saved system image of an operating system is transferred into a primary memory from a secondary memory |
US6681348B1 (en) | 2000-12-15 | 2004-01-20 | Microsoft Corporation | Creation of mini dump files from full dump files |
US7069334B2 (en) | 2000-12-27 | 2006-06-27 | Intel Corporation | Image restoration and reconfiguration support for crashed devices |
US6880113B2 (en) | 2001-05-03 | 2005-04-12 | International Business Machines Corporation | Conditional hardware scan dump data capture |
US6963970B2 (en) * | 2002-04-29 | 2005-11-08 | Hewlett-Packard Development Company, L.P. | System and method for executing a fast reset of a computer system |
JP4528144B2 (ja) * | 2005-01-26 | 2010-08-18 | 富士通株式会社 | メモリダンププログラムのブート方法、機構及びプログラム |
US7590839B2 (en) * | 2005-03-22 | 2009-09-15 | Qnx Software Systems Gmbh & Co. Kg | System employing fast booting of application programs |
JP4322240B2 (ja) * | 2005-09-15 | 2009-08-26 | 株式会社日立製作所 | 再起動方法、システム及びプログラム |
JP4645837B2 (ja) * | 2005-10-31 | 2011-03-09 | 日本電気株式会社 | メモリダンプ方法、コンピュータシステム、およびプログラム |
JP5255348B2 (ja) * | 2007-07-16 | 2013-08-07 | ヒューレット−パッカード デベロップメント カンパニー エル.ピー. | クラッシュダンプ用のメモリアロケーション |
-
2005
- 2005-11-10 US US11/271,248 patent/US7506203B2/en active Active
-
2006
- 2006-11-09 CN CNB2006101438305A patent/CN100456254C/zh active Active
-
2008
- 2008-10-20 US US12/254,058 patent/US7594139B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1299483A (zh) * | 1998-04-30 | 2001-06-13 | 英特尔公司 | 初始化和重新启动操作*** |
US20020133738A1 (en) * | 1999-11-10 | 2002-09-19 | Art Zeigler | Methods and systems for saving data potentially modified by a crashed computer program executing in a preemptive multitasking operating system environment |
CN1317742A (zh) * | 2000-04-10 | 2001-10-17 | 国际商业机器公司 | 恢复数据库时并行读取主从备份的***和方法 |
US20020194528A1 (en) * | 2001-05-22 | 2002-12-19 | Nigel Hart | Method, disaster recovery record, back-up apparatus and RAID array controller for use in restoring a configuration of a RAID device |
Also Published As
Publication number | Publication date |
---|---|
US20070168699A1 (en) | 2007-07-19 |
US7506203B2 (en) | 2009-03-17 |
US20090044051A1 (en) | 2009-02-12 |
US7594139B2 (en) | 2009-09-22 |
CN1963773A (zh) | 2007-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100456254C (zh) | 在***崩溃时提取日志和追踪缓冲器的方法和*** | |
Scargall | Programming persistent memory: A comprehensive guide for developers | |
McKeen et al. | Intel® software guard extensions (intel® sgx) support for dynamic memory management inside an enclave | |
CN1894662B (zh) | 作为用于执行引导码的ram的处理器缓存存储器 | |
CN102934114B (zh) | 用于文件***的检查点 | |
Satyanarayanan | The evolution of coda | |
Gorman | Understanding the Linux virtual memory manager | |
JP4388916B2 (ja) | 複数の順序ベクトルで複数のメモリ順序モデルを実施する方法及び装置 | |
US6578140B1 (en) | Personal computer having a master computer system and an internet computer system and monitoring a condition of said master and internet computer systems | |
US7225431B2 (en) | Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture | |
CN102693188B (zh) | 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置 | |
CN102741806A (zh) | 使用缓冲存储加速事务的机构 | |
US20100250730A1 (en) | Automated license reconciliation for deployed applications | |
CN103582879B (zh) | 管理耦合设施中的操作员消息缓冲器 | |
CN105164657A (zh) | 程序数据至非易失性存储器的选择性备份 | |
CN101546259B (zh) | 支持运行时模型扩展的对象关系映射***和方法 | |
CN102625934A (zh) | 共享虚拟存储器 | |
CN101981550B (zh) | 数据库***、数据库更新方法、数据库以及数据库更新程序 | |
EP1860563A1 (en) | Sparse checkpoint and rollback | |
CN104636182A (zh) | 一种操作数据处理***的方法、数据处理***和处理器 | |
US10482008B2 (en) | Aligned variable reclamation | |
CN104583948A (zh) | 使用bpram来布局和执行操作*** | |
US10459748B2 (en) | Transparent guest based notification overlay | |
US20090100239A1 (en) | Data update history storage apparatus and data update history storage method | |
Missbach et al. | SAP Hardware Solutions: Servers, Storage, and Networks for MySAP. com |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |