一种飞腾服务器平台下存储空间合并成的方法
文献发布时间:2023-06-19 11:22:42
技术领域
本发明涉及计算机存储空间管理技术,特别涉及一种飞腾服务器平台下存储空间合并成的方法。
背景技术
块设备是操作系统中的一类以内存块为最小读写单位的设备。类如U盘、NANDFLASH、SD卡、硬盘等等,均属于块设备。块设备的物理存储空间就是操作系统中的物理地址,且块设备的物理存储空间是连续的物理地址。块设备在使用前需要将块设备注册进操作系统中,即操作系统分配一块大小与块设备的物理存储空间大小相同的虚拟地址连续的虚拟地址空间,且操作系统使分配给块设备的虚拟地址空间与块设备的物理存储空间的物理地址一一对应。块设备的访问是通过namespace机制,即块设备的物理存储空间注册进操作系统后,会建立一个namespace节点与块设备的物理存储空间相对应。因为块设备的物理存储空间是物理地址连续的,所以块设备对应的namespace节点对应的物理存储空间也是物理地址连续的。FT2000+国产处理器的服务器平台使用的块设备访问机制就是上述所表述的。
由于一个namespace节点对应一个物理地址连续的块设备。所以如果两个相同功能的块设备,且两个块设备的物理存储空间对应的物理地址不连续,操作系统就会建立两个namespace节点与两个块设备相对应。那么在用户使用的时候就需要分别对两个块设备分别使用。但是有的时候用户需要将两个块设备当成一个设备使用,比如两块FLASH协同存储一份数据,而数据的大小比两块FLASH所能提供的存储空间都大。而现有的技术只能将这份大数据在用户层进行分割后再存储。这样会从访问机制上降低了数据的访问速率,同时也增加了用户层程序的复杂度。
发明内容
本发明涉及一种飞腾服务器平台下存储空间合并成的方法,用于解决上述现有技术的问题。
本发明一种飞腾服务器平台下存储空间合并成的方法,其中,包括:步骤1:在飞腾服务器平台上电启动,进入linux内核启动阶段的时候,linux内核启动代码遍历Linux内核资源链表,通过资源属性参数,分辨出资源链表上需要合并成一个namespace节点访问的块设备资源,从分辨出的块设备资源中得到块设备资源的大小size,将size存储到一个全局链表global_res_list中;步骤2:依次遍历资源链表上所有的资源,将分辨出的块设备资源,依次都保存到步骤1中的全局链表global_res_list中,计算得到多个块设备的物理地址空间总和size_all;步骤3:linux内核启动到初始化外部设备阶段的时候,块设备匹配linux内核驱动,在块设备所对应的linux内核驱动中添加判断,判断是否是第一个块设备进行的linux内核驱动匹配,如果是,linux内核运行步骤4,如果不是,linux内核则终止本次块设备匹配linux内核驱动的工作,linux内核运行步骤7;步骤4:Linux内核驱动对块设备进行初始化;步骤5:遍历资源链表上所有资源,根据资源属性,依次遍历,获取到每一个所需的块设备资源,就将此块设备资源的物理地址空间的起始地址和大小映射到步骤4申请的虚拟地址空间中;步骤6:将所有需要合并的块设备都映射到linux内核驱动所申请的虚拟地址空间中后,将块设备的linux内核驱动注册进linux内核中,进入步骤8;步骤7:忽略此块设备的linux内核驱动匹配,进入步骤8;步骤8:完成块设备的linux内核驱动工作,建立与块设备对应的namespace节点。
根据本发明所述的飞腾服务器平台下存储空间合并成的方法的一实施例,其中,计算得到多个块设备的物理地址空间总和size_all包括:在遍历完资源链表后的linux内核启动阶段,添加遍历步骤1的全局链表global_res_list并且将链表global_res_list上保存的各个size依次进行加和的函数,得到多个块设备的物理地址空间总和size_all。
根据本发明所述的飞腾服务器平台下存储空间合并成的方法的一实施例,其中,步骤4:Linux内核驱动对块设备进行初始化包括:在块设备的linux内核驱动中的probe函数中,从操作系统中申请一块大小size_all的虚拟地址空间。
根据本发明所述的飞腾服务器平台下存储空间合并成的方法的一实施例,其中,步骤5中,从资源链表上每找到一个新的块设备资源,将此块设备资源的物理地址空间的起始地址映射到上一个找到的块设备资源的物理地址空间的结束地址的下一个地址上,新找到的块设备资源映射到虚拟地址空间的大小为新找到的块设备资源的大小。
根据本发明所述的飞腾服务器平台下存储空间合并成的方法的一实施例,其中,步骤8:完成块设备的linux内核驱动工作包括:,根据注册的块设备驱动,使用linux内核中建立namespace的功能模块,实现建立与块设备对应的namespace节点。
本发明主要将多个物理地址不连续的块设备的物理存储空间大小依次加和。并且向操作系统申请一块与加和后大小相同的虚拟地址空间。使各个块设备的物理地址空间依次映射到申请的虚拟地址空间中。从而提升数据访问的速率和降低用户层程序的复杂度。
附图说明
图1飞腾服务器平台上多个块设备与申请的虚拟地址空间映射示意图
图2飞腾服务器平台上多个块设备物理存储空间合并成一个namespace工作流程图
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明的多个块设备的物理地址空间映射到第一个块设备匹配的驱动从操作系统中申请的一块虚拟地址空间。多个块设备的物理地址空间是不连续的,根据物理地址的从小到大排序,依次将多个块设备的物理地址空间映射到虚拟地址空间中。参考图1所示。
飞腾服务器平台上多个块设备物理存储空间合并成一个namespace工作流程参考图2所示。包括以下步骤:
步骤1:在飞腾服务器平台上电启动,进入linux内核启动阶段的时候,linux内核启动代码遍历Linux内核资源链表。通过资源属性参数,分辨出哪些资源链表上的资源是需要合并成一个namespace节点访问的块设备资源。从分辨出的块设备资源中得到块设备资源的大小size。将size存储到一个全局链表global_res_list中。
步骤2:依次遍历资源链表上所有的资源,将分辨出的块设备资源,依次都保存到步骤1中的全局链表global_res_list中。然后在遍历完资源链表后的linux内核启动阶段,添加遍历步骤1的全局链表global_res_list并且将链表global_res_list上保存的各个size依次进行加和的函数。得到多个块设备的物理地址空间总和size_all。
步骤3:linux内核启动到初始化外部设备阶段的时候,块设备匹配linux内核驱动,在块设备所对应的linux内核驱动中添加判断,判断是否是第一个块设备进行的linux内核驱动匹配。如果是,那么linux内核往下运行步骤4。如果不是,linux内核则终止本次块设备匹配linux内核驱动的工作,linux内核运行步骤7。
步骤4:Linux内核驱动对块设备进行初始化。在块设备的linux内核驱动中的probe函数中,从操作系统中申请一块大小为步骤2中size_all的虚拟地址空间。
步骤5:遍历资源链表上所有资源,根据资源属性,依次遍历。获取到每一个所需的块设备资源,就将此块设备资源的物理地址空间的起始地址和大小映射到步骤4申请的虚拟地址空间中。从资源链表上每找到一个新的块设备资源,就将此块设备资源的物理地址空间的起始地址映射到上一个找到的块设备资源的物理地址空间的结束地址的下一个地址上。新找到的块设备资源映射到虚拟地址空间的大小为新找到的块设备资源的大小。
步骤6:将所有需要合并的块设备都映射到linux内核驱动所申请的虚拟地址空间中后,linux内核将块设备的linux内核驱动注册进linux内核中。进入步骤8。
步骤7:忽略此块设备的linux内核驱动匹配,进入步骤8。
步骤8:完成块设备的linux内核驱动工作。根据注册的块设备驱动,建立对应的namespace节点。结束。
本发明将需要合并的块设备驱动的物理地址空间,依次合并进第一个块设备驱动申请的虚拟地址空间中。其余的块设备均不注册块设备驱动。将所有的块设备作为一个namespace节点访问。因为多个块设备作为同一个namespace节点访问,减少了多个namespace节点间切换的开销,所以不仅提升了数据访问速率,也降低了用户层程序的复杂度。
本发明FT2000+新一代国产多核处理器上运行的操作系统,虚拟地址位宽达到48位。且操作系统中可以用于分配给块设备的虚拟地址空间达512TB。本发明与现有技术相比,提出的技术方法将多个块设备的物理地址空间合并成一个namespace节点。在分布式数据存储时,因为减少了多个块设备的namespace节点间的切换的开销,能够显著提升数据访问的速率。而且可以兼容现有的应用程序在其上的运行。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
- 一种飞腾服务器平台下存储空间合并成的方法
- 一种飞腾服务器平台下基于非易失内存的实时监控方法