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

一种PCIe设备及其全局中断资源动态调配方法和系统

文献发布时间:2024-04-18 20:01:23


一种PCIe设备及其全局中断资源动态调配方法和系统

技术领域

本发明属于网络存储技术领域,具体涉及一种PCIe设备及其全局中断资源动态调配方法和系统。

背景技术

在PCIe总线中,MSI和MSI-X中断机制使用存储器写请求向处理器提交中断请求。MSI和MSI-X机制的基本原理相同,其中MSI终端机制最多能够支持32个中断请求且要求中断向量必须连续,而MSI-X中断机制可以支持更多的中断请求且并不要求中断向量连续(即可以随意分配)。与MSI机制相比,MSI-X中断使用更为广泛。

在MSI-X Capability结构中,每一个中断请求都使用独立的Message Address字段和Message Data字段,因此中断控制器可以更加合理地为该设备分配中断资源。MSI-XCapability使用一个数组存放Message Address字段和Message Data字段,这个数组被称为MSI-X Table(简称为MSIXT),存放在PCIe设备的BAR空间中。MSI-X Table由多个Entry组成(每个Function最多支持2048个Entry),每个Entry与一个中断请求对应。PCIe设备提交中断请求,即是向MSI-X Table中的Message Address写Message Data组成一个存储器写请求。

当PCIe Function数较多且每个Function均按协议规定最大中断向量数设计,PCIe设备将消耗大量存储资源用于存放中断向量表,而实际应用中每个Function可能使用到的中断向量数是有限的且和业务密切相关的,从而造成设备存储资源的浪费。

发明内容

为了解决现有PCIe设备中断资源分配技术会造成设备存储资源的浪费的问题,本发明提供了一种PCIe设备及其全局中断资源动态调配方法和系统,本发明采用链表管理全局中断资源,并针对每个Function维护一个实际使用的中断资源链表,从而实现全局中断资源动态调配。

本发明通过下述技术方案实现:

一种PCIe设备及其全局中断资源动态调配方法和系统,所述动态调配方法包括:

为PCIe设备构建1个自由链表,所述自由链表用于管理所述PCIe设备为其Funcion预留的全局中断向量;

为所述PCIe设备支持的N个Function分别构建1个功能链表,所述功能链表用于管理其对应的Function实际使用的中断向量;

对所述自由链表和N个所述功能链表进行初始化并根据Function工作状态及中断资源实际使用需要进行中断向量动态调配。

目前PCIe设备通常采用固定分配中断资源的方式,而实际应用中Function可能并不需要用到预留的所有中断向量,甚至有些时候某些Function都处于非使用状态,从而造成大量的存储资源浪费。而本发明提出的动态调配方法采用链表管理全局中断资源,并针对每个Function维护一个实际使用的中断资源链表,即根据Function实际使用需要分配相应的中断资源向量,这样不会造成资源浪费,提高了资源利用效率。

作为优选实施方式,本发明的动态调配方法还包括:

初始化时,将所述PCIe设备为其Function预留的全局中断向量全部挂到所述自由链表上,N个所述功能链表为空。

作为优选实施方式,本发明的动态调配方法还包括:

当所述PCIe设备中某一Function需要使用中断资源时,则为所述Function对应的功能链表分配所需中断向量,同时针对所述Function每初始化一个中断向量,即将所述自由链表上的一个中断向量摘取下来并挂到所述Function对应的功能链表上,并将信息填入对应MSI-X Table Entry的相应字段。

作为优选实施方式,本发明的动态调配方法还包括:

当所述PCIe设备中某一Function需要迁移时,将所述Function对应的功能链表上已有的所有中断向量摘取下来并挂到迁移目标对应的功能链表上。

作为优选实施方式,本发明的动态调配方法还包括:

当所述PCIe设备中某一Function需要增加中断资源时,从所述自由链表上摘取一个中断向量并挂到所述Function对应的功能链表链尾。

作为优选实施方式,本发明的动态调配方法还包括:

当所述PCIe设备中某一Function需要回收时,将所述Function对应的功能链表上已有的所有中断向量摘取下来并挂到所述自由链表链尾。

作为优选实施方式,本发明的动态调配方法还包括:

所述PCIe设备中非工作状态下的Function不占用中断资源。

本发明在资源调配过程中,仅需要修改链头或链尾即可实现Function中断资源的实时新增、迁移或回收,操作简单便捷,能够实现虚拟机迁移回收时快速更新中断资源。且在非工作状态下的Function不会占用中断资源,从而最大限度利用有限的全局中断资源。

第二方面,本发明提出了一种PCIe设备全局中断资源动态调配系统,所述动态调配系统包括:

链表构建单元,所述链表构建单元为PCIe设备构建1个自由链表,所述自由链表用于管理所述PCIe设备为其Function预留的全局中断向量;所述链表构建单元还为所述PCIe设备支持的N个Funciton分别构建1个功能链表,所述功能链表用于管理其对应的Function实际使用的中断向量;

资源控制单元,所述资源控制单元用于对所述自由链表和N个所述功能链表进行初始化并根据Function工作状态及中断资源实际使用需要进行中断向量动态调配。

第三方面,本发明提出了一种PCIe设备,所述PCIe设备采用本发明所述的动态调配方法为其上Funciton动态分配中断资源。

第四方面,本发明提出了基于本发明所述PCIe设备的中断请求方法,所述中断请求方法包括:

首先,找到Funciton对应的功能链表链头;

之后,根据Funciton全局中断向量号找到对应的功能链表相应节点,采用该节点标记的MSI-X Table ID即可寻址得到所需的MSI-X Table;

然后,从MSI-X Table中获得Message Address信息;

最后,向Message Address写Message Data构造中断写包。

本发明与现有技术相比,具有如下的优点和有益效果:

1、本发明提出的PCIe设备中断资源调配技术,根据PCIe设备中每个Function实际使用的中断资源为其分配相应的中断资源向量,即不限制PCIe设备中每个Function最大可用中断资源,只要保证所有Funciton实际使用的中断资源数综合不超过全局资源即可,使得无需按照Function可能使用的中断资源数来预留中断资源,降低了PCIe设备内存资源的占用;同时可针对中断数量需求大的应用多分配一些中断资源,中断数量需求小的应用少分配一些中断资源,避免造成资源的浪费,有效提高了资源利用效率;

2、本发明提出的PCIe设备中断资源调配技术,在中断资源调配过程中,仅需要修改链表链头或链尾即可实现中断资源的实时新增、迁移或回收,操作简单便捷,能够实现虚拟机迁移回收时快速更新中断资源;且非工作状态下的Function不会占用中断资源,从而最大限度利用有限的全局中断资源。

附图说明

此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:

图1为现有PCIe设备采用的固定分配中断向量资源结果示意图。

图2为本发明实施例的动态调配方法流程示意图。

图3为本发明实施例的动态调配系统原理框图。

图4为本发明实施例的构建并初始化链表结果示意图。

图5为本发明实施例的动态分配中断向量资源结果示意图。

图6为本发明实施例的中断向量资源迁移、回收、新增操作示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。

实施例1:

目前,PCIe设备通常针对每个Function分配固定的中断向量资源,用于存放映射在BAR空间中的MSIXT,如图1所示,设某个PCIe设备支持1024个Function并编号,为编号为偶数的Function预留4个中断向量资源,为编号为奇数的Function预留8个中断向量资源,则全局一共需要预留6144个中断向量。若为每个Function预留的中断资源存储空间较大,当Function数较大时将消耗PCIe设备中大量的存储资源,而实际应用中Function可能并不需要用到预留的所有中断向量,甚至有些时候某些Function都处于非使用状态,这就会造成大量的存储资源浪费;若为每个Function预留的中断资源存储空间较小,可能又不能满足某些业务场景;此外,这种固定式分配方式,在进行虚拟机迁移时,受到诸多限制,操作复杂,造成迁移回收更新效率低下。例如,图1中所示偶数Function不能使用超过4个中断向量,若迁移到奇数位置,则会浪费4个中断向量,而奇数Function不能使用超过8个中断向量,只能迁移到奇数位置,否则中断向量不够用。针对此,本实施例提出了一种PCIe设备全局中断资源动态调配方法,本实施例提出的动态调配结构采用链表管理全局中断资源,针对每个Function维护一个实际使用的中断资源链表,从而实现全局中断资源动态调配。需要说明的是,Function是指PCIe设备内部相对独立的功能逻辑,每个Function具有完全独立的配置空间。

具体如图2所示,本实施例提出的动态调配方法包括:

为PCIe设备构建1个自由链表(FreeList),该自由链表用于管理该PCIe设备为其Function预留的全局中断向量(即预留的所有中断向量);

为PCIe设备支持的N个Function分别构建1个功能链表(Function List),该功能链表用于管理其对应Function实际使用的中断向量;

对自由链表和功能链表进行初始化并根据Function工作状态及中断资源实际使用需要进行中断向量动态调配。

进一步的,本实施例提出的动态调配方法还包括:

初始化时,将PCIe设备为其Function预留的全局中断向量全部挂到自由链表上,N个功能链表为空;

当Function需要使用中断资源时,则为该Function对应的功能链表分配所需中断向量,同时针对该Function每初始化一个中断向量,即将自由链表上的一个中断向量摘取下来挂到该Function对应的功能链表上,并将信息填入对应MSI-X Table Entry的相应字段。

进一步的,本实施例提出的动态调配方法还包括:

当Function需要迁移时,仅需要将该Function对应的功能链表上所有中断向量摘下并直接挂到迁移目标对应的功能链表上即可。

进一步的,本实施例提出的动态调配方法还包括:

当Function需要新增中断资源时,则从自由链表摘取一个中断向量并挂到该Function对应的功能链表链尾。

进一步的,本实施例提出的动态调配方法还包括:

当Function需要回收时,仅需要将该Function对应的功能链表上所有中断向量摘下并直接挂到自由链表链尾即可。回收的中断资源可分配给其他任意Function。

本实施例提出的方法不限制PCIe设备中每个Function最大可用中断资源,只要保证所有Function实际使用的中断资源数综合不超过全局资源即可,则无需按照Function可能使用的中断资源来预留全局中断资源,降低了PCIe设备内存资源的占用,同时针对中断数量需求大的应用可多分配一些中断资源,相对的,针对中断数量需求小的应用则可少分配一些中断资源,从而实现全局中断资源动态调配,这样不会造成资源的浪费,有效提高了资源利用效率。

此外,本实施例提出的方法在资源调配过程中,仅需要修改链头或链尾即可实现中断资源的实时新增、迁移或回收,操作简单便捷,能够实现虚拟机迁移回收时快速更新中断资源。且非工作状态下的Function不会占用中断资源,从而最大限度利用有限的全局中断资源。

基于上述相同的技术构思,本实施例还提出了一种PCIe设备全局中断资源动态调配系统,具体如图3所示,该系统包括:

链表构建单元,该链表构建单元为PCIe设备构建1个自由链表,该自由链表用于管理该PCIe设备为其Function预留的全局中断向量(即预留的所有中断向量);该链表构建单元还为该PCIe设备支持的N个Function分别构建1个功能链表,该功能链表用于管理其对应Function实际使用的中断向量。

资源控制单元,该资源控制单元用于对自由链表和功能链表进行初始化并根据Function工作状态及中断资源实际使用需要进行中断向量动态调配。

本实施例还提出了一种PCIe设备,该PCIe设备采用上述方法为其上Function动态分配中断资源。

该PCIe设备发送MSI-X中断请求时,首先找到对应的功能链表链头,然后根据Funicon全局中断向量号找到对应的功能链表相应节点,采用该节点标记的MSI-X TableID即可寻址得到所需的MSI-X Table,进而获得其中的Message Address信息;向MessageAddress写Message Data构造中断写包。需要说明的是,全局中断向量号是预留的全局中断向量资源被编号,通常从0开始按序编号,例如图1中所示,全局6144个中断向量,则全局中断向量号为0-6143。而功能链表按局部中断向量初始化中断向量表,例如功能链表1(Function1 List)初始化局部中断向量4,因Function1的起始全局中断向量号为4,则该局部中断向量4对应全局中断向量号则为4+4=8,则链表上过的是全局中断向量号8,发送中断时,只需要从功能链表1的链表头找到第4个节点(值为8)即可从全局中断向量表8的位置取出发送中断所需信息。

实施例2:

本实施例以某一PCIe设备为例,对上述实施例提出的中断资源动态分配方法和系统进行详细说明。具体如下。

该PCIe设备支持1024个Function,全局预留4096个中断向量。初始时全局4096个全局中断向量全部挂在FreeList上,如图4所示。

针对该PCIe设备某个Function每初始化一个中断向量,即将FreeList上的一个中断向量ID摘取下来挂到对应FunctionList上,并将Message Address等信息填入对应MSI-XTable Entry的对应字段。初始化完成后示意图如图5所示。当该PCIe设备需要发送MSI-X中断时,先要找到对应FunctionList链表头,再根据Function局部中断向量号M找到对应链表第M个节点,使用第M个节点标记的MSIXT ID即可寻址得到所需的MSI-X Table,进而获得Message Address等信息构造中断写包。

以图5初始化的链表为例进行新增、迁移、回收等操作,具体如图6所示。

当PCIe设备中FunctionN需要增加1个中断向量,即为FunctionN新初始化1个中断向量,首先从FreeList摘取一个节点挂到FunctionN List链尾;然后将Message Address等信息填入对应MSI-X Table Entry的对应字段,如图6中绿色箭头所示。

当PCIe设备中Function1需要回收时,仅需将整个Function1 List链表(即链表上全部节点)摘下并直接挂到FreeList链尾即可。回收的中断资源可分配给其他任意Function。该操作仅需要修改FreeList链尾,即将Function1 List链头挂到FreeList链尾,如图6中红色箭头所示。

当需要将Function0迁移至FunctionX时,仅需要将整个Function0 List链表摘下并直接挂到FunctionX List上生成FunctionX List即可。该操作仅需要修改FunctionXList链头,即填入原Function0 List链头,如图6中蓝色箭头所示。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术分类

06120116551953