一种队列调度方法及计算系统的制作方法

文档序号:7810559阅读:134来源:国知局
一种队列调度方法及计算系统的制作方法
【专利摘要】本申请提供一种队列调度方法及计算系统。该方法应用于基于SR-IOV的计算系统,计算系统包括通用处理器以及专用硬件芯片。通用处理器用于运行一个或多个虚拟机。专用硬件芯片用于基于SR-IOV协议实现PF以及一个或多个VF。每个虚拟机与至少一个VF对应。专用硬件芯片包括第一队列空闲链表,第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队列,第一队列为位于专用硬件芯片中的队列。该方法包括:从第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致;获取虚拟机中的第二队列中的数据,将第二队列中的数据存放到第一队列中进行处理。
【专利说明】一种队列调度方法及计算系统

【技术领域】
[0001] 本申请涉及通信【技术领域】,尤其涉及一种队列调度方法及计算系统。

【背景技术】
[0002] 请参考图1所示,为一种基于支持单根输入输出虚拟化(Single Root 10 Virtrualiztion,SR-I0V)技术的计算系统结构图。如图1所示,该系统包括:通用处理 器,例如:中央处理器(Central Processing Unit, CPU),例如为X86结构的CPU,用于运 行通用的操作系统、虚拟机软件等。该系统还包括专用硬件芯片,例如:专用集成电路(英 文:Application Specific Integrated Circuit;简称:ASIC)、现场可编程门阵列(英 文:Field Programmable Gate Array;简称:FPGA)、复杂可编程逻辑器件(英文:Complex Programmable Logic Device ;简称:CPLD)等。专用硬件芯片与通用处理器通过接口连接, 例如:通过快速周边兀件扩展接口(Peripheral Component Interconnect Express,PCIe) 连接。通用处理器上运行有m个虚拟机(Virtual Manufacturing,VM),m为正整数,如图1 中所示的VM0、VM1··· VMm。每个VM都对应一个或多个虚拟功能(Virtual Function,VF), 在图1中,每个VM对应一个VF,如VF0至VFm,虚拟机通过驱动来访问对应的VF。
[0003] 专用硬件芯片包括N个队列,N为大于等于m的正整数。N个队列与m个VF之间 具有一种动态的配置关系,这种配置关系满足SR-I0V下不同VF具有不同的带宽、不同的业 务和不同优先级的需求。
[0004] 请再参考图1所示,在现有技术中,采用等分法分配队列,即N个队列被平均分配 到每个VF的每个优先级,所以N的取值为VF的数量m乘以优先级的数量再乘以每个优先 级下的队列数目。假设队列的总数量N为1024,VF的数量为64,每个VF包含4个优先级, 那么采用等分法,每个优先级会分配到4个队列,如图2所示,其中,PRI表示优先级。
[0005] 请再参考图3所示,为队列到VF和优先级PRI配置表。配置随机存取存储器 (Random Access Memory ;RAM)的地址为队列号0?1023,数据为VF号和优先级PRI。每 一个队列属于哪个优先级,属于哪个VF都有设定,例如VF的个数为64,优先级有4个,则 每个VF的每个优先级有4个队列,配置时每4个配置单位数据都是相同的,例如地址0? 3的数据都是{0,0};地址1020?1023的数据都是{63, 3}。
[0006] 因此,在等分法的队列配置方式中,必须为每个VF和PRI的组合分配平均的队列 数。进一步,因为要平均分配,所以当VF有变化时,就必须重新为所有VF分配队列。


【发明内容】

[0007] 本申请提供一种队列调度方法及计算系统,用以解决现有技术中的等分法的配置 队列方式不够灵活的技术问题。
[0008] 本申请第一方面提供了一种队列调度方法,应用于基于单根输入输出虚拟化 SR-I0V的计算系统,所述计算系统包括通用处理器以及专用硬件芯片,所述通用处理器用 于运行一个或多个虚拟机,所述专用硬件芯片用于基于SR-I0V协议实现物理功能PF以及 一个或多个虚拟功能VF,每个所述虚拟机与一个或多个VF对应,所述专用硬件芯片包括 第一队列空闲链表,所述第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队 列,其中,所述第一队列为位于所述专用硬件芯片中的队列;所述方法由所述专用硬件芯片 内的一个或多个功能模块执行,包括:
[0009] 从所述第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一 个或多个VF,其中,分配给每个VF的所述第一队列的数量与每个VF对应的虚拟机中的程序 需要用到的第二队列的数量一致;
[0010] 获取所述虚拟机中的所述第二队列中的数据,将所述第二队列中的数据存放到所 述第一队列中进行处理。
[0011] 结合第一方面,在第一方面的第一种可能的实现方式中,当分配给所述每个VF的 第一队列的数量为多个时,所述每个VF的多个第一队列按链表结构进行连接。
[0012] 结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的 实现方式中,分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化而进 行同样的变化。
[0013] 结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的 实现方式,在第一方面的第三种可能的实现方式中,单个VF支持一个或多个优先级PRI,所 述处理为调度处理,所述调度处理包括:
[0014] 获得需要调度的第一 VF和第一 PRI的组合;
[0015] 在表Y中确定出与所述第一 VF和所述第一 PRI的组合对应的队列链的首队列在 表X中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包 括每个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所 述第二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的 组合对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF 支持的最大PRI个数的值;
[0016] 获取上次调度的终止队列的队列序号;所述队列序号表征所述终止队列在所述第 一 VF和所述第一 PRI的组合对应的队列中的排序;
[0017] 根据所述第一地址和所述队列序号在所述表X中确定出针对所述第一 VF和所述 第一 PRI的组合的本次调度的起始队列。
[0018] 结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式 中,根据所述第一地址和所述队列序号在所述表X中确定出针对所述第一 VF和所述第一 PRI的组合的本次调度的起始队列,包括:将所述第一地址和所述队列序号相加,获得第二 地址;当所述第二地址小于所述第一 VF和所述第一 PRI的组合的下一 VF和PRI的组合的 队列的首地址时,在所述表X中确定出所述第二地址对应的队列号,所述队列号对应的队 列即为所述起始队列。
[0019] 结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式 中,所述方法还包括:当所述第二地址等于所述下一 VF和PRI的组合的队列的首地址时, 在所述表X中确定出所述第一地址对应的队列号,所述队列号对应的队列即为所述起始队 列。
[0020] 结合第一方面的第三种可能的实现方式至第一方面的第五种可能的实现方式中 的任意一种,在第一方面的第六种可能的实现方式中,所述方法还包括:确定所述起始队列 中是否有数据;当所述起始队列中有数据时,生成第一调度结果以及保存所述起始队列的 队列序号,所述第一调度结果包括所述第一 VF、所述第一 PRI以及所述起始队列的队列号。
[0021] 结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式 中,所述方法还包括:当所述起始队列中没有数据时,通过查询所述起始队列的数据结构 表,确定所述下一队列;其中,所述数据结构表包括用于指示所述起始队列是否有数据的指 示信息、数据的数量信息以及所述起始队列的下一队列的队列号;确定所述下一队列中是 否有数据;当所述下一队列中有数据时,生成第二调度结果,所述第二调度结果包括所述第 一 VF、所述第一 PRI以及所述下一队列的队列号;保存所述下一队列的队列序号。
[0022] 结合第一方面或第一方面的第一种可能的实现方式至第一方面的第七种可能的 实现方式中的任意一种,在第一方面的第八种可能的实现方式中,在分配一个或多个第一 队列分别给一个或多个VF之后,所述方法还包括:从所述每个VF的一个或多个第一队列中 删除队列;将删除的队列加入所述第一队列空闲链表中。
[0023] 结合第一方面或第一方面的第一种可能的实现方式至第一方面的第八种可能的 实现方式中的任意一种,在第一方面的第九种可能的实现方式中,所述方法还包括:
[0024] 接收一外部数据;
[0025] 确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储 所述外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序;
[0026] 在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第 一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和 每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包 括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队 列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI 个数的值;
[0027] 根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表 X中的第二地址;
[0028] 根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的队列号;
[0029] 将所述外部数据存储在所述队列号对应的队列中。
[0030] 本申请第二方面提供一种基于单根输入输出虚拟化SR-I0V的计算系统,包括通 用处理器以及专用硬件芯片,所述通用处理器用于运行一个或多个虚拟机,所述专用硬件 芯片用于基于SR-I0V协议实现物理功能PF以及一个或多个虚拟功能VF,每个所述虚拟机 与一个或多个VF对应,
[0031] 所述专用硬件芯片包括第一队列空闲链表,所述第一队列空闲链表包括多个按链 表结构进行连接的空闲的第一队列,其中,所述第一队列为位于所述专用硬件芯片中的队 列;
[0032] 所述专用硬件芯片还用于从所述第一队列空闲链表中分配一个或多个第一队列 分别给与虚拟机对应的一个或多个VF,其中,分配给每个VF的所述第一队列的数量与每个 VF对应的虚拟机中的程序需要用到的第二队列的数量一致;以及还用于获取所述虚拟机 中的所述第二队列中的数据,将所述第二队列中的数据存放到所述第一队列中进行处理。
[0033] 结合第二方面,在第二方面的第一种可能的实现方式中,当分配给所述每个VF的 第一队列的数量为多个时,所述每个VF的多个第一队列按链表结构进行连接。
[0034] 结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的 实现方式中,分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化而进 行同样的变化。
[0035] 结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的 实现方式,在第二方面的第三种可能的实现方式中,单个VF支持一个或多个优先级PRI,所 述处理为调度处理,所述专用硬件芯片具体用于:
[0036] 获得需要调度的第一 VF和第一 PRI的组合;
[0037] 在表Y中确定出与所述第一 VF和所述第一 PRI的组合对应的队列链的首队列在 表X中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包 括每个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所 述第二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的 组合对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF 支持的最大PRI个数的值;
[0038] 获取上次调度的终止队列的队列序号;所述队列序号表征所述终止队列在所述第 一 VF和所述第一 PRI的组合对应的队列中的排序;
[0039] 根据所述第一地址和所述队列序号在所述表X中确定出针对所述第一 VF和所述 第一 PRI的组合的本次调度的起始队列。
[0040] 结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式 中,所述专用硬件芯片具体用于:将所述第一地址和所述队列序号相加,获得第二地址;当 所述第二地址小于所述第一 VF和所述第一 PRI的组合的下一 VF和PRI的组合的队列的首 地址时,在所述表X中确定出所述第二地址对应的队列号,所述队列号对应的队列即为所 述起始队列。
[0041] 结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式 中,所述专用硬件芯片具体用于:当所述第二地址等于所述下一 VF和PRI的组合的队列的 首地址时,在所述表X中确定出所述第一地址对应的队列号,所述队列号对应的队列即为 所述起始队列。
[0042] 结合第二方面或第二方面的第三种可能的实现方式或第二方面的第五种可能的 实现方式,在第二方面的第六种可能的实现方式中,所述专用硬件芯片还用于:确定所述起 始队列中是否有数据;当所述起始队列中有数据时,生成第一调度结果以及保存所述起始 队列的队列序号,所述第一调度结果包括所述第一 VF、所述第一 PRI以及所述起始队列的 队列号。
[0043] 结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式 中,所述专用硬件芯片还用于:当所述起始队列中没有数据时,通过查询所述起始队列的数 据结构表,确定所述下一队列;其中,所述数据结构表包括用于指示所述起始队列是否有数 据的指示信息、数据的数量信息以及所述起始队列的下一队列的队列号;确定所述下一队 列中是否有数据;当所述下一队列中有数据时,生成第二调度结果,所述第二调度结果包括 所述第一 VF、所述第一 PRI以及所述下一队列的队列号;保存所述下一队列的队列序号。
[0044] 结合第二方面或第二方面的第一种可能的实现方式或第二方面的第七种可能的 实现方式中的任意一种,在第二方面的第八种可能的实现方式中,所述专用硬件芯片还用 于:在分配一个或多个第一队列分别给一个或多个VF之后,从所述每个VF的一个或多个第 一队列中删除队列;并将删除的队列加入所述第一队列空闲链表中。
[0045] 结合第二方面或第二方面的第一种可能的实现方式或第二方面的第八种可能的 实现方式中的任意一种,在第二方面的第九种可能的实现方式中,所述专用硬件芯片还用 于:接收一外部数据;
[0046] 确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储 所述外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序;
[0047] 在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第 一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和 每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包 括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队 列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI 个数的值;
[0048] 根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表 X中的第二地址;根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的 队列号;将所述外部数据存储在所述队列号对应的队列中。
[0049] 本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0050] 在本申请实施例中,专用硬件芯片上的第一队列按照链表结构进行连接,形成第 一队列空闲链表。然后专用硬件芯片从第一队列空闲链表中分配一个或多个第一队列分别 给与虚拟机对应的一个或多个VF,所以每个VF的队列是独立的,而不受另一个VF的影响。 例如:删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第 一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分 配给每个VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用 率。因此,综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第 二队列的数量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射 计算,所以能够提高调度的便捷性。

【专利附图】

【附图说明】
[0051] 图1为现有技术中基于SR-I0V技术的计算系统的结构图;
[0052] 图2为现有技术中等分法分配队列的示意图;
[0053] 图3为现有技术中为队列到VF和优先级PRI配置表;
[0054] 图4为本申请一实施例中的队列调度方法的流程图;
[0055] 图5为本申请一实施例中采用链表进行队列配置的示意图;
[0056] 图6为本申请一实施例中链表与队列之间的关系不意图;
[0057] 图7为图4队列调度方法的进一步细化流程图;
[0058] 图8a为本申请一实施例中表X的示意图;
[0059] 图8b为本申请一实施例中表Y的示意图;
[0060] 图9为本申请一实施例中队列调度方法的整体过程示意图;
[0061] 图10为本申请另一实施例中队列调度的方法流程图;
[0062] 图11为本申请实施例中的计算系统的硬件实现的实例系统框图。

【具体实施方式】
[0063] 本申请实施例提供一种队列调度方法及计算系统,用以解决现有技术中的调度方 法存在的不能兼容多种队列配置方式的技术问题。
[0064] 本申请实施例中的技术方案为解决上述的技术问题,总体思路如下:
[0065] 在本申请实施例中,专用硬件芯片上的第一队列按照链表结构进行连接,形成第 一队列空闲链表。然后专用硬件芯片从第一队列空闲链表中分配一个或多个第一队列分别 给与虚拟机对应的一个或多个VF,所以每个VF的队列是独立的,而不受另一个VF的影响。 例如:删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第 一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分 配给每个VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用 率。因此,综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第 二队列的数量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射 计算,所以能够提高调度的便捷性。
[0066]为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例 中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0067] 本文中术语"和/或",仅仅是一种描述关联对象的关联关系,表示可以存在三种 关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另 夕卜,本文中字符"/",一般表示前后关联对象是一种"或"的关系。
[0068] 下面结合附图对本申请优选的实施方式进行详细说明。
[0069] 本申请一实施例提供一种队列调度方法,应用于基于SR-I0V的计算系统,所述计 算系统包括通用处理器以及专用硬件芯片。通用处理器用于运行一个或多个虚拟机。专用 硬件芯片用于基于SR-I0V协议实现物理功能PF以及一个或多个虚拟功能VF,每个虚拟机 与一个或多个VF对应,虚拟机可以通过驱动来访问VF。
[0070] 专用硬件芯片包括第一队列空闲链表,第一队列空闲链表包括多个按链表结构进 行连接的空闲的第一队列,其中,第一队列为位于专用硬件芯片中的队列。
[0071] 该方法由专用硬件芯片内的一个或多个功能模块执行。请参考图4所示,为本实 施例中队列调度方法的流程图,该方法包括以下内容:
[0072] 步骤10 :从第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应 的一个或多个VF,其中,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序 需要用到的第二队列的数量一致;
[0073] 步骤20 :获取虚拟机中的第二队列中的数据,将第二队列中的数据存放到所述第 一队列中进行处理。
[0074] 在一种可能的实现方式中,步骤10具体包括:获取每个VF的第二队列的数量,根 据第二队列的数量确定分配给每个VF的第一队列的数量;将与确定的第一队列的数量对 应的第一队列分配给一个或多个VF。
[0075] 具体来说,例如:与虚拟机对应的驱动获取每个VF的第二队列的数量,然后通过 通用处理器和专用硬件芯片之间的接口传输给专用硬件芯片。
[0076] 然后,执行步骤20,获取虚拟机中的第二队列中的数据,并将第二队列中的数据存 放到分配给每个VF的第一队列中进行处理。
[0077] 由此可以看出,分配给每个VF的队列是独立的,而不受另一个VF的影响。例如: 删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第一队列的 数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分配给每个 VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用率。因此, 综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第二队列的数 量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射计算,所以能 够提高调度的便捷性。例如队列号为2的第二队列中的数据存放到队列号为2的第一队列 中,所以不需要再通过算法计算队列号为2的第二队列中的数据应该存放到队列号为几的 第一队列中。
[0078] 可选的,分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化 而进行同样的变化,以使两种队列的数量相一致(如第二队列增加2个,第一队列也增加2 个;第二队列减少1个,第一队列也减少1个)。举例来说,当某个VF的第二队列的数量由 10变化为8时,分配给该VF的第一队列的数量也会由10变为8。
[0079] 可选的,当分配给每个VF的第一队列的数量为多个时,每个VF的多个第一队列按 链表结构进行连接。例如:分配给VF0的第一队列分别是第一队列0、第一队列20、第一队 列4时,那么第一队列0、第一队列20、第一队列4是按照链表结构进行连接的。具体的,每 个队列是该链表的节点。节点包括有数据部分以及下一个节点的地址。
[0080] 可选的,当单个VF支持一个或多个优先级PRI时,每个VF和PRI的组合所对应的 队列按照链表结构进行连接。不同的VF和PRI的组合所对应的链表互不相同。
[0081] 在本实施例中,具体可以采用单向链表的方式来串接相关的队列,各种类型的队 列分别串成一个链表。例如,空闲的第一队列组成第一队列空闲链表,分配组VF某个优先 级的队列组成一个链表。这样,针对某个VF某个PRI的链表配置与其他VF和PRI的链表 配置完全无关,保持了链表配置的独立性,即业务的独立性。
[0082] 链表的具体实现方式相对比较灵活,本发明实施例结合图5、图6对其中一种具体 的实现进行介绍,本领域技术人员可以根据本发明实施例中的方案在不付出创新性的劳动 性来进行各种变形,以通过其他方案进行实现。
[0083] 请参考图5,图5示意了 64个VF可以使用1024个队列,其中,一部分未分配给VF 的队列(图中最右侧一部分)组成第一队列空闲链表,另一部分队列已分配给了相应的VF、 PRI组合(如前4个队列分配给了 {VF0,PRI0}组合)的队列各自再组成一个链表。
[0084] 参见图6,图6示出了如何管理链表的一些数据结构。
[0085] 图6中的"空闲链表的指示信息"包括空闲链表的起始队列的地址和结束队列的 结束地址,从而可以知道空闲链表从哪里开始,哪里结束,还可以知道长度是多少(假设地 址是连续的);
[0086] 图6中的"VF,PRI链表结构"的内容与"空闲链表的指示信息"中的内容类似,也 包括起始队列和结束队列的地址;
[0087] 图6中的"队列数据结构"包括"en"、"cnt"以及"neXt_n〇de_addr"等字段,其中, "en"用于指示该队列是否有报文,可以使用"1"来表示有报文,"0"来表示无报文;"cnt" 用于指示报文个数,"cnt"不为0时,"en"为1,"cnt"为0时,"en"变为0 ;"next_n〇de_ addr"用于指示下一个节点(即下一个队列)的地址。如果该队列为某一个VF和PRI的组 合对应的链表中的最后一个队列,那么"next_node_addr"项的值可设置成本身的地址。需 要说明的是,在另一实施例中,也可以不设置"en"字段,而通过"cnt"来判断有没有报文, 但"cnt"在实际中数量会比较大,数据占用物理空间的bit数会比较多,而"en"可以只使 用1个bit位(表示0或1),这样通过专用硬件芯片来实现时效率会更加高一点。
[0088] 通过上述数据结构,即可以灵活实现各个链表中队列的增加及删除,例如,需要从 第一队列空闲链表中分配一个队列给为VR)和PRI0组合时,可以先通过空间链表的指示信 息找到空闲链表;然后修改"VF,PRI链结构"中的对应于VR)和PRI0组合的表项中的地址, 来表示有新队列加入;再修改"队列数据结构"表中跟被分配给VR)和PRI0组合的队列相 关的一些队列的next_node_addr来指示各个新各队列新的关系,具体可以结合实际情况 (如是从链首取队列还是从链尾取队列,是添加到链首还是链尾)来进行修改,具体修改方 法这些都为本领域技术人员所公知的技术,这里不再赘述。
[0089] 接下来再介绍步骤20中的处理过程,其中处理具体为调度处理,在调度后,通过 一套报文处理机制来对队列中的报文进行处理,这套报文处理机制为现有技术,本实施例 中并不对此进行具体描述,本实施例仅针对队列的调度进行详细说明。
[0090] 具体的,参见图7,本发明实施例提供的调度方法包括以下内容:
[0091] 步骤101 :获得需要调度的第一 VF和第一 PRI的组合;
[0092] 具体的,组合可以用{VF,PRI}这种格式表示,如{VF0,PRI2}表示"VF0,且优先级 为2"这个组合,该组合对应有一个或多个队列。
[0093] 步骤102 :在表Y中确定出与第一 VF和第一 PRI的组合对应的队列的首队列在表 X中的第一地址。
[0094] 其中,表X存储有个数为所有队列数的第一表项。其中,所有队列数表示分配到所 有VF的队列数;第一表项包括每个VF和每个PRI的组合对应的队列的队列号(如有1024 个队列,队列号可以为0-1023)。表Y存储有多个第二表项,每个第二表项包括每个VF和每 个PRI的组合,以及每个VF和每个PRI的组合对应的队列的首队列在表X中的地址。第二 表项的个数为VF的个数乘以单个VF支持的最大PRI个数的值。
[0095] 步骤103 :获取上次调度的终止队列的队列序号;队列序号表征终止队列在第一 VF和第一 PRI的组合对应的队列中的排序;
[0096] 步骤104 :根据第一地址和队列序号在表X中确定出针对第一 VF和第一 PRI的组 合的本次调度的起始队列。
[0097] 举例来说,请参考图8a所示,假设VF的数量为64,单个VF支持的最大PRI个数 为4,分别为PRI0、PRI1、PRI2和PRI3。所有队列数,即队列总数为1024。不管如何配置每 个PRI下的队列数和/或队列号,在系统启动时,或者在每次队列配置有更新时,或者是定 期扫描队列配置的相关信息,生成或更新表X。
[0098] 在表X中,每个VF的每个PRI下的队列均是按照顺序存储的。例如:VR)下的PRIO 包括有3个队列,分别是队列1、队列10和队列100,而且队列1是一个队列,队列10是第 二个队列,队列100是第三个队列。在存储时,按照队列的顺序存储,表X中的前三项依次 为1、10、100。换言之,表X中的地址0中存储有1,地址1存储有10,地址2中存储有100。
[0099] 进一步,在同一个VF中,也是按照PRI0至PRI3的顺序存储的。VF之间也是按照 VF0至VF63的顺序存储的。
[0100] 可选的,第一表项也可以包括每个VF和每个PRI的组合。
[0101] 而在表Y中,存储有每个VF和每个PRI的组合以及每个VF和每个PRI的组合对 应的队列的首队列在表X中的地址。举例来说,请参考图8b所示,以总队列数为1024、VF 的个数为64、单个VF支持的最大PRI个数为4为例来说,第二表项的个数为64乘以4的 值,即256。在表Y中,VF0和PRI0的组合对应的队列的首队列在表X中的地址为0。VF0 和PRI1的组合对应的队列的首队列在表X中的地址为3。
[0102] 具体来说,在生成或更新表X时,就把每个VF和每个PRI的组合对应的队列的首 队列在表X中的地址写入表Y中。
[0103] 可选的,在实际运用中,表Y中也可以存储有每个VF和每个PRI的组合对应的队 列的尾队列在表X中的地址。例如:在图8b所示的{VF0,PRI0}对应的数据可以是(0,2), 分别表示首队列和尾队列在表X中的地址。
[0104] 如果是采用链表的形式来管理队列,那么在建立表X和表Y时,具体可以通过扫描 队列链表来建立,即先查找到一个链表的首队列,然后根据首队列的数据结构表找到下一 个队列,依次类推,直到找到链表的尾队列,从而建立表X和表Y。
[0105] 接下来介绍步骤101的实施过程。一种可能的实现方式与现有技术中类似,请参 考图9所示,同一优先级下VF之间采用轮询(Round-Robin ;RR)调度,如图9中所示,每个 PRI对应一个RR调度,共有4个RR调度。例如:PRI0对应的RR调度,先查询VF0是否有 数据,具体可以通过是否有数据使能来判断是否有数据,同时查询"VF带宽配置表",如果有 数据的话,并且VF0具有带宽,就输出调度结果{VF PRI}到先入先出(First Input First Output ;FIF0)单元。然后继续查询VF1的PRI0,如果VF1的PRI0没有数据使能,表示没有 数据,和/或VF1没有带宽,就跳过VF1的PRI0,继续查询VF2的PRI0,重复相同的动作直 至查询完最后一个VF,例如VF63。
[0106] 按照上述描述的一个RR的调度过程,本实施例中通过RR调度并行对VF的4个PRI 进行轮询,如果VF有带宽,同时VF有数据,那么就将调度结果{VF,PRI}输出至FIFO单元。 对应每个RR调度,共有4个FIFO单元,分别用于存储对应的RR调度的调度结果。
[0107] 然后采用优先级调度的方式对4个FIFO单元中的调度结果进行优先级调度,根据 优先级配置原则选出哪个VF哪个PRI需要先进行队列调度,例如输出的优先级调度的结果 为{VF0, PRI1}。相应的,就获得了需要调度的第一 VF和第一 PRI的组合。
[0108] 当然,在实际运用中,还可以通过其他方式获得需要调度的第一 VF和第一 PRI的 组合,例如通过其他调度规则确定,或者直接由用户配置。
[0109] 当获得需要调度的第一 VF和第一 PRI的组合之后,接下来执行步骤102,即在表Y 中确定出与第一 VF和第一 PRI的组合对应的队列的首队列在表X中的第一地址。
[0110] 继续以前述图8a和图8b中所示的表X和表Y为例进行说明,假设在步骤101中获 得的第一 VF和第一 PRI的组合为{VFO, PRI1},那么查询图8b中的表Y就可以获得{VFO, PRI1}对应的数字为3,即{VFO, PRI1}对应的队列的首队列在表X中的第一地址为3。
[0111] 可选的,在步骤101之后,步骤102的同时、之前或之后,执行步骤103 :即获取上 次调度的终止队列的队列序号;队列序号表征终止队列在第一 VF和第一 PRI的组合对应的 队列中的排序。其中,获取上次调度的终止队列的队列序号,具体例如:通过上次轮询位置 寄存表获取所述队列序号。请参考图9所示,上次轮询位置寄存表中存储有每个VF和每个 PRI的组合对应的上次调度中的终止队列的队列序号。
[0112] 需要说明的是,在本实施例中,如果本次调度为第一次调度时,上次调度的终止队 列的队列序号均为0。例如当每次系统上电时,上次轮询位置寄存表中的每个项都重置为 0〇
[0113] 接下来执行步骤104,即根据第一地址和队列序号在表X中确定出针对第一 VF和 第一 PRI的组合的本次调度的起始队列。
[0114] 步骤104具体包括:将第一地址和队列序号相加,获得第二地址;当第二地址小于 第一 VF和第一 PRI的组合的下一 VF和PRI的组合的队列的首地址时,在表X中确定出第 二地址对应的队列号,所述队列号对应的队列即为所述起始队列。
[0115] 举例来说,请继续参考图8a所示,队列2为{VF0,PRI1}的队列中的第1队列。队 列20为{VF0,PRI1}的队列中的第2队列。队列200为{VF0,PRI1}的队列中的第3队列。 假设上次调度的终止队列的队列序号为1,那么就表示上次调度的终止队列为IVFO, PRI1} 的队列中的第1队列,即队列2。那么根据步骤103,将第一地址3与队列序号1相加,获得 第二地址4 ;第二地址4小于下一 VF和PRI的组合,S卩{VF0,PRI2}的队列的首地址7,所以 在表X中确定出第二地址4对应的队列号为20,那么队列号为20的队列即为本次调度的起 始队列。
[0116] 具体来说,可以通过以下两种但不限于以下两种的方法确定第二地址是否小于下 一 VF和PRI的组合的队列的首地址。
[0117] 第一种:如前述所描述,在表Y中同时也存储有每个VF和每个PRI的组合对应的 队列的尾队列在表X中的地址时,可以通过判断第二地址是否小于等于尾队列的地址来确 定第二地址是否小于下一 VF和PRI的组合的队列的首地址。具体来说,如果第二地址小于 等于尾队列的地址,那么第二地址就小于下一VF和PRI的组合的队列的首地址;否则,第二 地址等于下一 VF和PRI的组合的队列的首地址。
[0118] 第二种,在表Y中读取下一 VF和PRI的组合的队列的首地址;直接比较第二地址 和该首地址。
[0119] 可选的,当第二地址等于下一 VF和PRI的组合的队列的首地址时,在表X中确定 出第一地址对应的队列号;第一地址对应的队列号对应的队列即为所述起始队列。
[0120] 举例来说,请继续参考图8a和图8b所示,假设获取到的队列序号为4,也即上次调 度的是队列300,得到的第二地址为7 ;判断第二地址7是否小于下一 VF和PRI的组合,即 {VF0,PRI2}的队列的首地址7。判断的结果为否,表示第二地址为{VF0,PRI2}的首队列在 表X中的地址,也表示第一 VF和第一 PRI上次调度了最后一个队列。因此,本次调度应该 从首队列开始,所以就将第一地址对应的队列号对应的队列作为本次调度的起始队列,即 队列2为本次调度的起始队列。
[0121] 由以上描述可以看出,不管每个VF和每个PRI的组合的队列是如何配置的,例如 每个PRI下的队列数不相等,或者是队列数相等但是没有按照队列号顺序配置,都可以通 过本实施例中队列调度方法在表X和表Y确定出本次调度的起始队列,所以本实施例中的 调度方法能够适用于不同的队列配置方式。进一步,采用前述的队列调度方法,因为只需要 查询表X和表Y即可,不需要去扫描{VF,PRI}的组合对应的队列链表即可确定本次调度的 起始队列,所以可以提1?调度的效率。
[0122] 当在步骤104中确定出本次调度的起始队列之后,该方法还包括:确定起始队列 中是否有数据;当起始队列中有数据时,生成第一调度结果,第一调度结果包括第一 VF、第 一 PRI以及起始队列的队列号。
[0123] 其中,确定起始队列中是否有数据,具体例如为:确定起始队列中是否有数据使能 (即判断"en"位是否是" 1"),如果是,则可确定起始队列中有数据。若果不是,则确定起始 队列中没有数据。
[0124] 当起始队列中有数据时,生成第一调度结果,第一调度结果包括第一 VF、第一 PRI 以及起始队列的队列号,例如|VF0,PRI1,20}。如此,专用硬件芯片可以去队列20取数据, 队列20中的数据输出可以通过先进先出的原则进行输出,也可以通过优先级高低的原则 进行输出。
[0125] 进一步,当起始队列中有数据时,保存起始队列的队列序号。例如:将队列序号2 保存在上次轮询位置寄存表中,便于下次调度时,作为第一 VF和PRI的下次调度的上次调 度的终止队列的队列序号。
[0126] 然后,继续执行步骤101,按照前述描述的过程继续处理,进行下一次调度过程。
[0127] 可选的,该方法还包括:当起始队列中没有数据时,通过查询起始队列的数据结构 表,确定下一队列;确定所述下一队列中是否有数据;当下一队列中有数据时,生成第二调 度结果,第二调度结果包括第一 VF、第一 PRI以及下一队列的队列号;保存下一队列的队列 序号。
[0128] 当然,如果起始队列的下一队列中也没有数据的话,就继续查询下一队列的数据 结构表,确定下一队列的下一队列,然后对下一队列的队列进行查询。如此循环,直至找到 数据。轮询完第一 VF和第一 PRI下的所有队列之后,一定可以找出一个数据,因为第一 VF 和第一PRI的组合具有数据使能。其中,当再次轮询到起始队列时,就表征已轮询完第一VF 和第一 PRI下的所有队列。
[0129] 需要说明的是,在轮询过程中,当确定出某一队列的下一队列是该队列本身时,就 表示已轮询到第一VF和第一PRI的组合对应的队列的最后一个队列,那么就应该跳到该队 列的首队列继续查询。
[0130] 可选的,当数据从专用硬件芯片被调度出去之后,该方法还包括:刷新队列数据结 构表的数据使能、数据统计和VF输入队列的数据使能。例如:将"cnt"的值减1。如果减1 之后的值变为〇,那么还要将"en"项置为0。
[0131] 基于链表的队列配置方式,步骤20还可以通过以下方法进行队列调度。
[0132] 第一步,与前述步骤101相同。
[0133] 第二步,查询{VF,PRI}链,S卩{VF,PRI}的队列链的指示信息,得到第一 VF和第一 PRI的组合对应的首队列的队列号和尾队列的队列号。
[0134] 第三步,在上次轮询位置寄存表中获得上次调度的终止队列的队列号。
[0135] 第四步,查询如图6和图9中的"队列数据结构"表,得到终止队列的下一队列的队 列号next_node_addr。从next_node_addr对应的队列号开始轮询输入队列,当next_node_ addr等于第一 VF,第一 PRI链表的尾队列的队列号时下一个轮询地址要跳到第一 VF,第一 PRI链表的首队列。
[0136] 与前述图7及其相关描述相同的部分,本实施例中不再赘述。
[0137] 上述描述了如何将数据调度出去,接下来将介绍如何将数据存入第一队列中。除 有特别说明,相同的术语表征相同的意思。
[0138] 一种情况为:即将步骤20中获取的数据存放到所述第一队列中。因为第二队列与 第一队列一致,所以,当虚拟机中的数据传输到专用硬件芯片中,数据携带了在第二队列的 队列号,那么就可以确定存放该数据的第一队列的队列号。然后将该数据存储在该队列中。 具体来说,可以将数据的首地址和长度存储在队列中。也可以将数据本身存储在队列中。
[0139] 可选的,存储的方式可以是按照存储时间的先后存储,也可以是按照链表的形式 进行存储。
[0140] 可选的,当将数据存储在该队列中后,将该队列的数据计数器加1。例如:将前述 所述"cnt"项的值加1。如果"cnt"的值是由0变成1,那么还要将"en"项的值置为1,表 示有数据使能。即刷新该队列的数据结构表。
[0141] 同时可以查询如图9中"队列到{VF,PRI}配置表",就可以确定出该数据对应的 VF和PRI的组合。
[0142] 进一步,还需要将{VFx,PRIy}有数据的标志置位,表示有数据使能。在RR调度的 时候,只有有数据使能的{VF,PRI}才会被调度。
[0143] 另一种情况为从系统外部获取到的外部数据,将外部数据存放到第一队列中。请 再参考图10所示,该队列调度方法包括以下内容:
[0144] 步骤201 :接收一外部数据;
[0145] 步骤202 :确定外部数据对应的虚拟功能VF、优先级PRI和队列序号;
[0146] 步骤203 :在表Y中确定出与VF和PRI的组合对应的队列的首队列在表X中的第 一地址;
[0147] 步骤204:根据第一地址和队列序号,获得将要存储所述外部数据的队列在表X中 的第二地址;该第二地址与前述的第二地址不完全相同,下面将详细介绍。
[0148] 步骤205 :根据第二地址在表X中确定出将要存储所述外部数据的队列的队列 号;
[0149] 步骤206 :将所述外部数据存储在所述队列号对应的队列中。
[0150] 在步骤201中,接收一外部数据。具体来说,例如从其他设备接收到一个报文。
[0151] 接下来执行步骤202,具体来说,确定外部数据对应的虚拟功能VF,可以是通过L2 交换,即外部数据的媒体接入控制(Media Access Control ;MAC)地址到VF之间的映射,确 定该外部数据对应的VF。
[0152] 确定PRI,具体可以是将外部数据中的特定字段,例如VLAN(虚拟局域网)字段中 优先级的比特值,经过一个映射规则映射成符合本实施例中的优先级的值。
[0153] 为方便描述,假设确定出的该外部数据对应的VF和PRI,记为{VFx,PRIy}。
[0154] 确定队列序号,具体例如是利用哈希算法计算MAC地址得到一个索引,该索引对 应到{VFx,PRIy}的多个物理队列中的某一个。该索引表征将要存储该外部数据的队列在 {VFx,PRIy}对应的队列中的排序。例如:该索引对应到{VFx,PRIy}的第2个队列,也即表 征将要存储该外部数据的队列序号为2。
[0155] 接下来执行步骤203,即在表Y中确定出与{VFx,PRIy}对应的队列的首队列在表 X中的第一地址。
[0156] 举例来说,假设{VFx,PRIy}为{VFO, PRI1},那么根据图8b中的表Y,可以确定第 一地址为3。
[0157] 接下来执行步骤204,根据第一地址和队列序号,获得将要存储该数据的队列在表 X中的第二地址。
[0158] 具体来说,将第一地址加上队列序号再减去1,得到第二地址。继续沿用前述例子, 第一地址为3,队列序号为2,那么第二地址为4。
[0159] 接下来执行步骤205,即根据第二地址在表X中确定出将要存储该外部数据的队 列的队列号。例如:在图8a中所示的表X中,查询到第二地址4对应的队列号为20。
[0160] 当确定队列号后,执行步骤206,将该数据存储在该队列中。具体来说,可以将数据 的首地址和长度存储在队列中。也可以将数据本身存储在队列中。
[0161] 通过本实施例中的方法,只需要通过表X和表Y就可以快速查询到存储数据的队 列号,所以不需要每次都扫描队列配置表,所以可以提高查询的效率。
[0162] 可选的,存储的方式可以是按照存储时间的先后存储,也可以是按照链表的形式 进行存储。
[0163] 可选的,当将数据存储在该队列中后,将该队列的数据计数器加1。例如:将前述 所述"cnt"项的值加1。如果"cnt"的值是由0变成1,那么还要将"en"项的值置为1,表 示有数据使能。
[0164] 进一步,还需要将{VFx,PRIy}有数据的标志置位,表示有数据使能。在RR调度的 时候,只有有数据使能的{VF,PRI}才会被调度。
[0165] 基于同一发明构思,本申请实施例还提供一种基于SR-I0V的计算系统。请参考图 11所示,为本实施例中计算系统的硬件实现的系统框图。该计算系统包括:通用处理器301 以及专用硬件芯片302,通用处理器301用于运行一个或多个虚拟机,专用硬件芯片302用 于基于SR-I0V协议实现物理功能PF以及一个或多个虚拟功能VF,每个虚拟机与一个或多 个VF对应。
[0166] 可选的,通用处理器301具体例如是CPU。通用处理器301还用于运行通用的操作 系统。
[0167] 可选的,专用硬件芯片302具体例如是ASIC、FPGA、CPLD。
[0168] 专用硬件芯片302包括第一队列空闲链表,第一队列空闲链表包括多个按链表结 构进行连接的空闲的第一队列,其中,第一队列为位于专用硬件芯片302中的队列。
[0169] 专用硬件芯片302还用于从第一队列空闲链表中分配一个或多个第一队列分别 给与虚拟机对应的一个或多个VF,其中,分配给每个VF的第一队列的数量与每个VF对应的 虚拟机中的程序需要用到的第二队列的数量一致;以及还用于获取虚拟机中的第二队列中 的数据,将第二队列中的数据存放到第一队列中进行处理。
[0170] 可选的,当分配给每个VF的第一队列的数量为多个时,每个VF的多个第一队列按 链表结构进行连接。
[0171] 可选的,分配给每个VF的第一队列的数量随着第二队列的数量的变化而进行同 样的变化。如此可以保证所述第二队列的数量和所述第一队列的数量始终一致。
[0172] 结合以上各实施例,当单个VF支持一个或多个优先级PRI,处理为调度处理时,专 用硬件芯片302具体用于:获得需要调度的第一 VF和第一 PRI的组合;
[0173] 在表Y中确定出与第一 VF和第一PRI的组合对应的队列链的首队列在表X中的第 一地址;其中,表X存储有个数为所有队列数的第一表项,第一表项包括每个VF和每个PRI 的组合对应的队列的队列号;表Y存储有多个第二表项,每个第二表项包括每个VF和每个 PRI的组合,以及每个VF和每个PRI的组合对应的队列的首队列在表X中的地址;第二表 项的个数为VF的个数乘以单个VF支持的最大PRI个数的值;
[0174] 获取上次调度的终止队列的队列序号;队列序号表征终止队列在第一 VF和第一 PRI的组合对应的队列中的排序;
[0175] 根据第一地址和队列序号在表X中确定出针对第一 VF和第一 PRI的组合的本次 调度的起始队列。
[0176] 进一步,专用硬件芯片302具体用于:将第一地址和队列序号相加,获得第二地 址;当第二地址小于第一 VF和第一 PRI的组合的下一 VF和PRI的组合的队列的首地址时, 在表X中确定出第二地址对应的队列号,队列号对应的队列即为起始队列。
[0177] 进一步,专用硬件芯片302具体用于:当第二地址等于下一 VF和PRI的组合的队 列的首地址时,在表X中确定出第一地址对应的队列号,队列号对应的队列即为起始队列。
[0178] 结合以上各实施例,专用硬件芯片302还用于:确定起始队列中是否有数据;当起 始队列中有数据时,生成第一调度结果以及保存起始队列的队列序号,第一调度结果包括 第一 VF、第一 PRI以及起始队列的队列号。
[0179] 进一步,专用硬件芯片302还用于:当起始队列中没有数据时,通过查询起始队列 的数据结构表,确定下一队列;其中,数据结构表包括用于指示起始队列是否有数据的指示 信息、数据的数量信息以及起始队列的下一队列的队列号;确定下一队列中是否有数据; 当下一队列中有数据时,生成第二调度结果,第二调度结果包括第一 VF、第一 PRI以及下一 队列的队列号;保存下一队列的队列序号。
[0180] 结合以上各实施例,专用硬件芯片302还用于:在分配一个或多个第一队列分别 给一个或多个VF之后,从每个VF的一个或多个第一队列中删除队列;并将删除的队列加入 第一队列空闲链表中。
[0181] 结合以上各实施例,专用硬件芯片302还用于:接收一外部数据;确定外部数据对 应的VF、PRI和队列序号;其中,队列序号表征将要存储外部数据的队列在VF和PRI的组合 对应的队列中的排序;在表Y中确定出与VF和PRI的组合对应的队列的首队列在表X中的 第一地址;根据第一地址和队列序号,获得将要存储外部数据的队列在表X中的第二地址; 根据第二地址在表X中确定出将要存储外部数据的队列的队列号;将外部数据存储在队列 号对应的队列中。
[0182] 进一步,在图11中,总线架构(用总线300来代表),总线300可以包括任意数量 的互联的总线和桥,总线300将包括由通用处理器301代表和专用硬件芯片302的一个或 多个处理器和存储器304代表的存储器的各种电路链接在一起。总线300还可以将诸如外 围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公 知的,因此,本文不再对其进行进一步描述。总线接口 303在总线300和接收器305和发送 器306之间提供接口。接收器305和发送器306可以是同一个元件,即收发机,提供用于在 传输介质上与各种其他装置通信的单元。例如:接收器305从其他设备接收外部数据。发 送器306用于将专用硬件芯片302处理后的数据发送给其他设备。取决于计算系统的性质, 还可以提供用户接口 307,例如小键盘、显示器、扬声器、麦克风、操纵杆。
[0183] 通用处理器301负责管理总线300和通常的处理,如前述所述运行通用操作系统。 而存储器304可以被用于存储通用处理器301在执行操作时所使用的数据。
[0184] 前述图4-图10实施例中的队列调度方法中的各种变化方式和具体实例同样适用 于本实施例的计算系统,通过前述对队列调度方法的详细描述,本领域技术人员可以清楚 的知道本实施例中计算系统的实施方法,所以为了说明书的简洁,在此不再详述。
[0185] 申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0186] 在本申请实施例中,专用硬件芯片上的第一队列按照链表结构进行连接,形成第 一队列空闲链表。然后专用硬件芯片从第一队列空闲链表中分配一个或多个第一队列分别 给与虚拟机对应的一个或多个VF,所以每个VF的队列是独立的,而不受另一个VF的影响。 例如:删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第 一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分 配给每个VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用 率。因此,综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第 二队列的数量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射 计算,所以能够提高调度的便捷性。
[0187] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序 产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实 施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机 可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形 式。
[0188] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程 图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一 流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算 机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理 器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生 用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能 的装置。
[0189] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特 定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指 令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或 多个方框中指定的功能。
[0190] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计 算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或 其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图 一个方框或多个方框中指定的功能的步骤。
[0191] 显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精 神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围 之内,则本申请也意图包含这些改动和变型在内。
【权利要求】
1. 一种队列调度方法,应用于基于单根输入输出虚拟化SR-IOV的计算系统,所述计算 系统包括通用处理器以及专用硬件芯片,所述通用处理器用于运行一个或多个虚拟机,所 述专用硬件芯片用于基于SR-I0V协议实现物理功能PF以及一个或多个虚拟功能VF,每个 所述虚拟机与一个或多个VF对应,其特征在于 : 所述专用硬件芯片包括第一队列空闲链表,所述第一队列空闲链表包括多个按链表结 构进行连接的空闲的第一队列,其中,所述第一队列为位于所述专用硬件芯片中的队列; 所述方法由所述专用硬件芯片内的一个或多个功能模块执行,包括: 从所述第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或 多个VF,其中,分配给每个VF的所述第一队列的数量与每个VF对应的虚拟机中的程序需要 用到的第二队列的数量一致; 获取所述虚拟机中的所述第二队列中的数据,将所述第二队列中的数据存放到所述第 一队列中进行处理。
2. 如权利要求1所述的方法,其特征在于,当分配给所述每个VF的第一队列的数量为 多个时,所述每个VF的多个第一队列按链表结构进行连接。
3. 如权利要求1或2所述的方法,其特征在于,分配给每个VF的所述第一队列的数量 随着所述第二队列的数量的变化而进行同样的变化。
4. 如权利要求1-3任一项所述的方法,其特征在于,单个VF支持一个或多个优先级 PRI,所述处理为调度处理,所述调度处理包括: 获得需要调度的第一 VF和第一 PRI的组合; 在表Y中确定出与所述第一 VF和所述第一 PRI的组合对应的队列链的首队列在表X 中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每 个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第 二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合 对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持 的最大PRI个数的值; 获取上次调度的终止队列的队列序号;所述队列序号表征所述终止队列在所述第一 VF和所述第一 PRI的组合对应的队列中的排序; 根据所述第一地址和所述队列序号在所述表X中确定出针对所述第一 VF和所述第一 PRI的组合的本次调度的起始队列。
5. 如权利要求4所述的方法,其特征在于,根据所述第一地址和所述队列序号在所述 表X中确定出针对所述第一 VF和所述第一 PRI的组合的本次调度的起始队列,包括: 将所述第一地址和所述队列序号相加,获得第二地址; 当所述第二地址小于所述第一 VF和所述第一 PRI的组合的下一 VF和PRI的组合的队 列的首地址时,在所述表X中确定出所述第二地址对应的队列号,所述队列号对应的队列 即为所述起始队列。
6. 如权利要求5所述的方法,其特征在于,所述方法还包括:当所述第二地址等于所述 下一 VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第一地址对应的队列 号,所述队列号对应的队列即为所述起始队列。
7. 如权利要求4-6任一项所述的方法,其特征在于,所述方法还包括: 确定所述起始队列中是否有数据; 当所述起始队列中有数据时,生成第一调度结果以及保存所述起始队列的队列序号, 所述第一调度结果包括所述第一 VF、所述第一 PRI以及所述起始队列的队列号。
8. 如权利要求7所述的方法,其特征在于,所述方法还包括: 当所述起始队列中没有数据时,通过查询所述起始队列的数据结构表,确定所述下一 队列;其中,所述数据结构表包括用于指示所述起始队列是否有数据的指示信息、数据的数 量信息以及所述起始队列的下一队列的队列号; 确定所述下一队列中是否有数据; 当所述下一队列中有数据时,生成第二调度结果,所述第二调度结果包括所述第一 VF、 所述第一 PRI以及所述下一队列的队列号; 保存所述下一队列的队列序号。
9. 如权利要求1-8任一项所述的方法,其特征在于,在分配一个或多个第一队列分别 给一个或多个VF之后,所述方法还包括: 从所述每个VF的一个或多个第一队列中删除队列; 将删除的队列加入所述第一队列空闲链表中。
10. 如权利要求1-9任一项所述的方法,其特征在于,所述方法还包括: 接收一外部数据; 确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储所述 外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序; 在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第一地 址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和每个 PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包括所 述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队列的 首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI个 数的值; 根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表X中 的第二地址; 根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的队列号; 将所述外部数据存储在所述队列号对应的队列中。
11. 一种基于单根输入输出虚拟化SR-IOV的计算系统,包括通用处理器以及专用硬件 芯片,所述通用处理器用于运行一个或多个虚拟机,所述专用硬件芯片用于基于SR-IOV协 议实现物理功能PF以及一个或多个虚拟功能VF,每个所述虚拟机与一个或多个VF对应,其 特征在于: 所述专用硬件芯片包括第一队列空闲链表,所述第一队列空闲链表包括多个按链表结 构进行连接的空闲的第一队列,其中,所述第一队列为位于所述专用硬件芯片中的队列; 所述专用硬件芯片还用于从所述第一队列空闲链表中分配一个或多个第一队列分别 给与虚拟机对应的一个或多个VF,其中,分配给每个VF的所述第一队列的数量与每个VF对 应的虚拟机中的程序需要用到的第二队列的数量一致;以及还用于获取所述虚拟机中的所 述第二队列中的数据,将所述第二队列中的数据存放到所述第一队列中进行处理。
12. 如权利要求11所述的计算系统,其特征在于,当分配给所述每个VF的第一队列的 数量为多个时,所述每个VF的多个第一队列按链表结构进行连接。
13. 如权利要求11或12所述的计算系统,其特征在于,分配给每个VF的所述第一队列 的数量随着所述第二队列的数量的变化而进行同样的变化。
14. 如权利要求11-13任一项所述的计算系统,其特征在于,单个VF支持一个或多个优 先级PRI,所述处理为调度处理,所述专用硬件芯片具体用于: 获得需要调度的第一 VF和第一 PRI的组合; 在表Y中确定出与所述第一 VF和所述第一 PRI的组合对应的队列链的首队列在表X 中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每 个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第 二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合 对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持 的最大PRI个数的值; 获取上次调度的终止队列的队列序号;所述队列序号表征所述终止队列在所述第一 VF和所述第一 PRI的组合对应的队列中的排序; 根据所述第一地址和所述队列序号在所述表X中确定出针对所述第一 VF和所述第一 PRI的组合的本次调度的起始队列。
15. 如权利要求14所述的计算系统,其特征在于,所述专用硬件芯片具体用于:将所述 第一地址和所述队列序号相加,获得第二地址;当所述第二地址小于所述第一 VF和所述第 一 PRI的组合的下一 VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第二地 址对应的队列号,所述队列号对应的队列即为所述起始队列。
16. 如权利要求15所述的计算系统,其特征在于,所述专用硬件芯片具体用于:当所述 第二地址等于所述下一 VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第一 地址对应的队列号,所述队列号对应的队列即为所述起始队列。
17. 如权利要求14-16任一项所述的计算系统,其特征在于,所述专用硬件芯片还用 于:确定所述起始队列中是否有数据;当所述起始队列中有数据时,生成第一调度结果以 及保存所述起始队列的队列序号,所述第一调度结果包括所述第一 VF、所述第一 PRI以及 所述起始队列的队列号。
18. 如权利要求17所述的计算系统,其特征在于,所述专用硬件芯片还用于:当所述起 始队列中没有数据时,通过查询所述起始队列的数据结构表,确定所述下一队列;其中,所 述数据结构表包括用于指示所述起始队列是否有数据的指示信息、数据的数量信息以及所 述起始队列的下一队列的队列号;确定所述下一队列中是否有数据;当所述下一队列中有 数据时,生成第二调度结果,所述第二调度结果包括所述第一 VF、所述第一 PRI以及所述下 一队列的队列号;保存所述下一队列的队列序号。
19. 如权利要求11-18任一项所述的计算系统,其特征在于,所述专用硬件芯片还用 于:在分配一个或多个第一队列分别给一个或多个VF之后,从所述每个VF的一个或多个第 一队列中删除队列;并将删除的队列加入所述第一队列空闲链表中。
20. 如权利要求11-19任一项所述的计算系统,其特征在于,所述专用硬件芯片还用 于:接收一外部数据; 确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储所述 外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序; 在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第一地 址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和每个 PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包括所 述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队列的 首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI个 数的值; 根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表X中 的第二地址;根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的队列 号;将所述外部数据存储在所述队列号对应的队列中。
【文档编号】H04L12/863GK104125166SQ201410375173
【公开日】2014年10月29日 申请日期:2014年7月31日 优先权日:2014年7月31日
【发明者】雷春, 仪长, 黄雪峰 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1