掌桥专利:专业的专利平台
掌桥专利
首页

一种固件存储FRU数据的方法、系统、设备以及介质

文献发布时间:2023-06-19 16:09:34



技术领域

本发明涉及服务器领域,具体涉及一种固件存储FRU数据的方法、系统、设备以及存储介质。

背景技术

BMC是管理服务器和查看服务器状态的最重要的工具;而系统固件在其中起到了关键作用,BMC的Web端显示的服务器设备信息和Web端支持的功能都是通过系统固件提供服务和支持。例如:BMC的Web端显示的CPU、内存和PCIE设备的信息都需要系统固件进行收集发送给BMC显示在BMC的web页面,而这些数据信息我们称为FRU数据;在系统启动的过程中,Host端要收集FRU数据进行储存,BMC要从Host端获取FRU数据,然后解析显示在Web端,FRU数据是否能快速、准确传输到BMC端并显示到Web端,对服务器的开机速度和管理至关重要。

现有技术下在skiboot阶段固件存储FRU数据的方式,是把所有FRU数据存储在一段完整的连续地址空间内,每一条FRU数据由数据头和实际数据组成如图1所示,每一条FRU数据由一个一个的小单元组成,而每一条FRU数据有几个小单元由数据头中的数据决定,而数据头中有唯一的变量能够区分一条FRU数据,由于每一条FRU数据的长度都是不相等的,因此我们采用连续内存存储的方式,必须通过指针移动的方式进行存储,这种方式很容易出错,大大降低了程序的稳定性;Host存储完成之后,当BMC请求FRU数据时,我们需要从连续内存的起始地址开始,进行比对,即使每一条FRU数据的数据头中有唯一标识一条FRU数据的变量,当我们由对比结果知道该条FRU数据不符合条件时,我们依然要根据当前FRU数据头的信息,去循环移动指针,直到把该指针移动到该条FRU数据的实际数据最后,才能开启下一条FRU数据数据头的比对,若不符合条件,依次进行循环,直到找到符合条件的FRU数据,这种查询数据的方式,会严重影响查询数据的速度,降低Host和BMC的通信效率。

发明内容

有鉴于此,为了克服上述问题的至少一个方面,本发明实施例提出一种固件存储FRU数据的方法,包括以下步骤:

获取内存板卡的数量和CPU的数量;

创建链表;

基于所述内存板卡的数量和CPU的数量定义所述链表的链表头;

采集FRU数据;

将每一个FRU数据的写入内存空间并将存储地址依次写入到链表的节点中。

在一些实施例中,还包括:

响应于接收到获取FRU数据的请求,从所述链表中的节点中获取存储地址并根据存储地址获取FRU数据。

在一些实施例中,还包括:

根据获取到的FRU数据中数据头的信息判断是否是待请求的FRU数据;

响应于不是待请求的FRU数据,查询所述链表的下一个节点中的存储地址以获取下一个FRU数据,直到获取到待请求的FRU数据。

在一些实施例中,采集FRU数据,进一步包括:

在每一个FRU数据的头部利用预设变量标识FRU数据的大小。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种固件存储FRU数据的系统,包括:

获取模块,配置为获取内存板卡的数量和CPU的数量;

创建模块,配置为创建链表;

定义模块,配置为基于所述内存板卡的数量和CPU的数量定义所述链表的链表头;

采集模块,配置为采集FRU数据;

存储模块,配置为将每一个FRU数据的写入内存空间并将存储地址依次写入到链表的节点中。

在一些实施例中,还包括获取模块,配置为:

响应于接收到获取FRU数据的请求,从所述链表中的节点中获取存储地址并根据存储地址获取FRU数据。

在一些实施例中,获取模块还配置为:

根据获取到的FRU数据中数据头的信息判断是否是待请求的FRU数据;

响应于不是待请求的FRU数据,查询所述链表的下一个节点中的存储地址以获取下一个FRU数据,直到获取到待请求的FRU数据。

在一些实施例中,采集模块还配置为:

在每一个FRU数据的头部利用预设变量标识FRU数据的大小。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机设备,包括:

至少一个处理器;以及

存储器,所述存储器存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时执行如上所述的任一种固件存储FRU数据的方法的步骤。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时执行如上所述的任一种固件存储FRU数据的方法的步骤。

本发明具有以下有益技术效果之一:本发明能够降低系统固件存储FRU数据的复杂度,使系统程序在运行过程中具有更强的鲁棒性;其次在BMC请求FRU数据时,Host端能够更加高效的查询到BMC想要的数据,发送至BMC,使Host和BMC通信效率更高。进而提高操作系统底层引导程序的稳定性以及固件和BMC之间的通信效率,使服务器能够快速稳定开机和准确的显示设备信息。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为FUR数据格式示意图;

图2为本发明的实施例提供的固件存储FRU数据的方法的流程示意图;

图3为现有技术中固件存储FRU数据的方法的流程框图;

图4为本发明的实施例提供的固件存储FRU数据的方法的流程框图;

图5为本发明的实施例提供的固件存储FRU数据的系统的结构示意图;

图6为本发明的实施例提供的计算机设备的结构示意图;

图7为本发明的实施例提供的计算机可读存储介质的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

根据本发明的一个方面,本发明的实施例提出一种固件存储FRU数据的方法,如图2所示,其可以包括步骤:

S1,获取内存板卡的数量和CPU的数量;

S2,创建链表;

S3,基于所述内存板卡的数量和CPU的数量定义所述链表的链表头;

S4,采集FRU数据;

S5,将每一个FRU数据的写入内存空间并将存储地址依次写入到链表的节点中。

本发明能够降低系统固件存储FRU数据的复杂度,使系统程序在运行过程中具有更强的鲁棒性;其次在BMC请求FRU数据时,Host端能够更加高效的查询到BMC想要的数据,发送至BMC,使Host和BMC通信效率更高。进而提高操作系统底层引导程序的稳定性以及固件和BMC之间的通信效率,使服务器能够快速稳定开机和准确的显示设备信息。

在一些实施例中,还包括:

响应于接收到获取FRU数据的请求,从所述链表中的节点中获取存储地址并根据存储地址获取FRU数据。

在一些实施例中,还包括:

根据获取到的FRU数据中数据头的信息判断是否是待请求的FRU数据;

响应于不是待请求的FRU数据,查询所述链表的下一个节点中的存储地址以获取下一个FRU数据,直到获取到待请求的FRU数据。

在一些实施例中,采集FRU数据,进一步包括:

在每一个FRU数据的头部利用预设变量标识FRU数据的大小。

具体的,如图3所示,现有技术中在skiboot阶段,系统固件首先进行FRU数据的收集,边收集边存储,最终完成所有FRU数据的收集,收集完成之后,等待BMC请求获取,然后根据BMC的请求,查询相应的FRU数据发送给BMC。现有存储方式为把所有的FRU数据存储到连续内存空间下,首先申请一个起始内存地址,然后收集FRU数据之后从起始内存地址开始依次往后存放,最终形成整块FRU数据集;当BMC请求FRU数据时,从起始地址开始,逐步向后查询,直到查询到符合要求的FRU数据。

本发明是修改了现有数据存储的方式,把现有的这种连续内存存储FRU数据的方式修改为以链表的方式存储,这种数据存储方式在系统固件进行数据存储的时候更方便稳定,功能实现复杂度降低,并且在BMC请求数据时,能够更高效的查询到相关数据发送给BMC。

如图4所示,Host存储数据时:

1)在skiboot阶段确定当前机器的CPU个数和内存板卡的数量,然后基于CPU个数和内存板卡的数量定义一个存储FRU数据的链表头。

2)在合适的阶段开始收集FRU数据,一条数据收集完成插入FRU数据链表。

3)判断数据是否收集完成,如果没有收集完成则继续收集。

4)否则获得最终的FRU数据集链表,FRU数据收集过程结束。

BMC获取数据时

1)根据BMC发送的请求条件,从FRU数据链表的第二个节点开始对比。

2)如果该节点FRU数据符合条件,则把该条FRU数据发送至BMC。

3)否则指向链表的下一节点,继续进行对比。

4)直到找到符合请求条件的FRU数据。

本发明提供的系统固件存储FRU数据的方案,首先创建一个FRU数据集的链表头,后续收集的所有FRU数据,直接插入链表,最终形成FRU数据集链表,这种方式更加高效且稳定简单;当BMC请求FRU数据时,Host能够快速的查询FRU数据集链表,由于是查询链表,只需要对比FRU数据头就行了,不符合要求直接对比下一条FRU数据头,直到找到符合要求的FRU数据,这种方式能够快速找到符合要求的FRU数据发送至BMC,提高了Host端到BMC端的通信效率。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种固件存储FRU数据的系统400,如图5所示,包括:

获取模块401,配置为获取内存板卡的数量和CPU的数量;

创建模块402,配置为创建链表;

定义模块403,配置为基于所述内存板卡的数量和CPU的数量定义所述链表的链表头;

采集模块404,配置为采集FRU数据;

存储模块405,配置为将每一个FRU数据的写入内存空间并将存储地址依次写入到链表的节点中。

在一些实施例中,还包括获取模块,配置为:

响应于接收到获取FRU数据的请求,从所述链表中的节点中获取存储地址并根据存储地址获取FRU数据。

在一些实施例中,获取模块还配置为:

根据获取到的FRU数据中数据头的信息判断是否是待请求的FRU数据;

响应于不是待请求的FRU数据,查询所述链表的下一个节点中的存储地址以获取下一个FRU数据,直到获取到待请求的FRU数据。

在一些实施例中,采集模块还配置为:

在每一个FRU数据的头部利用预设变量标识FRU数据的大小。

本发明提供的系统固件存储FRU数据的方案,首先创建一个FRU数据集的链表头,后续收集的所有FRU数据,直接插入链表,最终形成FRU数据集链表,这种方式更加高效且稳定简单;当BMC请求FRU数据时,Host能够快速的查询FRU数据集链表,由于是查询链表,只需要对比FRU数据头就行了,不符合要求直接对比下一条FRU数据头,直到找到符合要求的FRU数据,这种方式能够快速找到符合要求的FRU数据发送至BMC,提高了Host端到BMC端的通信效率。

基于同一发明构思,根据本发明的另一个方面,如图6所示,本发明的实施例还提供了一种计算机设备501,包括:

至少一个处理器520;以及

存储器510,存储器510存储有可在处理器上运行的计算机程序511,处理器520执行程序时执行如上的任一种固件存储FRU数据的方法的步骤。

基于同一发明构思,根据本发明的另一个方面,如图7所示,本发明的实施例还提供了一种计算机可读存储介质601,计算机可读存储介质601存储有计算机程序指令610,计算机程序指令610被处理器执行时执行如上的任一种固件存储FRU数据的方法的步骤。

最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。

此外,应该明白的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。

上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

相关技术
  • 一种固件存储FRU数据的方法、系统、设备以及介质
  • 一种FRU数据烧录方法、系统、设备及计算机存储介质
技术分类

06120114721088