CN106569904A - 一种信息存储方法和装置、及服务器 - Google Patents

一种信息存储方法和装置、及服务器 Download PDF

Info

Publication number
CN106569904A
CN106569904A CN201510650281.XA CN201510650281A CN106569904A CN 106569904 A CN106569904 A CN 106569904A CN 201510650281 A CN201510650281 A CN 201510650281A CN 106569904 A CN106569904 A CN 106569904A
Authority
CN
China
Prior art keywords
fields
information
control information
subregion
section
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.)
Pending
Application number
CN201510650281.XA
Other languages
English (en)
Inventor
邓红波
徐东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201510650281.XA priority Critical patent/CN106569904A/zh
Priority to PCT/CN2016/090846 priority patent/WO2017059721A1/zh
Publication of CN106569904A publication Critical patent/CN106569904A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明提供一种信息存储方法和装置、及服务器,包括:在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;设置所述共享内存对应的控制信息;其中,所述控制信息用于payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。通过上述技术方案,payload的BIOS部分可以直接访问BMC中设置的共享内存,通过共享内存的读写方式,异常信息的数据上报的速度较快,可以满足在很短的时间内上报较多的异常信息的需求,效率高,上报时间短,能够提高通过BIOS发现的硬件异常来定位服务器中的硬件问题的成功率。

Description

一种信息存储方法和装置、及服务器
技术领域
本发明涉及服务器领域,尤指一种信息存储方法和装置、及服务器。
背景技术
在目前常见的中高端服务器上,通常有BMC(Board ManagementController,单板管理控制器)和payload(有效负载)两部分。在payload上安装服务器操作系统和其他应用程序。BMC上实现对Payload加电、下电、复位功能,FRU(Field Replaceable Unit,现场可替换装置)信息管理功能,SDR(Sensor Data Record,传感器数据记录)信息管理功能,本地SEL(SystemEvent Log,系统事件日志)功能,面板点灯、状态查询,传感器扫描功能,KCS(Keyboard Controller Style,键盘控制器类)通讯功能,BIOS(Basic Inputand Output System,基本输入输出系统)上报SEL记录功能,状态监测功能(单板复位)、S5状态监测,风扇转速控制和测量,单板启动方式配置,单板看门狗功能,RMCP(Remote Management Control Protocol,远程管理控制协议)功能,单板休眠、唤醒,电源管理,Node Manage(节点管理)功能,WEB(网络)、命令行,KVMS(Keyboard Video Mouse Storage,键盘显示器鼠标存储),硬件异常监控等功能。在payload和BMC之间有LPC(Lowpin Count,低管脚数接口)通道,可用于payload和BMC之间通讯。
为了了解和定位payload系统中发生了什么问题,需要在服务器系统设计中增加BIOS/OS(operation system,操作系统)对系统异常的记录。在当前系统中,基本都是通过LPC通道上报。通过这种通道上报的局限性很多,比如效率低、上报时间长、BIOS无法读写这种通道而不适合记录BIOS发现的硬件异常等。在payload发生异常时,可能会在很短的时间内产生比较多的异常信息,而这些信息需要快速上报并记录下来,尤其重要的是BIOS发现的硬件异常对于定位服务器中的硬件问题尤为重要。要快速上报这些数据,通过LPC通道上报的设计很难满足设计要求,因此需要一种快速的、BIOS可读写的通道来上报payload产生的异常信息。
发明内容
为了解决上述问题,本发明提出了一种信息存储方法和装置、及服务器,能够提高payload产生的异常信息上报的速度。
为了达到上述目的,本发明提出了一种信息存储方法,所述方法包括:
在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;
设置所述共享内存对应的控制信息;其中,所述控制信息用于有效负载payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;
在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。
优选地,所述控制信息包括总控制信息;
所述设置所述共享内存对应的控制信息包括:
在所述共享内存中划分分区,并将所述分区对应的分区信息设置在所述总控制信息中,其中,共享内存包括基本输入输出系统BIOS区、OS操作系统区和用户态区。
优选地,所述总控制信息中包括如下字段:dwFlag字段、dwBiosBegin字段、dwBiosEnd字段、dwOsBegin字段、dwOsEnd字段、dwUserBegin字段和dwUserEnd字段;其中,
所述dwFlag字段用于表示所述共享内存是否已经完成初始化;
所述dwBiosBegin字段用于表示BIOS区开始地址,所述dwBiosEnd字段用于表示BIOS区结束地址;
所述dwOsBegin字段用于表示OS区开始地址,所述dwOsEnd字段用于表示OS区结束地址,
所述dwUserBegin字段用于表示用户态区开始地址,所述dwUserEnd字段用于表示用户态区结束地址;
所述根据分区的结果设置对应的总控制信息包括:
根据BIOS区、OS区和用户态区三个分区的结果,对应地设置总控制信息中各个字段的值;其中,将dwFlag字段设置为预定的第一值时,表示共享内存已经完成初始化,根据BIOS区的分区地址设置dwBiosBegin字段和dwBiosEnd字段、根据OS区的分区地址设置dwOsBegin字段和dwOsEnd字段、根据用户态区的分区地址设置dwUserBegin字段和dwUserEnd字段。
优选地,所述控制信息还包括区控制信息和段控制信息;
所述根据所述控制信息,从所述共享内存中读取所述异常信息包括:
读取各个分区对应的区控制信息,根据所述区控制信息中dwAreaFlag字段判断所述分区是否已经被payload使用;
当所述分区已经被payload使用时,读取分区中各段的段控制信息,根据所述段控制信息获取payload存储的异常信息的存储区域,并根据所述存储区域读取所述异常信息。
优选地,所述满足读取条件具体为:
预先设置的周期性的定时器的计时到时。
为了达到上述目的,本发明还提出了一种信息存储方法,所述方法包括:
扫描内存设备;
读取内存设备中设置的控制信息;
根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息。
优选地,所述控制信息包括总控制信息和区控制信息,
在所述向所述内存设备中存储异常信息之前,还包括:
获取分区信息;所述分区信息包括分区的开始地址和结束地址;
对分区执行分区初始化,其中,所述初始化包括设置对应的区控制信息。
优选地,所述区控制信息包括如下字段:dwAreaFlag字段、dwAreaCtrSize字段、dwSectionCount字段、以及dwFirstSecAddr字段;其中,
所述dwAreaFlag字段用于表示对应的分区是否已经开启信息记录功能;
所述dwAreaCtrSize字段用于表示对应分区的控制信息大小;
所述dwSectionCount字段用于表示对应分区的包含的段数;
所述dwFirstSecAddr字段用于表示对应分区中第一个段的开始地址。
优选地,所述控制信息还包括段控制信息;
所述对分区执行分区初始化还包括:
对所述分区进行分段,并设置各段对应的段控制信息;其中,各个分段用于存储不同类别的异常信息;
所述段控制信息包括如下字段:SecName字段、dwSecCtrSize字段、dwSecBegin字段、dwSecEnd字段、dwSecRead字段、dwSecWrite字段;其中,
所述SecName字段,用于表示当前分段的名称;
所述dwSecCtrSize字段,用于表示当前分段的控制信息大小,
dwSecBegin字段,用于表示当前分段的信息记录区域的开始地址,
dwSecEnd字段,用于表示当前分段的信息记录区域的结束地址,
dwSecRead字段,用于表示段内数据区读指针,用于单板管理控制器BMC从所述指针指向的地方开始读取,并根据读取结果对所述指针进行改写;
dwSecWrite字段,用于表示段内数据区写指针,用于payload从所述指针指向的地方开始写入异常信息,并根据写入结果对所述指针进行改写。
优选地,所述根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息包括:
通过总控制信息确认对应的分区;
在所述分区初始化之后,根据段控制信息中的SecName字段,确定异常信息应该存储的分段;
获取段控制信息中的dwSecWrite字段,从dwSecWrite字段中指针指向的地方开始写入异常信息,并再写入之后,将所述指针改写为指向所述异常信息尾地址的下一个地址。
为了达到上述目的,本发明还提出了一种信息存储装置,设置在服务器中的单板管理控制器BMC上,所述方法包括:
创建单元,用于在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;
第一设置单元,用于设置所述共享内存对应的控制信息;其中,所述控制信息用于payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;
读取单元,用于在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。
优选地,所述控制信息包括总控制信息;
所述第一设置单元包括:
分区划分模块,用于在所述共享内存中划分分区;
第一设置模块,用于将所述分区对应的分区信息设置在所述总控制信息中,其中,共享内存包括BIOS区、OS区和用户态区三个分区。
优选地,所述总控制信息中包括如下字段:dwFlag字段、dwBiosBegin字段、dwBiosEnd字段、dwOsBegin字段、dwOsEnd字段、dwUserBegin字段和dwUserEnd字段;其中,
所述dwFlag字段用于表示所述共享内存是否已经完成初始化;
所述dwBiosBegin字段用于表示BIOS区开始地址,所述dwBiosEnd字段用于表示BIOS区结束地址;
所述dwOsBegin字段用于表示OS区开始地址,所述dwOsEnd字段用于表示OS区结束地址,
所述dwUserBegin字段用于表示用户态区开始地址,所述dwUserEnd字段用于表示用户态区结束地址;
所述第一设置模块具体用于:
根据BIOS区、OS区和用户态区三个分区的结果,对应地设置总控制信息中各个字段的值;其中,将dwFlag字段设置为预定的第一值时,表示共享内存已经完成初始化,根据BIOS区的分区地址设置dwBiosBegin字段和dwBiosEnd字段、根据OS区的分区地址设置dwOsBegin字段和dwOsEnd字段、根据用户态区的分区地址设置dwUserBegin字段和dwUserEnd字段。
优选地,所述控制信息还包括区控制信息和段控制信息;
所述读取单元包括:
判断模块,用于读取各个分区对应的区控制信息,根据所述区控制信息中dwAreaFlag字段判断所述分区是否已经被payload使用;
异常信息读取模块,用于当所述分区已经被payload使用时,读取分区中各段的段控制信息,根据所述段控制信息获取payload存储的异常信息的存储区域,并根据所述存储区域读取所述异常信息。
优选地,所述满足读取条件具体为:
预先设置的周期性的定时器的计时到时。
本发明还提供一种信息存储装置,设置在服务器中的有效负载payload上,所述方法包括:
扫描单元,用于扫描内存设备;
控制信息读取单元,用于读取内存设备中设置的控制信息;
写入单元,用于根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息。
优选地,所述控制信息包括总控制信息和区控制信息,
在所述向所述内存设备中存储异常信息之前,还包括:
第二设置单元,用于获取分区信息;所述分区信息包括分区的开始地址和结束地址;以及,对分区执行分区初始化,其中,所述初始化包括设置对应的区控制信息。
优选地,所述区控制信息包括如下字段:dwAreaFlag字段、dwAreaCtrSize字段、dwSectionCount字段、以及dwFirstSecAddr字段;其中,
所述dwAreaFlag字段用于表示对应的分区是否已经开启信息记录功能;
所述dwAreaCtrSize字段用于表示对应分区的控制信息大小;
所述dwSectionCount字段用于表示对应分区的包含的段数;
所述dwFirstSecAddr字段用于表示对应分区中第一个段的开始地址。
优选地,所述控制信息还包括段控制信息;
所述第二设置单元包括:
分段设置模块,用于对所述分区进行分段,并设置各段对应的段控制信息;其中,各个分段用于存储不同类别的异常信息;
所述段控制信息包括如下字段:SecName字段、dwSecCtrSize字段、dwSecBegin字段、dwSecEnd字段、dwSecRead字段、dwSecWrite字段;其中,
所述SecName字段,用于表示当前分段的名称;
所述dwSecCtrSize字段,用于表示当前分段的控制信息大小,
dwSecBegin字段,用于表示当前分段的信息记录区域的开始地址,
dwSecEnd字段,用于表示当前分段的信息记录区域的结束地址,
dwSecRead字段,用于表示段内数据区读指针,用于BMC从所述指针指向的地方开始读取,并根据读取结果对所述指针进行改写;
dwSecWrite字段,用于表示段内数据区写指针,用于payload从所述指针指向的地方开始写入异常信息,并根据写入结果对所述指针进行改写。
优选地,所述写入单元包括:
分区确认模块,用于通过总控制信息确认对应的分区;
分段确认模块,用于在所述分区初始化之后,根据段控制信息中的SecName字段,确定异常信息应该存储的分段;
写入模块,用于获取段控制信息中的dwSecWrite字段,从dwSecWrite字段中指针指向的地方开始写入异常信息,并再写入之后,将所述指针改写为指向所述异常信息尾地址的下一个地址。
为了达到上述目的,本发明还提出了一种服务器,所述服务器包括设置在服务器中的单板管理控制器BMC上的上述任一信息存储装置;所述服务器还包括设置在服务器中的有效负载payload上的上述任一信息存储装置。
与现有技术相比,本发明提供的技术方案包括:在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;设置所述共享内存对应的控制信息;其中,所述控制信息用于payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。通过本发明的方案,payload的BIOS部分可以直接访问BMC中设置的共享内存,通过共享内存的读写方式,异常信息的数据上报的速度较快,可以满足在很短的时间内上报较多的异常信息的需求,效率高,上报时间短,能够提高通过BIOS发现的硬件异常来定位服务器中的硬件问题的成功率。
附图说明
下面对本发明实施例中的附图进行说明,实施例中的附图是用于对本发明的进一步理解,与说明书一起用于解释本发明,并不构成对本发明保护范围的限制。
图1A、图1B和图1C分别为本发明实施例提供的数据存储方法的流程图;
图2为BMC利用多function功能将保留内存模拟为PCI/PCIE内存设备的示意图;
图3为本发明实施例提供的共享内存管理和划分示意图;
图4A是本发明实施例提供的BMC上黑匣子程序实施步骤示意图;
图4B是本发明实施例提供的BIOS区黑匣子程序实施步骤示意图;
图4C是本发明实施例提供的OS黑匣子程序的实施步骤示意图;
图4D是本发明实施例提供的用户态黑匣子实施步骤图;
图5为本发明实施例提出的一种信息存储装置的结构示意图;
图6为本发明实施例提出的另一种信息存储装置的结构示意图。
具体实施方式
为了便于本领域技术人员的理解,下面结合附图对本发明作进一步的描述,并不能用来限制本发明的保护范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的各种方式可以相互组合。
本发明实施例的异常信息具体以黑匣子信息为例进行说明。
服务器包括BMC和payload两部分,payload中包括BIOS、OS和用户态三个部分,BIOS、OS和用户态三个部分中分别运行有黑匣子模块,黑匣子模块可以分别向BMC上报黑匣子信息,其中,BIOS向BMC上报黑匣子信息是固定设置的,OS和用户态向BMC上报黑匣子信息是可选的,可以根据用户的设置开始或停止上报。
下面以BMC一侧的操作为例进行说明。
参见图1A,本发明实施例提供一种信息存储方法,所述方法包括:
步骤110,在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;
步骤120,设置所述共享内存对应的控制信息;其中,所述控制信息用于payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;
其中,步骤110和步骤120的过程为BMC完成对共享内存的初始化的过程,在BMC完成对共享内存的初始化之后,在步骤110完成后,payload可以扫描到BMC虚拟的内存设备,在步骤120完成后,payload可以对内存设备进行读写操作。
步骤130,在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。
本发明实施例中,所述控制信息包括总控制信息;
所述设置所述共享内存对应的控制信息包括:
在所述共享内存中划分分区,并将所述分区对应的分区信息设置在所述总控制信息中,其中,共享内存包括BIOS区、OS区和用户态区。
本发明实施例中,所述总控制信息中包括如下字段:dwFlag字段、dwBiosBegin字段、dwBiosEnd字段、dwOsBegin字段、dwOsEnd字段、dwUserBegin字段和dwUserEnd字段;其中,
所述dwFlag字段用于表示所述共享内存是否已经完成初始化;
所述dwBiosBegin字段用于表示BIOS区开始地址,所述dwBiosEnd字段用于表示BIOS区结束地址;
所述dwOsBegin字段用于表示OS区开始地址,所述dwOsEnd字段用于表示OS区结束地址,
所述dwUserBegin字段用于表示用户态区开始地址,所述dwUserEnd字段用于表示用户态区结束地址;
所述根据分区的结果设置对应的总控制信息包括:
根据BIOS区、OS区和用户态区三个分区的结果,对应地设置总控制信息中各个字段的值;其中,将dwFlag字段设置为预定的第一值时,表示共享内存已经完成初始化,根据BIOS区的分区地址设置dwBiosBegin字段和dwBiosEnd字段、根据OS区的分区地址设置dwOsBegin字段和dwOsEnd字段、根据用户态区的分区地址设置dwUserBegin字段和dwUserEnd字段。
在下面的示例中,将对总控制信息进行更加详细的介绍。
本发明实施例中,所述控制信息还包括区控制信息和段控制信息;
所述根据所述控制信息,从所述共享内存中读取所述异常信息包括:
读取各个分区对应的区控制信息,根据所述区控制信息中dwAreaFlag字段判断所述分区是否已经被payload使用;
当所述分区已经被payload使用时,读取分区中各段的段控制信息,根据所述段控制信息获取payload存储的异常信息的存储区域,并根据所述存储区域读取所述异常信息。
本发明实施例中,所述满足读取条件具体为:
预先设置的周期性的定时器的计时到时。
下面以payload一侧的操作为例进行说明。
参见图1B,本发明提出了一种信息存储方法,所述方法包括:
步骤210,扫描内存设备。
在BMC完成对将共享内存模拟为内存设备之后,payload可以扫描到BMC虚拟的内存设备。
步骤240,读取内存设备中设置的控制信息;
步骤250,根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息。
本发明实施例中,所述控制信息包括总控制信息和区控制信息,
在步骤240和步骤250之前,还包括:
步骤220,获取分区信息;所述分区信息包括分区的开始地址和结束地址;
步骤230,对分区执行分区初始化,其中,所述初始化包括设置对应的区控制信息。
步骤230中,包括多个分区时,分别对各个分区进行初始化。
本发明实施例中,所述区控制信息包括如下字段:dwAreaFlag字段、dwAreaCtrSize字段、dwSectionCount字段、以及dwFirstSecAddr字段;其中,
所述dwAreaFlag字段用于表示对应的分区是否已经开启信息记录功能;
所述dwAreaCtrSize字段用于表示对应分区的控制信息大小;
所述dwSectionCount字段用于表示对应分区的包含的段数;
所述dwFirstSecAddr字段用于表示对应分区中第一个段的开始地址。
在下面的示例中,将对区控制信息进行更加详细的介绍。
本发明实施例中,所述控制信息还包括段控制信息;
所述对分区执行分区初始化还包括:
对所述分区进行分段,并设置各段对应的段控制信息;其中,各个分段用于存储不同类别的异常信息;
所述段控制信息包括如下字段:SecName字段、dwSecCtrSize字段、dwSecBegin字段、dwSecEnd字段、dwSecRead字段、dwSecWrite字段;其中,
所述SecName字段,用于表示当前分段的名称;
所述dwSecCtrSize字段,用于表示当前分段的控制信息大小,
dwSecBegin字段,用于表示当前分段的信息记录区域的开始地址,
dwSecEnd字段,用于表示当前分段的信息记录区域的结束地址,
dwSecRead字段,用于表示段内数据区读指针,用于BMC从所述指针指向的地方开始读取,并根据读取结果对所述指针进行改写;
dwSecWrite字段,用于表示段内数据区写指针,用于payload从所述指针指向的地方开始写入异常信息,并根据写入结果对所述指针进行改写。
在下面的示例中,将对段控制信息进行更加详细的介绍。
本发明实施例中,步骤250中,所述根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息包括:
步骤251,通过总控制信息确认对应的分区;
步骤252,在所述分区初始化之后,根据段控制信息中的SecName字段,确定异常信息应该存储的分段;
步骤253,获取段控制信息中的dwSecWrite字段,从dwSecWrite字段中指针指向的地方开始写入异常信息,并在写入之后,将所述指针改写为指向所述异常信息尾地址的下一个地址。
本发明实施例中,以分区中划分为多个分段、并且各个分段用于存储不同类别的异常信息为例进行说明,此外,也可以只分成一个段时,此时区控制信息中的dwSectionCount设置为1。
上述示例中,以分区中继续分段的方式为例进行说明,此外,也可以不设置分段,BMC直接从分区中读取对应的异常信息。在不进行分段的实施方式中,需要将dwSecRead字段和dwSecWrite字段设置在区控制信息中,以使得payload可以根据dwSecWrite字段指向的地址写入异常信息,以及使得BMC根据dwSecRead字段指向的地址拷贝异常信息。
下面的示例中,结合BMC和payload的操作过程对本发明实施例提供的信息存储方法进行说明。
参见图1C,本发明提出了一种信息存储方法,所述方法包括:
步骤310,BMC在本地内存中创建共享内存;并将所述共享内存模拟为内存设备。
步骤320,BMC在所述共享内存中划分分区,并根据分区的结果设置对应的总控制信息,其中,共享内存包括BIOS区、OS区和用户态区三个分区。
步骤330,payload扫描并识别所述内存设备,并读取所述总控制信息,根据所述总控制信息获取各个分区对应的信息;
步骤340,payload将异常信息存储至对应的分区,并根据存储的异常信息设置分区对应的区控制信息。
步骤350,BMC读取分区对应的区控制信息,并根据区控制信息,提取分区中存储的异常信息并拷贝到硬盘中。
步骤310中,BMC可以利用芯片自带的多function功能将保留内存模拟为PCI/PCIE内存设备。参见图2,位BMC利用多function功能将保留内存模拟为PCI/PCIE内存设备的示意图。
此外,BMC也可以按照USB,或者其他设备驱动开发规范,设置各项配置和寄存器,将上述保留内存模拟为一个内存设备。BMC在上电过程中将加载该内存设备的驱动,在BMC加载该内存设备的驱动之后,这个通过BMC模拟的内存设备就可以被payload的BIOS和OS内核扫描到了。
步骤320中,共享内存包括BIOS区、OS区和用户态区,其中,根据需要,payload将产生的黑匣子信息写入到相应的分区中。其中,共享内存可以根据需要划分为BIOS区、OS区和用户态区中的一个或多个,BIOS区、OS区和用户态区可以单独使用。其中,BIOS区用于存储BIOS异常信息,OS区用于存储OS异常信息,用户态区用于存储用户态异常信息。
BIOS发现如物理内存异常、IO异常之类的硬件异常时,将生成BIOS异常信息,OS在各种内核异常时,将生成OS异常信息,如kernel panic、kerneldie、OOM、重启复位、异常打印等异常信息,用户态程序在发现的异常时,将生成对应的用户态异常信息。
图3是共享内存管理和划分示意图。
如图3所示,共享内存由BMC划分成三个区:BIOS区、OS区和用户态区,分别供payload的BIOS、OS和用户态程序使用。payload的BIOS部分、OS部分和用户态部分将分别运行各自对应的黑匣子程序,在各部分运行的黑匣子程序发现异常并产生异常信息时,将记录到各自对应的区中。BMC将各个分区中写入的异常信息读取出来并存放在本地磁盘上。每个分区的大小由BMC在初始化共享内存区时固定分配好,在每个分区中,可以由各区的使用者,即各部分的黑匣子程序根据需要将分区分成一个或者多个分段。
对共享内存的管理包括三种控制信息:总控制信息,用于划分各个区;区控制信息,用于划分各个段;段控制信息,用于控制该段的读写访问。
共享内存的控制信息包括三种:总控制信息、区控制信息、以及段控制信息。其中,总控制信息,用于记录划分各个区的相关信息;区控制信息,用于记录划分各个分段的相关信息;段控制信息,用于控制该段的读写访问。下面分别进行介绍。
总控制信息包括dwFlag字段,总控制信息还包括BIOS控制信息、OS控制信息、以及用户态控制信息中的一种或多种;其中,BIOS控制信息包括dwBiosBegin字段和dwBiosEnd字段,OS控制信息包括dwOsBegin字段和dwOsEnd字段,用户态控制信息包括dwUserBegin字段和dwUserEnd字段。
例如,总控制信息中依次包括如下字段:dwFlag字段、dwBiosBegin字段、dwBiosEnd字段、dwOsBegin字段、dwOsEnd字段、dwUserBegin字段和dwUserEnd字段。
下面对各个字段分别进行说明。
dwFlag:Unsigned int类型,用于区分BMC是否已初始化共享内存。该字段初始值由BMC设置。BMC在对共享内存初始化完成后,将dwFlag字段设置为一个特定的初始值(例如0x5a5a5a5a)。payload根据该字段值识别该共享内存是否可以使用。
dwBiosBegin:Unsigned int类型,BIOS区开始地址,用相对于共享内存的首地址偏移表示。该字段值由BMC设置。
dwBiosEnd:Unsigned int类型,BIOS区结束地址,用相对于共享内存的首地址偏移表示。该字段值由BMC设置。
dwOsBegin:Unsigned int类型,OS区开始地址,用相对于共享内存的首地址偏移表示。该字段值由BMC设置。
dwOsEnd:Unsigned int类型,OS区结束地址,用相对于共享内存的首地址偏移表示。该字段值由BMC设置。
dwUserBegin:Unsigned int类型,用户态区开始地址,用相对于共享内存的首地址偏移表示。该字段值由BMC设置。
dwUserEnd:Unsigned int类型,用户态区结束地址,用相对于共享内存的首地址偏移表示。该字段值由BMC设置。
步骤330中,BMC在对应的分区存储信息之后,将设置总控制信息中各个字段的值,payload通过读取总控制信息中的这些值后,就可以识别出对应的BIOS区、OS区和用户态区,使得BIOS、OS和用户态分别可以使用共享内存中的对应分区。
步骤340中,payload在将异常信息存储至对应的分区之后,将根据存储的异常信息设置分区对应的区控制信息。
下面结合区控制信息进行详细说明。
区控制信息包括BIOS区控制信息、OS区控制信息、以及用户态区控制信息中的一种或多种。BIOS区控制信息、OS区控制信息、以及用户态区控制信息分别用于指示BIOS区、OS区、以及用户态区的相关信息。Payload在分区中存储对应的异常信息之后,将为分区设置对应的区控制信息,以使得BMC能够根据区控制信息对存储在分区中的异常信息进行提取。
区控制信息依次包括如下字段:
(1)、dwAreaFlag字段
设置为Unsigned int类型,用于表示共享内存中BIOS区、OS区、或用户态区的信息记录功能是否已经开启。例如,BIOS区控制信息中的dwAreaFlag字段用于指示BIOS区的信息记录功能是否已经开启。
payload的BIOS、或者OS、或者用户态部分的黑匣子程序在初始化完成后,将dwAreaFlag字段设置为一个特殊的第一值(例如0x5a5a5a5a),表示payload的对应分区的信息记录功能已经开启。该字段位于当前区的开始地址处。
其中,payload的OS部分和用户态部分的黑匣子功能是可以动态加载和卸载的。在payload的OS部分或用户态部分加载黑匣子功能时,将此字段赋值为例如0x5a5a5a5a之类的第一值,在payload的OS部分或用户态部分卸载黑匣子功能时,将此字段赋值为例如0x0之类的第二值,以通知BMC该区黑匣子功能不再使用。
在payload加载OS部分或用户态部分的分区的黑匣子功能前,将dwAreaFlag字段置为0x0,并延时一段时间,在延时到达之后,将dwAreaFlag字段设置为一个特殊的第一值,表示开启对应分区的黑匣子功能。其中,延时目的是考虑到如果两次加载和卸载的间隙很短,则BMC无法识别payload黑匣子已经卸载又重新加载过,延时的时长设置为大于BMC读取共享内存中区控制信息的周期,比如BMC每1秒读取一次共享内存中的区控制信息,那么延时时长可以设为1.5秒或2秒。BIOS部分黑匣子功能不可卸载,因此不需要考虑卸载的问题。
(2)、dwAreaCtrSize字段
Unsigned int类型,区的控制信息大小,表示区控制信息中的所有字段的大小。由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)在黑匣子功能初始化时设置。为了前后兼容,后续如果区控制信息中的字段发生变化,只允许在区控制信息后面添加新字段,不允许在原来的区控制信息中插入新字段,也不允许改变原来的控制字段大小和语义。
本发明实施例中,BMC可以检测分区中读取的区控制信息与BMC所能识别的区控制信息的大小是否一致,如果不一致,BMC按照最小的区控制信息进行识别。其中,如果大小不一致,则说明BMC和payload中使用的版本不一致,这时BMC将按照尺寸最小的区控制信息进行识别。
(3)、dwSectionCount字段
Unsigned int类型,表示本区中包含的段数,各个分区的使用者可以根据需要将每个分区划分成一个或者多个段,各个段分别作为一个环形缓冲区,payload将产生的黑匣子信息写入到相应的段中。BMC根据dwSectionCount字段依次读取各段的控制信息。该字段由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)在黑匣子功能初始化时设置。
例如,BIOS的黑匣子程序将BIOS区划分为3段,3段分别用于上报不同类别的异常信息。段数3将由BIOS的黑匣子程序写入到dwSectionCount字段中。
(4)、dwFirstSecAddr字段
Unsigned int类型,本区第一个段的开始地址,即第一个段的控制头地址。该字段由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)在黑匣子功能初始化时设置。
本发明实施例中,BMC按照预设的周期读取共享内存中所有分区的区控制信息,并以当前读到的区控制信息为准,而不是只读一次然后保存在内存中供后续使用,这样做的目的每次都能获取到最新的区控制信息,因为在黑匣子使用过程中,可能会出现分区的黑匣子功能卸载和重新加载的情景,重新加载时可能会改变区控制头中的字段取值。
此外,payload在使用各个分区时,可以根据需要将分区分为一个或多个段。并在区控制信息指示分段的情况。在每个分段中,通常在段首的位置,设置有段控制信息。下面对段控制信息进行说明。段控制信息中依次包含如下字段:
(1)、SecName字段
字符串类型,段名称,由当前分区的使用者设置,表示该段存放了什么信息,BMC在磁盘上存放该段中的黑匣子信息时就用此名称作为文件名。例如OS内核中发生panic异常、die异常分别写到不同的段中,段的名字分别为panic、die等。当名称为NULL时,表示该段没有被使用,这种情况主要在用户态区中可能会出现,因为用户态区中每个段的使用和应用程序相关,应用程序的启动有先有后,并且段的名称也由应用自己确定,因此需要支持用户态区中的段名动态设置和修改,在不用时设置为NULL,以方便分给后续的请求者。
(2)、dwSecCtrSize字段
Unsigned int类型,段的控制信息大小,表示段控制信息中的所有字段的大小。由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)设置。为了前后兼容,后续如果段控制信息中的字段发生变化,只允许在段控制信息后面添加新字段,不允许在原来的段控制信息中插入新字段,也不允许改变原来的控制字段大小和语义。BMC如果发现段控制信息大小和自己能够识别的段控制信息大小不一致,则说明BMC和payload中使用的版本不一致,这时要求BMC按照尺寸最小的段控制信息进行识别。
(3)、dwSecBegin字段
Unsigned int类型,本段可以记录黑匣子信息的开始地址,用相对于共享内存的首地址的偏移表示。由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)设置。
(4)、dwSecEnd字段
Unsigned int类型,本段可以记录信息的结束地址,用相对于共享内存区的首地址的偏移表示。由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)设置。
(5)、dwSecRead字段
Unsigned int类型,表示该段内数据区读指针,BMC从该指针指向的地方开始读取。初始值由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)设置,在运行过程中由BMC改写,每进行一次读操作,就会重新设置一次,表示该段黑匣子信息读到什么地方了。具体地,读操作执行之后,将读指针设置为指向当前读取的最后地址的下一个地址。
(6)、dwSecWrite字段
unsigned int类型,表示该段内数据区写指针,payload从该指针指向的地方开始写入。初始值由当前区的使用者(BIOS、OS或者用户态的黑匣子程序)设置,在运行过程中由当前区的使用者改写,每进行一次写操作,就会重新设置一次,表示该段黑匣子信息写到什么地方了。
其中,[dwSecBegin,dwSecEnd]范围的共享内存形成一个环形缓冲区,dwSecRead和dwSecWrite的取值范围位于[dwSecBegin,dwSecEnd]内,为该环形缓冲区的读写指针,控制着对该环形缓冲区的读写操作。payload向该环形缓冲区中写入黑匣子信息,BMC从该环形缓冲区中读取黑匣子信息并存入BMC本地的磁盘。payload如果能够缓存,在环形缓冲区写不完时可以先缓存,超过缓存能力则丢弃;如果不能缓存,则直接丢弃。
BIOS区和OS区在黑匣子功能初始化时就能确定各自的区要划分成哪些段,段的名称也能确定下来。而用户态区的真正使用者是用户态应用程序,实现不同的功能时应用程序也是千差万别的,因此用户态区中的段的名称在黑匣子功能初始化时是无法确定的。可以考虑在用户态区中考虑划分固定的段数,每段固定的大小,当用户态程序发起创建一个黑匣子段的请求时,内核态程序接收到请求后,在用户态区中为该请求找到一个SecName为NULL的段,并将SecName修改为申请者申请时携带的名字。当用户态程序发起删除某个黑匣子段请求时,内核态将这个段的名称设置为NULL,表示当前段空闲。
在实施时还要考虑BMC和payload的字节序可能不同的问题,必须约定在读写共享内存时采用某种给定的字节序,可以是网络字节序,也可以是约定好的某种字节序。
下面结合一个具体的示例进行说明。其中,以BIOS区的使用为例进行说明。其他分区的使用过程和BIOS区的使用相同或类似。当payload上的BIOS部分的黑匣子程序需要存储异常信息时,可以将异常信息存储至共享内存中的BIOS区。
步骤410、Payload在上电时,扫描并识别内存设备,完成内存设备的地址空间的映射。Payload通过读取内存设备中的总控制信息,获取内存设备中BIOS区、OS区和用户态区三个分区的大小和地址。
步骤420、BIOS部分的黑匣子程序完成BIOS区的初始化过程,即加载BIOS区的功能,其中,对将BIOS区划分为3段,并设置对应的区控制信息和段控制信息,例如,将区控制信息中的dwAreaFlag字段设置为例如0x5a5a5a5a之类的第一值,将dwSectionCount字段中填写段数3,并在dwFirstSecAddr字段中填写第1段的段首地址。
步骤430、在BIOS部分的黑匣子程序需要上报异常信息时,判断BIOS区是否已经初始化,如果已经初始化,则按照环形缓冲区的读写控制方法写入黑匣子信息至相应的段中。
步骤440、BMC的计时器到达计时周期时,将读取BIOS区中的异常信息,根据区控制信息,获取各个段的区域,根据段控制信息,可以获取分段中异常信息的存储位置,从而进行读取。
本发明实施例中,环形缓冲区的读写控制方法是指存储区域设置为环形缓冲区,环形缓冲区首尾相连,并通过写指针和读指针来控制异常信息的存储和读取,其中,写指针用于payload从写指针指向的地方开始写入异常信息,并根据写入结果对写指针进行改写,读指针用于BMC从所述读指针指向的地方开始读取,并根据读取结果对所述读指针进行改写。
上述存储区域指BIOS、OS或用户态占用的用于存储异常信息的一块存储区域,本发明实施例中的存储区域以分区中的各个分段为例进行说明。本发明实施例中,写指针以段内数据区写指针为例进行说明,读指针以段内数据区读指针为例进行说明。
下面结合具体的实施场景进行说明。
图4A是BMC上黑匣子程序实施步骤示意图,实施步骤如下:
步骤510、将共享内存映射为虚拟内存地址,使得BMC上的黑匣子程序能够访问共享内存;
步骤520、初始化总控制信息。其中,读取总控制信息中的字段dwFlag,如果dwFlag表示尚未初始化总控制信息,则初始化共享内存的总控制信息,为各区分配共享内存;如果dwFlag表示初始化总控制信息已经完成,则BMC不需要初始化共享内存的总控制信息,直接使用当前的总控制值信息即可。
步骤530、设置周期定时器;
步骤540、预先设置的周期定时器是否到达计时周期;
步骤550、周期定时器到时,执行异常信息读取过程,异常信息读取过程包括如下处理:
读取三个区的区控制信息,根据区控制信息中字段dwAreaFlag取值判断该区是否已经被payload使用,对于被payload使用的区,根据该区中的各段控制信息依次按照环形缓冲区的读写控制方法读取其中写入的黑匣子信息,并存放在本地磁盘上,跳转至530。
payload上的具体实施又分为三部分:BIOS区实施步骤、OS区实施步骤和用户态区实施步骤。
图4B是BIOS区黑匣子程序实施步骤示意图,实施步骤如下:
步骤610、BIOS中产生黑匣子信息;
步骤620、判断BIOS区共享内存是否已经初始化;
步骤630、如果已经初始化,则按照环形缓冲区的读写控制方法写入黑匣子信息至相应的段中,跳转至步骤670;
步骤640、如果没有初始化,则根据共享内存总控制信息的字段dwFlag判断BMC是否已经完成对共享内存的初始化;
步骤650、若BMC已经完成对共享内存的初始化,则进行BIOS区的初始化,跳转至630;
步骤660、若BMC没有完成对共享内存的初始化,则放弃此次写黑匣子信息记录操作,跳转至670。
步骤670、此次黑匣子信息记录操作结束。
图4C是OS黑匣子程序的实施步骤示意图,实施步骤如下:
步骤710、插入OS部分的黑匣子内核模块。
即安装OS部分的黑匣子程序。如果OS部分的黑匣子程序已经安装,则在payload上电时执行步骤720的操作。
步骤720、根据共享内存总控制信息的dwFlag字段,判断BMC是否已经完成对共享内存的初始化。若完成,则进行OS区的初始化。
步骤730、黑匣子内核模块中向OS内核注册捕获OS内核panic、die、reboot等异常行为的钩子函数;
步骤740、捕获到需要记录到黑匣子中的内核异常行为;
步骤750、判断OS区共享内存是否已经初始化;
步骤760、如果已经初始化,则按照环形缓冲区的读写控制方法写入黑匣子信息至相应的段中,跳转至步骤780;
步骤770、如果OS区没有初始化,则进行相应的处理。处理步骤包括771、772和773:
步骤771、根据共享内存总控制信息的字段dwFlag判断BMC是否已经完成对共享内存的初始化;
步骤772、若完成对共享内存的初始化,则进行OS区的初始化,初始化完成后,跳转至步骤760;
步骤773、若没有完成对共享内存的初始化,则放弃此次黑匣子信息记录操作,跳转至步骤780。
步骤780、此次黑匣子信息记录操作结束。
图4D是用户态黑匣子实施步骤图,实施步骤如下:
步骤810、插入用户态区的黑匣子内核模块;
即安装用户态部分的黑匣子程序。如果用户态部分的黑匣子程序已经安装,则在payload上电时执行步骤820的操作。
步骤820、内核模块中创建一个守护线程,用于接收用户态程序创建黑匣子段和写黑匣子信息的请求。
用户态区的分段并不是在分区初始化的时候分好的,而是在使用过程中进行分段,并设置对应的段控制信息。
步骤830、根据共享内存总控制信息的字段dwFlag,判断BMC是否已经完成对共享内存的初始化,若已经完成对共享内存的初始化,则进行用户态区的初始化。
步骤840、用户态程序请求创建一个黑匣子段;
步骤850、守护线程接收到用户态程序请求创建一个黑匣子段的请求后,判断用户态区共享内存是否已经初始化;
步骤860、在用户态区共享内存已经初始化的情况下,从空闲段中分配一个段作为该用户态程序的黑匣子段,并在将用户态程序传入的名字作为本段的名字;
步骤870、在用户态区共享内存没有初始化的情况下,进行对应的处理。
其中,首先初始化用户态区共享内存,在初始化成功之后分配空闲段给申请者,如果初始化失败,则将失败结果返回给用户态程序。
步骤870包括:
步骤871、如果没有初始化,则根据共享内存总控制信息的字段dwFlag判断BMC是否已经完成对共享内存的初始化;
这里的共享内存是指BMC创建的虚拟内存设备所对应的共享内存。
步骤872、若完成对共享内存的初始化,则进行用户态区的初始化,初始化完成后,从空闲段中拿出一个段作为该用户态程序的黑匣子段,并在将用户态程序传入的名字作为本段的名字;
步骤873、若没有完成对共享内存的初始化,则返回创建黑匣子段失败的信息给用户态程序,并结束本次操作。
步骤880、用户态程序请求向指定的黑匣子段写入黑匣子信息;
步骤890、守护线程接收到向指定的黑匣子段写入黑匣子信息的请求后,按照环形缓冲区的读写控制方法写入黑匣子信息至相应的段中。
基于与上述方法实施例相同或相似的构思,本发明实施例还提供一种信息存储装置,设置在服务器中的BMC上,参见图5,本发明提出的信息存储装置包括:
创建单元10,用于在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;
第一设置单元20,用于设置所述共享内存对应的控制信息;其中,所述控制信息用于在payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;
读取单元30,用于在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。
本发明实施例中,所述控制信息包括总控制信息;
所述第一设置单元20包括:
分区划分模块21,用于在所述共享内存中划分分区;
第一设置模块22,用于将所述分区对应的分区信息设置在所述总控制信息中,其中,共享内存包括BIOS区、OS区和用户态区三个分区。
本发明实施例中,所述总控制信息中包括如下字段:dwFlag字段、dwBiosBegin字段、dwBiosEnd字段、dwOsBegin字段、dwOsEnd字段、dwUserBegin字段和dwUserEnd字段;其中,
所述dwFlag字段用于表示所述共享内存是否已经完成初始化;
所述dwBiosBegin字段用于表示BIOS区开始地址,所述dwBiosEnd字段用于表示BIOS区结束地址;
所述dwOsBegin字段用于表示OS区开始地址,所述dwOsEnd字段用于表示OS区结束地址,
所述dwUserBegin字段用于表示用户态区开始地址,所述dwUserEnd字段用于表示用户态区结束地址;
所述第一设置模块20具体用于:
根据BIOS区、OS区和用户态区三个分区的结果,对应地设置总控制信息中各个字段的值;其中,将dwFlag字段设置为预定的第一值时,表示共享内存已经完成初始化,根据BIOS区的分区地址设置dwBiosBegin字段和dwBiosEnd字段、根据OS区的分区地址设置dwOsBegin字段和dwOsEnd字段、根据用户态区的分区地址设置dwUserBegin字段和dwUserEnd字段。
本发明实施例中,所述控制信息还包括区控制信息和段控制信息;
所述读取单元30包括:
判断模块31,用于读取各个分区对应的区控制信息,根据所述区控制信息中dwAreaFlag字段判断所述分区是否已经被payload使用;
异常信息读取模块32,用于当所述分区已经被payload使用时,读取分区中各段的段控制信息,根据所述段控制信息获取payload存储的异常信息的存储区域,并根据所述存储区域读取所述异常信息。
本发明实施例中,所述满足读取条件具体为:
预先设置的周期性的定时器的计时到时。
基于与上述实施例相同或相似的构思,本发明实施例还提供一种信息存储装置,设置在服务器中的payload上,参见图6,本发明提出的信息存储装置包括:
扫描单元50,用于扫描内存设备;
控制信息读取单元60,用于读取内存设备中设置的控制信息;
写入单元70,用于根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息。
本发明实施例中,所述控制信息包括总控制信息和区控制信息,
所述信息存储装置还包括:
第二设置单元80,用于根据获取分区信息;所述分区信息包括分区的开始地址和结束地址;以及,对分区执行分区初始化,其中,所述初始化包括设置对应的区控制信息。
本发明实施例中,
所述区控制信息包括如下字段:dwAreaFlag字段、dwAreaCtrSize字段、dwSectionCount字段、以及dwFirstSecAddr字段;其中,
所述dwAreaFlag字段用于表示对应的分区是否已经开启信息记录功能;
所述dwAreaCtrSize字段用于表示对应分区的控制信息大小;
所述dwSectionCount字段用于表示对应分区的包含的段数;
所述dwFirstSecAddr字段用于表示对应分区中第一个段的开始地址。
本发明实施例中,所述控制信息还包括段控制信息;
所述第二设置单元80包括:
分段设置模块,用于对所述分区进行分段,并设置各段对应的段控制信息;其中,各个分段用于存储不同类别的异常信息;
所述段控制信息包括如下字段:SecName字段、dwSecCtrSize字段、dwSecBegin字段、dwSecEnd字段、dwSecRead字段、dwSecWrite字段;其中,
所述SecName字段,用于表示当前分段的名称;
所述dwSecCtrSize字段,用于表示当前分段的控制信息大小,
dwSecBegin字段,用于表示当前分段的信息记录区域的开始地址,
dwSecEnd字段,用于表示当前分段的信息记录区域的结束地址,
dwSecRead字段,用于表示段内数据区读指针,用于BMC从所述指针指向的地方开始读取,并根据读取结果对所述指针进行改写;
dwSecWrite字段,用于表示段内数据区写指针,用于payload从所述指针指向的地方开始写入异常信息,并根据写入结果对所述指针进行改写。
本发明实施例中,所述写入单元70包括:
分区确认模块71,用于通过总控制信息确认对应的分区;
分段确认模块72,用于在所述分区初始化之后,根据段控制信息中的SecName字段,确定异常信息应该存储的分段;
写入模块73,用于获取段控制信息中的dwSecWrite字段,从dwSecWrite字段中指针指向的地方开始写入异常信息,并再写入之后,将所述指针改写为指向所述异常信息尾地址的下一个地址。
基于与上述实施例相同或相似的构思,本发明实施例还提供一种服务器,所述服务器包括本发明实施例提供的任一信息存储装置。
需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本发明的保护范围之内。

Claims (21)

1.一种信息存储方法,其特征在于,所述方法包括:
在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;
设置所述共享内存对应的控制信息;其中,所述控制信息用于有效负载payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;
在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。
2.根据权利要求1所述的信息存储方法,其特征在于,所述控制信息包括总控制信息;
所述设置所述共享内存对应的控制信息包括:
在所述共享内存中划分分区,并将所述分区对应的分区信息设置在所述总控制信息中,其中,共享内存包括基本输入输出系统BIOS区、操作系统OS区和用户态区。
3.根据权利要求2所述的信息存储方法,其特征在于,
所述总控制信息中包括如下字段:dwFlag字段、dwBiosBegin字段、dwBiosEnd字段、dwOsBegin字段、dwOsEnd字段、dwUserBegin字段和dwUserEnd字段;其中,
所述dwFlag字段用于表示所述共享内存是否已经完成初始化;
所述dwBiosBegin字段用于表示BIOS区开始地址,所述dwBiosEnd字段用于表示BIOS区结束地址;
所述dwOsBegin字段用于表示OS区开始地址,所述dwOsEnd字段用于表示OS区结束地址,
所述dwUserBegin字段用于表示用户态区开始地址,所述dwUserEnd字段用于表示用户态区结束地址;
所述根据分区的结果设置对应的总控制信息包括:
根据BIOS区、OS区和用户态区三个分区的结果,对应地设置总控制信息中各个字段的值;其中,将dwFlag字段设置为预定的第一值时,表示共享内存已经完成初始化,根据BIOS区的分区地址设置dwBiosBegin字段和dwBiosEnd字段、根据OS区的分区地址设置dwOsBegin字段和dwOsEnd字段、根据用户态区的分区地址设置dwUserBegin字段和dwUserEnd字段。
4.根据权利要求3所述的信息存储方法,其特征在于,所述控制信息还包括区控制信息和段控制信息;
所述根据所述控制信息,从所述共享内存中读取所述异常信息包括:
读取各个分区对应的区控制信息,根据所述区控制信息中dwAreaFlag字段判断所述分区是否已经被payload使用;
当所述分区已经被payload使用时,读取分区中各段的段控制信息,根据所述段控制信息获取payload存储的异常信息的存储区域,并根据所述存储区域读取所述异常信息。
5.根据权利要求1所述的信息存储方法,其特征在于,所述满足读取条件具体为:
预先设置的周期性的定时器的计时到时。
6.一种信息存储方法,其特征在于,所述方法包括:
扫描内存设备;
读取内存设备中设置的控制信息;
根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息。
7.根据权利要求1所述的信息存储方法,其特征在于,所述控制信息包括总控制信息和区控制信息,
在所述向所述内存设备中存储异常信息之前,还包括:
获取分区信息;所述分区信息包括分区的开始地址和结束地址;
对分区执行分区初始化,其中,所述初始化包括设置对应的区控制信息。
8.根据权利要求7所述的信息存储方法,其特征在于,
所述区控制信息包括如下字段:dwAreaFlag字段、dwAreaCtrSize字段、dwSectionCount字段、以及dwFirstSecAddr字段;其中,
所述dwAreaFlag字段用于表示对应的分区是否已经开启信息记录功能;
所述dwAreaCtrSize字段用于表示对应分区的控制信息大小;
所述dwSectionCount字段用于表示对应分区的包含的段数;
所述dwFirstSecAddr字段用于表示对应分区中第一个段的开始地址。
9.根据权利要求7所述的信息存储方法,其特征在于,所述控制信息还包括段控制信息;
所述对分区执行分区初始化还包括:
对所述分区进行分段,并设置各段对应的段控制信息;其中,各个分段用于存储不同类别的异常信息;
所述段控制信息包括如下字段:SecName字段、dwSecCtrSize字段、dwSecBegin字段、dwSecEnd字段、dwSecRead字段、dwSecWrite字段;其中,
所述SecName字段,用于表示当前分段的名称;
所述dwSecCtrSize字段,用于表示当前分段的控制信息大小,
dwSecBegin字段,用于表示当前分段的信息记录区域的开始地址,
dwSecEnd字段,用于表示当前分段的信息记录区域的结束地址,
dwSecRead字段,用于表示段内数据区读指针,用于单板管理控制器BMC从所述指针指向的地方开始读取,并根据读取结果对所述指针进行改写;
dwSecWrite字段,用于表示段内数据区写指针,用于payload从所述指针指向的地方开始写入异常信息,并根据写入结果对所述指针进行改写。
10.根据权利要求9所述的信息存储方法,其特征在于,所述根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息包括:
通过总控制信息确认对应的分区;
在所述分区初始化之后,根据段控制信息中的SecName字段,确定异常信息应该存储的分段;
获取段控制信息中的dwSecWrite字段,从dwSecWrite字段中指针指向的地方开始写入异常信息,并再写入之后,将所述指针改写为指向所述异常信息尾地址的下一个地址。
11.一种信息存储装置,设置在服务器中的单板管理控制器BMC上,其特征在于,所述方法包括:
创建单元,用于在本地内存中创建共享内存;并将所述共享内存模拟为内存设备;
第一设置单元,用于设置所述共享内存对应的控制信息;其中,所述控制信息用于payload根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置所述控制信息;
读取单元,用于在满足读取条件时,根据控制信息,从所述共享内存中读取所述异常信息,并将所述异常信息拷贝至硬盘。
12.根据权利要求11所述的信息存储装置,其特征在于,所述控制信息包括总控制信息;
所述第一设置单元包括:
分区划分模块,用于在所述共享内存中划分分区;
第一设置模块,用于将所述分区对应的分区信息设置在所述总控制信息中,其中,共享内存包括BIOS区、OS区和用户态区三个分区。
13.根据权利要求12所述的信息存储装置,其特征在于,
所述总控制信息中包括如下字段:dwFlag字段、dwBiosBegin字段、dwBiosEnd字段、dwOsBegin字段、dwOsEnd字段、dwUserBegin字段和dwUserEnd字段;其中,
所述dwFlag字段用于表示所述共享内存是否已经完成初始化;
所述dwBiosBegin字段用于表示BIOS区开始地址,所述dwBiosEnd字段用于表示BIOS区结束地址;
所述dwOsBegin字段用于表示OS区开始地址,所述dwOsEnd字段用于表示OS区结束地址,
所述dwUserBegin字段用于表示用户态区开始地址,所述dwUserEnd字段用于表示用户态区结束地址;
所述第一设置模块具体用于:
根据BIOS区、OS区和用户态区三个分区的结果,对应地设置总控制信息中各个字段的值;其中,将dwFlag字段设置为预定的第一值时,表示共享内存已经完成初始化,根据BIOS区的分区地址设置dwBiosBegin字段和dwBiosEnd字段、根据OS区的分区地址设置dwOsBegin字段和dwOsEnd字段、根据用户态区的分区地址设置dwUserBegin字段和dwUserEnd字段。
14.根据权利要求13所述的信息存储装置,其特征在于,所述控制信息还包括区控制信息和段控制信息;
所述读取单元包括:
判断模块,用于读取各个分区对应的区控制信息,根据所述区控制信息中dwAreaFlag字段判断所述分区是否已经被payload使用;
异常信息读取模块,用于当所述分区已经被payload使用时,读取分区中各段的段控制信息,根据所述段控制信息获取payload存储的异常信息的存储区域,并根据所述存储区域读取所述异常信息。
15.根据权利要求11所述的信息存储装置,其特征在于,所述满足读取条件具体为:
预先设置的周期性的定时器的计时到时。
16.一种信息存储装置,设置在服务器中的有效负载payload上,其特征在于,所述方法包括:
扫描单元,用于扫描内存设备;
控制信息读取单元,用于读取内存设备中设置的控制信息;
写入单元,用于根据所述控制信息向所述内存设备中存储异常信息,并根据异常信息的存储结果设置控制信息。
17.根据权利要求16所述的信息存储装置,其特征在于,所述控制信息包括总控制信息和区控制信息,
在所述向所述内存设备中存储异常信息之前,还包括:
第二设置单元,用于获取分区信息;所述分区信息包括分区的开始地址和结束地址;以及,对分区执行分区初始化,其中,所述初始化包括设置对应的区控制信息。
18.根据权利要求17所述的信息存储装置,其特征在于,
所述区控制信息包括如下字段:dwAreaFlag字段、dwAreaCtrSize字段、dwSectionCount字段、以及dwFirstSecAddr字段;其中,
所述dwAreaFlag字段用于表示对应的分区是否已经开启信息记录功能;
所述dwAreaCtrSize字段用于表示对应分区的控制信息大小;
所述dwSectionCount字段用于表示对应分区的包含的段数;
所述dwFirstSecAddr字段用于表示对应分区中第一个段的开始地址。
19.根据权利要求17所述的信息存储装置,其特征在于,所述控制信息还包括段控制信息;
所述第二设置单元包括:
分段设置模块,用于对所述分区进行分段,并设置各段对应的段控制信息;其中,各个分段用于存储不同类别的异常信息;
所述段控制信息包括如下字段:SecName字段、dwSecCtrSize字段、dwSecBegin字段、dwSecEnd字段、dwSecRead字段、dwSecWrite字段;其中,
所述SecName字段,用于表示当前分段的名称;
所述dwSecCtrSize字段,用于表示当前分段的控制信息大小,
dwSecBegin字段,用于表示当前分段的信息记录区域的开始地址,
dwSecEnd字段,用于表示当前分段的信息记录区域的结束地址,
dwSecRead字段,用于表示段内数据区读指针,用于BMC从所述指针指向的地方开始读取,并根据读取结果对所述指针进行改写;
dwSecWrite字段,用于表示段内数据区写指针,用于payload从所述指针指向的地方开始写入异常信息,并根据写入结果对所述指针进行改写。
20.根据权利要求19所述的信息存储装置,其特征在于,所述写入单元包括:
分区确认模块,用于通过总控制信息确认对应的分区;
分段确认模块,用于在所述分区初始化之后,根据段控制信息中的SecName字段,确定异常信息应该存储的分段;
写入模块,用于获取段控制信息中的dwSecWrite字段,从dwSecWrite字段中指针指向的地方开始写入异常信息,并再写入之后,将所述指针改写为指向所述异常信息尾地址的下一个地址。
21.一种服务器,其特征在于,
所述服务器包括如权利要求11~15中任一项所述的信息存储装置;
所述服务器还包括如权利要求16~19中任一项所述的信息存储装置。
CN201510650281.XA 2015-10-09 2015-10-09 一种信息存储方法和装置、及服务器 Pending CN106569904A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201510650281.XA CN106569904A (zh) 2015-10-09 2015-10-09 一种信息存储方法和装置、及服务器
PCT/CN2016/090846 WO2017059721A1 (zh) 2015-10-09 2016-07-21 一种信息存储方法和装置、及服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510650281.XA CN106569904A (zh) 2015-10-09 2015-10-09 一种信息存储方法和装置、及服务器

Publications (1)

Publication Number Publication Date
CN106569904A true CN106569904A (zh) 2017-04-19

Family

ID=58487240

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510650281.XA Pending CN106569904A (zh) 2015-10-09 2015-10-09 一种信息存储方法和装置、及服务器

Country Status (2)

Country Link
CN (1) CN106569904A (zh)
WO (1) WO2017059721A1 (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107168810A (zh) * 2017-05-10 2017-09-15 郑州云海信息技术有限公司 一种计算节点内存共享系统及读、写操作内存共享方法
CN108459918A (zh) * 2018-03-26 2018-08-28 曙光信息产业(北京)有限公司 数据共享方法及装置
CN109032678A (zh) * 2018-07-18 2018-12-18 郑州云海信息技术有限公司 控制bios打印信息量的方法、装置、介质及打印信息的方法
WO2019095655A1 (zh) * 2017-11-17 2019-05-23 华为技术有限公司 一种数据交互方法和计算设备
CN109947572A (zh) * 2019-03-25 2019-06-28 Oppo广东移动通信有限公司 通信控制方法、装置、电子设备及存储介质
CN111240898A (zh) * 2020-01-09 2020-06-05 中瓴智行(成都)科技有限公司 一种基于Hypervisor的黑匣子实现方法及系统
CN111381996A (zh) * 2020-03-16 2020-07-07 Oppo(重庆)智能科技有限公司 内存异常处理方法及装置
CN113626214A (zh) * 2021-07-16 2021-11-09 浪潮电子信息产业股份有限公司 一种信息传输方法、系统、电子设备及存储介质
WO2022063185A1 (zh) * 2020-09-27 2022-03-31 中兴通讯股份有限公司 数据采集、上报方法、系统、芯片、cpu及存储介质
CN116069638A (zh) * 2023-01-19 2023-05-05 蔷薇大树科技有限公司 一种基于内核态模拟分布式异常状态的方法
CN116225541A (zh) * 2022-12-08 2023-06-06 深圳市国鑫恒运信息安全有限公司 一种带内cpu与带外管理bmc通信的方法及通信系统
WO2023206957A1 (zh) * 2022-04-29 2023-11-02 苏州元脑智能科技有限公司 内存测试方法、装置、系统、设备及可读存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1306768C (zh) * 2001-06-05 2007-03-21 中兴通讯股份有限公司 共享内存地址搜索逻辑装置
US7451324B2 (en) * 2002-05-31 2008-11-11 Advanced Micro Devices, Inc. Secure execution mode exceptions
CN103699463B (zh) * 2012-09-28 2017-12-05 联想企业解决方案(新加坡)有限公司 一种使用Xeon处理器的服务器的内存测试方法和系统
CN103809988B (zh) * 2012-11-07 2017-09-29 联想(北京)有限公司 一种信息处理方法及电子设备
CN103500133A (zh) * 2013-09-17 2014-01-08 华为技术有限公司 故障定位方法及装置

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107168810A (zh) * 2017-05-10 2017-09-15 郑州云海信息技术有限公司 一种计算节点内存共享系统及读、写操作内存共享方法
WO2019095655A1 (zh) * 2017-11-17 2019-05-23 华为技术有限公司 一种数据交互方法和计算设备
CN108459918A (zh) * 2018-03-26 2018-08-28 曙光信息产业(北京)有限公司 数据共享方法及装置
CN109032678A (zh) * 2018-07-18 2018-12-18 郑州云海信息技术有限公司 控制bios打印信息量的方法、装置、介质及打印信息的方法
CN109947572A (zh) * 2019-03-25 2019-06-28 Oppo广东移动通信有限公司 通信控制方法、装置、电子设备及存储介质
CN109947572B (zh) * 2019-03-25 2023-09-05 Oppo广东移动通信有限公司 通信控制方法、装置、电子设备及存储介质
CN111240898B (zh) * 2020-01-09 2023-08-15 中瓴智行(成都)科技有限公司 一种基于Hypervisor的黑匣子实现方法及系统
CN111240898A (zh) * 2020-01-09 2020-06-05 中瓴智行(成都)科技有限公司 一种基于Hypervisor的黑匣子实现方法及系统
CN111381996B (zh) * 2020-03-16 2023-06-06 Oppo(重庆)智能科技有限公司 内存异常处理方法及装置
CN111381996A (zh) * 2020-03-16 2020-07-07 Oppo(重庆)智能科技有限公司 内存异常处理方法及装置
WO2022063185A1 (zh) * 2020-09-27 2022-03-31 中兴通讯股份有限公司 数据采集、上报方法、系统、芯片、cpu及存储介质
CN113626214A (zh) * 2021-07-16 2021-11-09 浪潮电子信息产业股份有限公司 一种信息传输方法、系统、电子设备及存储介质
CN113626214B (zh) * 2021-07-16 2024-02-09 浪潮电子信息产业股份有限公司 一种信息传输方法、系统、电子设备及存储介质
WO2023206957A1 (zh) * 2022-04-29 2023-11-02 苏州元脑智能科技有限公司 内存测试方法、装置、系统、设备及可读存储介质
CN116225541A (zh) * 2022-12-08 2023-06-06 深圳市国鑫恒运信息安全有限公司 一种带内cpu与带外管理bmc通信的方法及通信系统
CN116069638A (zh) * 2023-01-19 2023-05-05 蔷薇大树科技有限公司 一种基于内核态模拟分布式异常状态的方法
CN116069638B (zh) * 2023-01-19 2023-09-01 蔷薇大树科技有限公司 一种基于内核态模拟分布式异常状态的方法

Also Published As

Publication number Publication date
WO2017059721A1 (zh) 2017-04-13

Similar Documents

Publication Publication Date Title
CN106569904A (zh) 一种信息存储方法和装置、及服务器
US10379967B2 (en) Live rollback for a computing environment
CN103493027B (zh) 虚拟磁盘存储技术
CN104603750B (zh) 使用bpram来布局和执行软件应用
CN106062742B (zh) 用于改进快照性能的系统和方法
CN108763099A (zh) 系统的启动方法、装置、电子设备和存储介质
US20100211944A1 (en) Information processing apparatus
CN114580344B (zh) 测试激励生成方法、验证方法、验证系统及相关设备
CN102207896A (zh) 虚拟机崩溃文件生成技术
CN102707900A (zh) 虚拟盘存储技术
US10402100B2 (en) Techniques for path optimization in storage networks
JP7215971B2 (ja) 記憶機器のデータ位置の処理方法及び処理装置、コンピュータ機器並びにコンピュータ読み取り可能な記憶媒体
CN106227621A (zh) 基于逻辑卷管理精简卷的数据备份方法及系统
CN101387989A (zh) 构建基于分区管理的虚拟存储设备的计算机系统及方法
CN105760218A (zh) 一种虚拟机在线迁移方法及装置
CN105607962A (zh) 一种虚拟机备份的方法和装置
CN105389190B (zh) 一种操作系统启动的方法、装置及系统
CN114710263B (zh) 密钥管理方法、密钥管理装置、密钥管理设备及存储介质
CN108475201A (zh) 一种虚拟机启动过程中的数据获取方法和云计算系统
US11080909B2 (en) Image layer processing method and computing device
CN116383012B (zh) 获取开机日志的方法及装置、传输开机日志的方法
US20150212847A1 (en) Apparatus and method for managing cache of virtual machine image file
CN116167310A (zh) 一种验证多核心处理器缓存一致性的方法及装置
EP4278265B1 (en) Memory address compression within an execution trace
US20070016761A1 (en) Method, apparatus, and computer program product for implementing enhanced system behavior control

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170419

WD01 Invention patent application deemed withdrawn after publication