本申请涉及计算机
技术领域:
,尤其涉及一种PCI内存空间的优化方法和设备。
背景技术:
:在网络设备中,处理器可以通过PCI(PeripheralComponentInterconnect,外围器件互联)总线协调并控制PCI器件,从而使设备正常运行。在网络设备上电启动或者有新PCI器件接入网络设备时,处理器可以读取PCI器件的PCI配置空间,并基于所述PCI配置空间确定该PCI器件所需的PCI内存空间大小。处理器可以根据所述PCI内存空间大小为该PCI器件分配系统内存空间,并将该系统内存空间写入该PCI器件的BAR(BaseAddressRegister,基地址寄存器)作为PCI内存空间,后续处理器和该PCI器件可以通过该PCI内存空间(系统内存空间)进行数据交互。对于使用32位处理器的网络设备而言,实际的系统内存空间有限,因此当PCI器件的数量较多或PCI器件所需的PCI内存空间较大时,极有可能出现系统内存空间不足的情况。技术实现要素:有鉴于此,本申请提供一种PCI内存空间的优化方法和设备,以解决相关技术中系统内存空间不足的问题。具体地,本申请是通过如下技术方案实现的:第一方面,本申请提供一种PCI内存空间的优化方法,所述方法应用于网络设备,所述网络设备包括处理器、PCI桥、PCI器件,所述方法包括:处理器进行PCI扫描,并基于扫描到的PCI器件的PCI配置空间确定所述PCI器件在理论上所需要的理论内存空间大小;处理器基于所述PCI器件实际所需的实际内存空间大小和地址对齐规则为所述PCI器件分配实际使用的实际内存空间;处理器计算所述实际内存空间大小与所述理论内存空间大小之间的差值作为所述PCI器件的第一地址偏移量;处理器基于所述第一地址偏移量、所述实际内存空间的起始地址、所述理论内存空间大小和第二地址偏移量计算所述PCI器件的理论内存空间;其中,所述第二地址偏移量为前一PCI器件的最终地址偏移量;处理器判断所述理论内存空间是否符合所述地址对齐规则;当所述理论内存空间符合所述地址对齐规则时,处理器计算所述第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将所述理论内存空间发送至所述PCI器件保存;当所述理论内存空间不符合所述地址对齐规则时,处理器基于所述地址对齐规则对所述第一地址偏移量和所述理论内存空间进行修改,计算修改后的第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将修改后的理论内存空间发送至所述PCI器件保存;其中,所述修改后的理论内存空间符合所述地址对齐规则。第二方面,本申请提供一种PCI内存空间的优化设备,其特征在于,所述设备包括:处理器、PCI桥、PCI器件;其中,所述处理器用于:进行PCI扫描,并基于扫描到的PCI器件的PCI配置空间确定所述PCI器件在理论上所需要的理论内存空间大小;基于所述PCI器件实际所需的实际内存空间大小和地址对齐规则为所述PCI器件分配实际使用的实际内存空间;计算所述实际内存空间大小与所述理论内存空间大小之间的差值作为所述PCI器件的第一地址偏移量;基于所述第一地址偏移量、所述实际内存空间的起始地址、所述理论内存空间大小和第二地址偏移量计算所述PCI器件的理论内存空间;其中,所述第二地址偏移量为前一PCI器件的最终地址偏移量;判断所述理论内存空间是否符合所述地址对齐规则;当所述理论内存空间符合所述地址对齐规则时,计算所述第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将所述理论内存空间发送至所述PCI器件保存;当所述理论内存空间不符合所述地址对齐规则时,基于所述地址对齐规则对所述第一地址偏移量和所述理论内存空间进行修改,计算修改后的第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将修改后的理论内存空间发送至所述PCI器件保存;其中,所述修改后的理论内存空间符合所述地址对齐规则。分析上述技术方案可知,处理器扫描到PCI器件时,可以基于该PCI器件与处理器进行数据交互时实际所需的实际内存空间大小,从系统内存空间中为该PCI器件分配实际内存空间,同时处理器可以将该实际内存空间修改为满足该PCI器件理论需求的理论内存空间,写入该PCI器件的BAR寄存器作为其PCI内存空间。与相关技术相比,采用本技术方案可以减少为满足地址对齐规则而浪费的系统内存空间,从而节省系统内存空间,充分利用有限的系统内存空间。附图说明图1是PCI总线结构的一种示例;图2是本申请一示例性实施例示出的一种PCI内存空间的优化方法的流程图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的设备和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。请参考图1,为PCI总线结构的一种示例。其中,PCI桥可以为FPGA芯片,上接处理器,下接PCI器件1和PCI器件2,PCI器件可以为转发芯片等业务芯片。处理器可以基于深度优先搜索算法(DepthFirstSearch,DFS)对PCI总线进行PCI扫描,即处理器首先会扫描到PCI桥,然后会扫描到PCI器件1,最后会扫描到PCI器件2。假设处理器为PCI桥分配10MB~12MB的系统内存空间以进行数据交互,后续如果处理器基于PCI器件1的PCI配置空间确定其PCI内存空间大小为8MB,则在相关技术中,根据地址对齐规则,处理器需将16MB~24MB的系统内存空间分配给PCI器件1作为其PCI内存空间;同理,如果处理器基于PCI器件2的PCI配置空间确定其PCI内存空间大小为8MB,则处理器可以将24MB~32MB的系统内存空间分配给PCI器件2作为其PCI内存空间。其中,地址对齐规则指处理器为各PCI器件分配的PCI内存空间的起始地址是其PCI内存空间大小的整数倍,否则处理器与该PCI器件之间无法正常进行数据交互。在这种情况下,由于地址对齐规则的要求,导致12MB~16MB的系统内存空间空闲且无法被使用,造成有限系统内存空间的浪费。请参考图2,为本申请一示例性实施例示出的一种PCI内存空间的优化方法的流程图,所述方法可以应用于网络设备,所述网络设备提供若干PCI插槽作为PCI器件的接入口,所述方法包括以下步骤:步骤201:处理器进行PCI扫描,并基于扫描到的PCI器件的PCI配置空间确定所述PCI器件在理论上所需要的理论内存空间大小。在本实施例中,与相关技术相似,处理器可以对PCI总线进行PCI扫描。当扫描到某PCI器件时,处理器可以读取该PCI器件的PCI配置空间,并基于所述PCI配置空间确定该PCI器件的PCI内存空间大小,即该PCI器件在理论上所需要的理论内存空间大小。其中,PCI配置空间实际上为PCI器件的内部寄存器,保存有PCI器件的名称、生产厂商、设备类型、版本等信息,以及PCI器件需要的I/O、中断、MEMORY等资源的数量,还可以保存系统为这些资源分配的基地址。步骤202:处理器基于所述PCI器件实际所需的实际内存空间大小和地址对齐规则为所述PCI器件分配实际使用的实际内存空间。在实际运行的过程中,PCI器件与处理器进行数据交互所需要的实际内存空间大小通常远小于其PCI内存空间大小,如果处理器基于其PCI内存空间大小为该PCI器件分配系统内存空间,则进一步浪费了有限的系统内存空间。在本实施例中,技术人员可以预先根据所述PCI器件的实际需求为其设置实际内存空间大小,进而处理器可以基于该实际内存空间大小,以及地址对齐规则为该PCI器件分配系统内存空间,即处理器与该PCI器件进行数据交互时实际使用的实际内存空间。继续以图1所示的PCI总线结构为例,假设PCI器件1与处理器进行数据交互所需要的实际内存空间大小为1MB,则技术人员可以预先将PCI器件1的实际内存空间大小设置为1MB。处理器根据该实际内存空间大小和地址对齐规则,可以将12MB~13MB的系统内存空间分配给PCI器件1,即处理器与PCI器件1进行数据交互时实际使用的实际内存空间为12MB~13MB。步骤203:处理器计算所述实际内存空间大小与所述理论内存空间大小之间的差值作为所述PCI器件的第一地址偏移量。在本实施例中,处理器在确定所述PCI器件的理论内存空间大小和实际内存空间大小之后,可以计算所述实际内存空间大小与所述理论内存空间大小之间的差值,作为该PCI器件的第一地址偏移量。举例来说,对于PCI器件1而言,其理论内存空间大小即为处理器基于其PCI配置空间确定的其PCI内存空间大小,为8MB;其实际内存空间大小为技术人员预先设置的1MB。因此,处理器可以将8MB-1MB=7MB作为PCI器件1的第一地址偏移量。步骤204:处理器基于所述第一地址偏移量、所述实际内存空间的起始地址、所述理论内存空间大小和第二地址偏移量计算所述PCI器件的理论内存空间;其中,所述第二地址偏移量为前一PCI器件的最终地址偏移量。在本实施例中,处理器可以基于所述PCI器件的第一地址偏移量、为该PCI器件分配的实际内存空间的起始地址、该PCI器件的理论内存空间大小和该PCI器件的第二地址偏移量,计算该PCI器件的理论内存空间。举例来说,处理器确定的PCI器件1的第一地址偏移量为7MB,为PCI器件1分配的实际内存空间的起始地址为12MB,PCI器件1的理论内存空间大小为8MB。假设PCI器件1是处理器扫描到的第一个PCI器件,则PCI器件1的第二地址偏移量为0。因此,处理器可以计算得到PCI器件1的理论内存空间的起始地址为12MB+7MB=19MB,其理论内存空间的结束地址为19MB+8MB=27MB,即计算得到的PCI器件1的理论内存空间为19MB~27MB。步骤205:处理器判断所述理论内存空间是否符合所述地址对齐规则。在本实施例中,处理器在计算得到所述PCI器件的理论内存空间后,可以先判断所述理论内存空间是否符合所述地址对齐规则。如果所述理论内存空间符合所述地址对齐规则,则可以执行步骤206;如果所述理论内存空间不符合所述地址对齐规则,则可以执行步骤207。步骤206:当所述理论内存空间符合所述地址对齐规则时,处理器计算所述第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将所述理论内存空间发送至所述PCI器件保存。在本实施例中,基于前述步骤205的判断结果,如果所述理论内存空间符合所述地址对齐规则,则处理器可以将所述第一地址偏移量与所述第二地址偏移量之和作为PCI器件的最终地址偏移量发送至所述PCI器件的PCI桥保存,并将所述PCI器件的实际内存空间发送至所述PCI桥保存。同时,处理器可以将所述理论内存空间发送至所述PCI器件,所述PCI器件可以将该理论内存空间作为PCI内存空间保存至BAR寄存器。步骤207:当所述理论内存空间不符合所述地址对齐规则时,处理器基于所述地址对齐规则对所述第一地址偏移量和所述理论内存空间进行修改,计算修改后的第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将修改后的理论内存空间发送至所述PCI器件保存;其中,所述修改后的理论内存空间符合所述地址对齐规则。在本实施例中,基于前述步骤205的判断结果,如果所述理论内存空间不符合所述地址对齐规则,则处理器可以基于所述地址对齐规则对所述第一地址偏移量和所述理论内存空间进行修改,从而使修改后的理论内存空间符合所述地址对齐规则。后续处理器可以将修改后的第一地址偏移量与所述第二地址偏移量之和作为PCI器件的最终地址偏移量发送至所述PCI器件的PCI桥保存,并将所述PCI器件的实际内存空间发送至所述PCI桥保存。同时,处理器可以将修改后的理论内存空间发送至所述PCI器件作为PCI内存空间,所述PCI器件可以将该理论内存空间作为PCI内存空间保存至BAR寄存器。举例来说,处理器计算得到的PCI器件1的理论内存空间为19MB~27MB,而PCI器件1的理论内存空间大小为8MB,因此该理论内存空间不符合地址对齐规则。处理器可以将该理论内存空间的起始地址修改为8MB×3=24MB以符合地址对齐规则,并将PCI器件1的理论内存空间修改为24MB~32MB,进而处理器可以将24MB-19MB+7MB=12MB作为PCI器件1的最终地址偏移量发送至PCI桥保存,并将PCI器件1的实际内存空间12MB~13MB发送至PCI桥保存。同时,处理器可以将24MB~32MB作为PCI内存空间发送至PCI器件1保存在BAR寄存器中。在图1所示的PCI总线结构中,处理器在为PCI器件1分配PCI内存空间后,可以扫描到PCI器件2,并为PCI器件2分配PCI内存空间。假设处理器基于PCI器件2的PCI配置空间确定其PCI内存空间大小为8MB,即PCI器件2的理论内存空间大小为8MB,而技术人员为PCI器件2设置的实际内存空间大小为2MB,则与为PCI器件1分配PCI内存空间类似,处理器根据该实际内存空间大小和地址对齐规则,可以将14MB~16MB的系统内存空间分配给PCI器件2,即处理器与PCI器件2进行数据交互时实际使用的实际内存空间为14MB~16MB。后续处理器可以确定PCI器件2的第一地址偏移量为8MB-2MB=6MB,PCI器件2的第二地址偏移量为PCI器件1的最终地址偏移量12MB,则处理器可以计算得到PCI器件2的理论内存空间的起始地址为14MB+6MB+12MB=32MB,其理论内存空间的结束地址为32MB+8MB=40MB,即计算得到的PCI器件2的理论内存空间为32MB~40MB,符合地址对齐规则。因此,处理器可以将6MB+12MB=18MB作为PCI器件2的最终地址偏移量发送至PCI桥保存,并将PCI器件2的实际内存空间14MB~16MB发送至PCI桥保存。同时,处理器可以将32MB~40MB作为PCI内存空间发送至PCI器件2保存在BAR寄存器中。在一个可选的实施例中,处理器在基于扫描到的PCI器件的PCI配置空间确定所述PCI器件在理论上所需要的理论内存空间大小后,可以先判断该理论内存空间大小是否大于技术人员预先设置的阈值。如果所述理论内存空间大小大于所述阈值,则处理器可以基于所述PCI器件实际所需的实际内存空间大小和地址对齐规则为所述PCI器件分配实际内存空间,从而达到节省系统内存空间的目的。而当所述理论内存空间大小小于或等于所述阈值时,即使存在系统内存空间浪费的问题,所浪费的系统内存空间也较少,因此处理器可以基于所述理论内存空间大小和所述地址对齐规则为所述PCI器件分配实际内存空间。此时相当于该PCI器件对应的实际内存空间大小与其理论内存空闲大小相等,因此处理器可以将0作为所述PCI器件对应的第一地址偏移量。当处理器完成PCI扫描,为扫描的各PCI器件分配PCI内存空间后,处理器与PCI器件之间可以进行数据交互。PCI桥在接收到处理器发送的PCI器件访问请求时,可以根据该访问请求中的第一访问地址,以及保存的各PCI器件的实际内存空间,确定该访问请求所对应的PCI器件,并基于保存的该PCI器件的最终地址偏移量,对该访问请求中的第一访问地址进行修改,后续PCI桥可以将修改后的访问请求发送至所述PCI器件。其中,所述访问请求通常包括读请求和写请求。PCI桥在接收到PCI器件发送的内存访问请求时,则可以基于保存的所述PCI器件的最终地址偏移量,对所述内存访问请求中的第二访问地址进行逆修改,后续PCI桥可以将逆修改后的内存访问请求发送至处理器。如下表1所示,为图1所示的PCI器件1和PCI器件2分别对应的实际内存空间、最终地址偏移量、理论内存空间:PCI器件实际内存空间最终地址偏移量理论内存空间PCI器件112MB~13MB12MB24MB~32MBPCI器件214MB~16MB18MB32MB~40MB表1简单来说,处理器认为其与PCI器件1进行数据交互所利用的内存空间为12MB~13MB,而PCI器件1认为处理器与其进行数据交互所利用的内存空间为24MB~32MB(实际上只会使用大小为1MB的内存空间);同理,处理器认为其与PCI器件2进行数据交互所利用的内存空间为14MB~16MB,而PCI器件2认为处理器与其进行数据交互所利用的内存空间为32MB~40MB(实际上只会使用大小为2MB的内存空间)。举例来说,当PCI桥接收到处理器发送的第一访问地址为15MB的写请求时,可以确定该写请求对应的PCI器件为PCI器件2,并基于PCI器件2的最终地址偏移量18MB将该写请求中的第一访问地址修改为15MB+18MB=33MB,后续PCI桥可以将第一访问地址为33MB的写请求发送至PCI器件2,从而使PCI器件2将理论内存空间的33MB处(实际内存空间的15MB处)的数据写入其内部寄存器中。而当PCI桥接收到PCI器件2发送的第二访问地址为33MB的内存访问请求时,则可以基于PCI器件2的最终地址偏移量18MB将该内存访问请求中的第二访问地址修改为33MB-18MB=15MB,后续PCI桥可以将第二访问地址为15MB的内存访问请求发送至处理器,从而使处理器可以将PCI器件2内部寄存器中的对应数据保存至系统内存空间的15MB处。结合表1,采用本申请技术方案为满足地址对齐规则而浪费的系统内存空间仅为14MB-13MB=1MB,而相关技术中所浪费的系统内存空间为16MB-12MB=4MB。此外,采用本申请技术方案实际为PCI器件1分配的系统内存空间为12MB~13MB,而相关技术中实际为PCI器件1分配的系统内存空间大小为16MB~24MB。综合来看,采用本申请技术方案可以有效减少为满足地址对齐规则而浪费的系统内存空间,以及实际为各PCI器件分配的系统内存空间。由上述实施例可见,处理器扫描到PCI器件时,可以基于该PCI器件与处理器进行数据交互时实际所需的实际内存空间大小,从系统内存空间中为该PCI器件分配实际内存空间,同时处理器可以将该实际内存空间修改为满足该PCI器件理论需求的理论内存空间,写入该PCI器件的BAR寄存器作为其PCI内存空间。与相关技术相比,采用本申请技术方案可以减少为满足地址对齐规则而浪费的系统内存空间,从而节省系统内存空间,充分利用有限的系统内存空间。与前述PCI内存空间的优化方法的实施例相对应,本申请还提供了PCI内存空间的优化设备的实施例。请继续参考图1,本申请PCI内存空间的优化设备可以包括:处理器301、PCI桥302、PCI器件303;其中,所述处理器301可以用于:进行PCI扫描,并基于扫描到的PCI器件的PCI配置空间确定所述PCI器件在理论上所需要的理论内存空间大小;基于所述PCI器件实际所需的实际内存空间大小和地址对齐规则为所述PCI器件分配实际使用的实际内存空间;计算所述实际内存空间大小与所述理论内存空间大小之间的差值作为所述PCI器件的第一地址偏移量;基于所述第一地址偏移量、所述实际内存空间的起始地址、所述理论内存空间大小和第二地址偏移量计算所述PCI器件的理论内存空间;其中,所述第二地址偏移量为前一PCI器件的最终地址偏移量;判断所述理论内存空间是否符合所述地址对齐规则;当所述理论内存空间符合所述地址对齐规则时,计算所述第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将所述理论内存空间发送至所述PCI器件保存;当所述理论内存空间不符合所述地址对齐规则时,基于所述地址对齐规则对所述第一地址偏移量和所述理论内存空间进行修改,计算修改后的第一地址偏移量与所述第二地址偏移量之和作为所述PCI器件的最终地址偏移量,将所述最终地址偏移量以及所述实际内存空间发送至所述PCI器件的PCI桥保存,并将修改后的理论内存空间发送至所述PCI器件保存;其中,所述修改后的理论内存空间符合所述地址对齐规则。在一个可选的实施例中,所述处理器301还可以用于:判断所述PCI器件在理论上所需要的理论内存空间大小是否大于预设阈值;当所述理论内存空间大小大于所述阈值时,基于所述PCI器件实际所需的实际内存空间大小和地址对齐规则为所述PCI器件分配实际内存空间;当所述理论内存空间大小小于等于所述阈值时,基于所述理论内存空间大小和所述地址对齐规则为所述PCI器件分配实际内存空间,并将0作为所述PCI器件对应的第一地址偏移量。在另一个可选的实施例中,所述PCI桥302还可以用于:在接收到处理器发送的PCI器件访问请求时,根据所述PCI器件访问请求中的第一访问地址和PCI器件的实际内存空间确定所述访问请求对应的PCI器件,并基于保存的所述PCI器件的最终地址偏移量,对所述第一访问地址进行修改;将修改后的PCI器件访问请求发送至所述PCI器件。在另一个可选的实施例中,所述PCI桥302还可以用于:在接收到PCI器件发送的内存访问请求时,基于保存的所述PCI器件的最终地址偏移量,对所述内存访问请求中的第二访问地址进行逆修改;将逆修改后的内存访问请求发送至处理器。上述设备中处理器、PCI桥、PCI器件的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页1 2 3