一种基于申威架构的设备中内存的处理方法及装置与流程

文档序号:16247343发布日期:2018-12-11 23:42阅读:248来源:国知局
本发明实施例涉及硬件设备故障处理
技术领域
:,具体涉及一种基于申威架构的设备中内存的处理方法及装置。
背景技术
:在基于申威架构的设备(可以包括防火墙等硬件设备)初始化过程中会将大页内存页按照物理地址从小到大排序,并且将属于同一物理节点的物理地址连续的大页内存页进行合并,从而合并成为一个大页内存大块,将该大页内存大块交由一个内存描述符表(rte_memseg)来管理,不同的大页内存大块的物理地址可能是分隔不连续的。现有技术中在上述大页内存初始化时,只要是物理地址连续的大页内存页就连接整合成一个大页内存大块,未提供内存地址限制相关接口,同样数据包缓存(packetbuffer以下简称“pkb”)及dma收发报文的内存分配也未提供内存地址限制相关接口,如此分配出来的pkb及dma收发报文的内存不能保证是在预设内存限制地址之内,如果不在该预设内存限制地址内,会导致设备出现收发报文的异常状况,例如:在该设备的输入/输出内存管理单元(input/outputmemorymanagementunit以下简称“iommu”)模式开启时会有网卡无法正常收发报文的情况出现。因此,如何避免上述缺陷,避免基于申威架构的设备出现无法收发报文的异常状况,成为亟须解决的问题。技术实现要素:针对现有技术存在的问题,本发明实施例提供一种基于申威架构的设备中内存的处理方法及装置。第一方面,本发明实施例提供一种基于申威架构的设备中内存的处理方法,所述方法包括:在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。第二方面,本发明实施例提供一种基于申威架构的设备中内存的处理装置,所述装置包括:获取单元,用于在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;切割单元,用于在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;过滤单元,用于根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配单元,用于分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。第三方面,本发明实施例提供一种基于申威架构的电子设备,包括:申威处理器、存储器和总线,其中,所述申威处理器和所述存储器通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。第四方面,本发明实施例提供一种非暂态计算机可读存储介质,包括:所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如下方法:在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。本发明实施例提供的基于申威架构的设备中内存的处理方法及装置,通过在大页内存初始化的过程中,根据设备收发报文所需的内存使用量和预设内存限制地址,切割获取到目标内存块;在内存分配的过程中,通过pkb内存标识或dma内存标识在待分配内存中进行过滤,以获取、并分配目标内存块,能够避免基于申威架构的设备出现无法收发报文的异常状况。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例基于申威架构的设备中内存的处理方法流程示意图;图2为本发明实施例基于申威架构的设备中内存的处理装置结构示意图;图3为本发明实施例提供的电子设备实体结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明实施例基于申威架构的设备中内存的处理方法流程示意图,如图1所示,本发明实施例提供的一种基于申威架构的设备中内存的处理方法,包括以下步骤:s101:在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和。具体的,装置在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和。装置可以理解为该设备中的具有逻辑运算功能的部件,用于执行本发明实施例的方法。可以通过在数据平面开发套件(dataplanedevelopmentkit,以下简称“dpdk”)中的rte_eal_hugepage_init()函数进行所述大页内存初始化,再通过使所述rte_eal_hugepage_init()函数调用memory_get_pkb_dma_size()函数获取所述内存使用量,需要说明的是:该memory_get_pkb_dma_size()函数基于该设备的所安装的内存封装有对应的预留pkb+dma内存,例如设备所能支持的最大内存容量为8g,所安装的内存容量为4g(预留pkb+dma内存从4g中扣取),则预留pkb+dma内存可对应为自定义128m;所安装的内存容量为8g(预留pkb+dma内存从8g中扣取),则预留pkb+dma内存可对应为自定义256m。为了便于后续的比较计算,可以将该内存使用量进行单位换算成字节。s102:在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块。具体的,装置在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块。大页内存大块合并可以理解为在上述大页内存初始化的过程中进行的,预设内存限制地址的具体数值可以根据该设备的硬件信息的指标参数来确定,硬件信息可以包括cpu信息和/或pci总线信息、与所述cpu信息对应的所述指标参数可以包括cpu的体系架构和/或主频,但不作具体限定;与所述pci总线信息对应的所述指标参数可以包括pci总线下挂的外设信息的参数,但不作具体限定。预设内存限制地址可以根据实际情况自主设置,可选为3g(0xc0000000)。切割的步骤具体可以包括:一次切割所述大页内存大块,以使切割后的两部分中的至少一部分对应的内存总量大于等于所述内存使用量、且该内存总量的起止地址小于所述预设内存限制地址;将所述至少一部分作为所述目标内存块。通常情况下,只需要对开始地址小于内存限制地址而结束地址大于内存限制地址的大页内存大块以内存限制地址为临界值进行切割即可,举例如下:假设预设内存限制地址选为3g(0xc0000000)、收发内存使用量选为128m,大页内存大块a内存大小为7g,其为起止地址跨内存限制地址的大块,可以一次将大页内存大块a以内存限制地址为临界值进行切割,以大页内存大块a开始地址到以内存限制地址3g(0xc0000000)为结束地址的一块作为第一部分;以及以内存限制地址3g(0xc0000000)为开始地址到以大页内存大块a结束地址的一块作为第二部分,假若切割后的第一部分内存总量大于所需收发内存使用量128m,则将切割后的第一部分作为目标内存块;而切割后的第二部分则不能作为目标内存块。对于另一种情况,假若大页内存大块b内存大小为1g,其为起止地址都小于内存限制地址的大块,且满足内存总量大于收发内存使用量128m,则该大页内存大块b则无需切割可直接作为目标内存块使用。s103:根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块。具体的,装置根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块。pkb标识或dma标识可以为所述pkb内存或所述dma内存各自的名称字符串,该名称字符串可以在dpdk调用malloc_heap_alloc()函数对应位置写入,该malloc_heap_alloc()函数用于在剩余内存描述符表(free_memseg)中查找(调用find_suitable_element()函数)分配(调用malloc_elem_alloc()函数)所需的可用的内存。即该调用函数当检测到该名称字符串,即可获知所需的可用的内存是和所述pkb内存或所述dma内存相关的。具体获取目标内存块的步骤可以为:根据pkb标识或dma标识,对所述待分配内存中的目标大页内存大块直接跳过,直到获取到所述目标内存块;其中,所述目标大页内存大块的起止物理地址大于所述预设内存限制地址。参照上述举例:如果起止物理地址均大于内存限制地址3g,则直接跳过(内存按物理地址从高到低使用)。更进一步地,可以通过在dpdk中调用find_suitable_element()函数,以使所述find_suitable_element()函数根据所述名称字符串,对所述待分配内存中的不满足过滤条件的大页内存大块直接跳过,直到获取到所述目标内存块。需要说明的是:其他非dma内存和非pkb内存的处理流程不再本发明实施例考虑范围之内。s104:分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。具体的,装置分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。可以参照上述实施例中通过malloc_heap_alloc()函数在剩余内存描述符表(free_memseg)中查找(调用find_suitable_element()函数)分配(调用malloc_elem_alloc()函数)所需的可用的内存,以供所述pkb内存和所述dma内存使用。本发明实施例提供的基于申威架构的设备中内存的处理方法,通过在大页内存初始化的过程中,根据设备收发报文所需的内存使用量和预设内存限制地址,切割获取到目标内存块;在内存分配的过程中,通过pkb内存标识或dma内存标识在待分配内存中进行过滤,以获取、并分配目标内存块,能够避免基于申威架构的设备出现无法收发报文的异常状况。在上述实施例的基础上,所述根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块,包括:一次切割所述大页内存大块,以使切割后的两部分中的至少一部分对应的内存总量大于等于所述内存使用量、且所述内存总量的起止地址小于所述预设内存限制地址。具体的,装置一次切割所述大页内存大块,以使切割后的两部分中的至少一部分对应的内存总量大于等于所述内存使用量、且所述内存总量的起止地址小于所述预设内存限制地址。可参照上述实施例,不再赘述。将所述至少一部分作为所述内存块。具体的,装置将所述至少一部分作为所述内存块。可参照上述实施例,不再赘述。本发明实施例提供的基于申威架构的设备中内存的处理方法,使分割后的内存块对应的内存总量大于等于内存使用量、且该内存总量的起止地址小于预设内存限制地址,能够有效避免基于申威架构的设备出现无法收发报文的异常状况。在上述实施例的基础上,所述根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块,包括:根据所述pkb标识或所述dma标识,对所述待分配内存中的目标大页内存大块直接跳过,直到获取到所述目标内存块;其中,所述目标大页内存大块的起止物理地址大于所述预设内存限制地址。具体的,装置根据所述pkb标识或所述dma标识,对所述待分配内存中的目标大页内存大块直接跳过,直到获取到所述目标内存块;其中,所述目标大页内存大块的起止物理地址大于所述预设内存限制地址。可参照上述实施例,不再赘述。本发明实施例提供的基于申威架构的设备中内存的处理方法,通过在待分配内存中过滤掉目标大页内存大块,能够快速获取到目标内存块。在上述实施例的基础上,所述pkb标识或所述dma标识标识为所述pkb内存或所述dma内存各自的名称字符串;相应的,所述根据所述pkb标识或所述dma标识,对所述待分配内存中的目标大页内存大块直接跳过,直到获取到所述目标内存块,包括:通过在数据平面开发套件dpdk中调用find_suitable_element()函数,以使所述find_suitable_element()函数根据所述名称字符串,对所述待分配内存中的目标大页内存大块直接跳过,直到获取到所述目标内存块。具体的,装置通过在数据平面开发套件dpdk中调用find_suitable_element()函数,以使所述find_suitable_element()函数根据所述名称字符串,对所述待分配内存中的目标大页内存大块直接跳过,直到获取到所述目标内存块。可参照上述实施例,不再赘述。本发明实施例提供的基于申威架构的设备中内存的处理方法,通过调用相应函数实现在待分配内存中过滤掉目标大页内存大块,进一步能够方便、有效和快速地获取到目标内存块。在上述实施例的基础上,所述获取设备所需要的内存使用量,包括:通过在数据平面开发套件dpdk中的rte_eal_hugepage_init()函数进行所述大页内存初始化。具体的,装置通过在数据平面开发套件dpdk中的rte_eal_hugepage_init()函数进行所述大页内存初始化。可参照上述实施例,不再赘述。通过使所述rte_eal_hugepage_init()函数调用memory_get_pkb_dma_size()函数获取所述pkb和dma内存使用量。具体的,装置通过使所述rte_eal_hugepage_init()函数调用memory_get_pkb_dma_size()函数获取所述pkb和dma内存使用量。可参照上述实施例,不再赘述。本发明实施例提供的基于申威架构的设备中内存的处理方法,通过调用相应函数,能够快速、高效地获取内存使用量。在上述实施例的基础上,所述方法还包括:获取所述设备的硬件信息。具体的,装置获取所述设备的硬件信息。可参照上述实施例,不再赘述。根据所述硬件信息的指标参数,确定所述预设内存限制地址的具体数值。具体的,装置根据所述硬件信息的指标参数,确定所述预设内存限制地址的具体数值。可参照上述实施例,不再赘述。本发明实施例提供的基于申威架构的设备中内存的处理方法,能够合理、准确地确定预设内存限制地址的具体数值。在上述实施例的基础上,所述硬件信息包括cpu信息和/或pci总线信息;相应的,与所述cpu信息对应的所述指标参数包括cpu的体系架构和/或主频;与所述pci总线信息对应的所述指标参数包括pci总线下挂的外设信息的参数。具体的,装置中的与所述cpu信息对应的所述指标参数包括cpu的体系架构和/或主频;与所述pci总线信息对应的所述指标参数包括pci总线下挂的外设信息的参数。可参照上述实施例,不再赘述。本发明实施例提供的基于申威架构的设备中内存的处理方法,通过cpu信息和/或pci总线信息,以及分别对应的具体指标参数;能够进一步合理、准确地确定预设内存限制地址的具体数值。图2为本发明实施例基于申威架构的设备中内存的处理装置结构示意图,如图2所示,本发明实施例提供了一种基于申威架构的设备中内存的处理装置,包括获取单元201、切割单元202、过滤单元203和分配单元204,其中:获取单元201用于在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;切割单元202用于在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;过滤单元203用于根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配单元204用于分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。具体的,获取单元201用于在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;切割单元202用于在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;过滤单元203用于根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配单元204用于分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。本发明实施例提供的基于申威架构的设备中内存的处理装置,通过在大页内存初始化的过程中,根据设备所需的内存使用量和预设内存限制地址,切割获取到目标内存块;在内存分配的过程中,通过pkb内存标识或dma内存标识在待分配内存中进行过滤,以获取、并分配目标内存块,能够避免基于申威架构的设备出现无法收发报文的异常状况。本发明实施例提供的基于申威架构的设备中内存的处理装置具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。图3为本发明实施例提供的电子设备实体结构示意图,如图3所示,所述基于申威架构的电子设备包括:申威处理器(processor)301、存储器(memory)302和总线303;其中,所述申威处理器301、存储器302通过总线303完成相互间的通信;所述申威处理器301用于调用所述存储器302中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:在大页内存初始化的过程中,获取设备收发报文所需要的内存使用量;所述内存使用量是数据包缓存pkb内存使用量和直接内存存取dma内存使用量之和;在每完成一次大页内存大块合并后,根据所述内存使用量和预设内存限制地址,切割所述大页内存大块,以获取所述目标内存块;根据pkb标识或dma标识在所述设备的待分配内存中进行过滤,以获取所述目标内存块;其中,所述pkb标识或所述dma标识用于标记所述pkb内存或所述dma内存;所述待分配内存中包括若干所述目标内存块;分配所述目标内存块至所述pkb内存和所述dma内存,以供所述pkb内存和所述dma内存使用。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。以上所描述的电子设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。最后应说明的是:以上各实施例仅用以说明本发明的实施例的技术方案,而非对其限制;尽管参照前述各实施例对本发明的实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明的各实施例技术方案的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1