CN104125166B - 一种队列调度方法及计算系统 - Google Patents

一种队列调度方法及计算系统 Download PDF

Info

Publication number
CN104125166B
CN104125166B CN201410375173.1A CN201410375173A CN104125166B CN 104125166 B CN104125166 B CN 104125166B CN 201410375173 A CN201410375173 A CN 201410375173A CN 104125166 B CN104125166 B CN 104125166B
Authority
CN
China
Prior art keywords
queue
pri
address
combination
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410375173.1A
Other languages
English (en)
Other versions
CN104125166A (zh
Inventor
雷春
仪长
黄雪峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201410375173.1A priority Critical patent/CN104125166B/zh
Publication of CN104125166A publication Critical patent/CN104125166A/zh
Application granted granted Critical
Publication of CN104125166B publication Critical patent/CN104125166B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Telephonic Communication Services (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

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

Description

一种队列调度方法及计算系统
技术领域
本申请涉及通信技术领域,尤其涉及一种队列调度方法及计算系统。
背景技术
请参考图1所示,为一种基于支持单根输入输出虚拟化(Single Root IOVirtrualiztion,SR-IOV)技术的计算系统结构图。如图1所示,该系统包括:通用处理器,例如:中央处理器(Central Processing Unit,CPU),例如为X86结构的CPU,用于运行通用的操作系统、虚拟机软件等。该系统还包括专用硬件芯片,例如:专用集成电路(英文:Application Specific Integrated Circuit;简称:ASIC)、现场可编程门阵列(英文:Field Programmable Gate Array;简称:FPGA)、复杂可编程逻辑器件(英文:ComplexProgrammable 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。
专用硬件芯片包括N个队列,N为大于等于m的正整数。N个队列与m个VF之间具有一种动态的配置关系,这种配置关系满足SR-IOV下不同VF具有不同的带宽、不同的业务和不同优先级的需求。
请再参考图1所示,在现有技术中,采用等分法分配队列,即N个队列被平均分配到每个VF的每个优先级,所以N的取值为VF的数量m乘以优先级的数量再乘以每个优先级下的队列数目。假设队列的总数量N为1024,VF的数量为64,每个VF包含4个优先级,那么采用等分法,每个优先级会分配到4个队列,如图2所示,其中,PRI表示优先级。
请再参考图3所示,为队列到VF和优先级PRI配置表。配置随机存取存储器(RandomAccess Memory;RAM)的地址为队列号0~1023,数据为VF号和优先级PRI。每一个队列属于哪个优先级,属于哪个VF都有设定,例如VF的个数为64,优先级有4个,则每个VF的每个优先级有4个队列,配置时每4个配置单位数据都是相同的,例如地址0~3的数据都是{0,0};地址1020~1023的数据都是{63,3}。
因此,在等分法的队列配置方式中,必须为每个VF和PRI的组合分配平均的队列数。进一步,因为要平均分配,所以当VF有变化时,就必须重新为所有VF分配队列。
发明内容
本申请提供一种队列调度方法及计算系统,用以解决现有技术中的等分法的配置队列方式不够灵活的技术问题。
本申请第一方面提供了一种队列调度方法,应用于基于单根输入输出虚拟化SR-IOV的计算系统,所述计算系统包括通用处理器以及专用硬件芯片,所述通用处理器用于运行一个或多个虚拟机,所述专用硬件芯片用于基于SR-IOV协议实现物理功能PF以及一个或多个虚拟功能VF,每个所述虚拟机与一个或多个VF对应,所述专用硬件芯片包括第一队列空闲链表,所述第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队列,其中,所述第一队列为位于所述专用硬件芯片中的队列;所述方法由所述专用硬件芯片内的一个或多个功能模块执行,包括:
从所述第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,其中,分配给每个VF的所述第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致;
获取所述虚拟机中的所述第二队列中的数据,将所述第二队列中的数据存放到所述第一队列中进行处理。
结合第一方面,在第一方面的第一种可能的实现方式中,当分配给所述每个VF的第一队列的数量为多个时,所述每个VF的多个第一队列按链表结构进行连接。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化而进行同样的变化。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,单个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的组合的本次调度的起始队列。
结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,根据所述第一地址和所述队列序号在所述表X中确定出针对所述第一VF和所述第一PRI的组合的本次调度的起始队列,包括:将所述第一地址和所述队列序号相加,获得第二地址;当所述第二地址小于所述第一VF和所述第一PRI的组合的下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第二地址对应的队列号,所述队列号对应的队列即为所述起始队列。
结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述方法还包括:当所述第二地址等于所述下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第一地址对应的队列号,所述队列号对应的队列即为所述起始队列。
结合第一方面的第三种可能的实现方式至第一方面的第五种可能的实现方式中的任意一种,在第一方面的第六种可能的实现方式中,所述方法还包括:确定所述起始队列中是否有数据;当所述起始队列中有数据时,生成第一调度结果以及保存所述起始队列的队列序号,所述第一调度结果包括所述第一VF、所述第一PRI以及所述起始队列的队列号。
结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述方法还包括:当所述起始队列中没有数据时,通过查询所述起始队列的数据结构表,确定所述下一队列;其中,所述数据结构表包括用于指示所述起始队列是否有数据的指示信息、数据的数量信息以及所述起始队列的下一队列的队列号;确定所述下一队列中是否有数据;当所述下一队列中有数据时,生成第二调度结果,所述第二调度结果包括所述第一VF、所述第一PRI以及所述下一队列的队列号;保存所述下一队列的队列序号。
结合第一方面或第一方面的第一种可能的实现方式至第一方面的第七种可能的实现方式中的任意一种,在第一方面的第八种可能的实现方式中,在分配一个或多个第一队列分别给一个或多个VF之后,所述方法还包括:从所述每个VF的一个或多个第一队列中删除队列;将删除的队列加入所述第一队列空闲链表中。
结合第一方面或第一方面的第一种可能的实现方式至第一方面的第八种可能的实现方式中的任意一种,在第一方面的第九种可能的实现方式中,所述方法还包括:
接收一外部数据;
确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储所述外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序;
在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI个数的值;
根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表X中的第二地址;
根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的队列号;
将所述外部数据存储在所述队列号对应的队列中。
本申请第二方面提供一种基于单根输入输出虚拟化SR-IOV的计算系统,包括通用处理器以及专用硬件芯片,所述通用处理器用于运行一个或多个虚拟机,所述专用硬件芯片用于基于SR-IOV协议实现物理功能PF以及一个或多个虚拟功能VF,每个所述虚拟机与一个或多个VF对应,
所述专用硬件芯片包括第一队列空闲链表,所述第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队列,其中,所述第一队列为位于所述专用硬件芯片中的队列;
所述专用硬件芯片还用于从所述第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,其中,分配给每个VF的所述第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致;以及还用于获取所述虚拟机中的所述第二队列中的数据,将所述第二队列中的数据存放到所述第一队列中进行处理。
结合第二方面,在第二方面的第一种可能的实现方式中,当分配给所述每个VF的第一队列的数量为多个时,所述每个VF的多个第一队列按链表结构进行连接。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化而进行同样的变化。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,单个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的组合的本次调度的起始队列。
结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述专用硬件芯片具体用于:将所述第一地址和所述队列序号相加,获得第二地址;当所述第二地址小于所述第一VF和所述第一PRI的组合的下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第二地址对应的队列号,所述队列号对应的队列即为所述起始队列。
结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述专用硬件芯片具体用于:当所述第二地址等于所述下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第一地址对应的队列号,所述队列号对应的队列即为所述起始队列。
结合第二方面或第二方面的第三种可能的实现方式或第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述专用硬件芯片还用于:确定所述起始队列中是否有数据;当所述起始队列中有数据时,生成第一调度结果以及保存所述起始队列的队列序号,所述第一调度结果包括所述第一VF、所述第一PRI以及所述起始队列的队列号。
结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,所述专用硬件芯片还用于:当所述起始队列中没有数据时,通过查询所述起始队列的数据结构表,确定所述下一队列;其中,所述数据结构表包括用于指示所述起始队列是否有数据的指示信息、数据的数量信息以及所述起始队列的下一队列的队列号;确定所述下一队列中是否有数据;当所述下一队列中有数据时,生成第二调度结果,所述第二调度结果包括所述第一VF、所述第一PRI以及所述下一队列的队列号;保存所述下一队列的队列序号。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第七种可能的实现方式中的任意一种,在第二方面的第八种可能的实现方式中,所述专用硬件芯片还用于:在分配一个或多个第一队列分别给一个或多个VF之后,从所述每个VF的一个或多个第一队列中删除队列;并将删除的队列加入所述第一队列空闲链表中。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第八种可能的实现方式中的任意一种,在第二方面的第九种可能的实现方式中,所述专用硬件芯片还用于:接收一外部数据;
确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储所述外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序;
在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI个数的值;
根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表X中的第二地址;根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的队列号;将所述外部数据存储在所述队列号对应的队列中。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
在本申请实施例中,专用硬件芯片上的第一队列按照链表结构进行连接,形成第一队列空闲链表。然后专用硬件芯片从第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,所以每个VF的队列是独立的,而不受另一个VF的影响。例如:删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分配给每个VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用率。因此,综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第二队列的数量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射计算,所以能够提高调度的便捷性。
附图说明
图1为现有技术中基于SR-IOV技术的计算系统的结构图;
图2为现有技术中等分法分配队列的示意图;
图3为现有技术中为队列到VF和优先级PRI配置表;
图4为本申请一实施例中的队列调度方法的流程图;
图5为本申请一实施例中采用链表进行队列配置的示意图;
图6为本申请一实施例中链表与队列之间的关系示意图;
图7为图4队列调度方法的进一步细化流程图;
图8a为本申请一实施例中表X的示意图;
图8b为本申请一实施例中表Y的示意图;
图9为本申请一实施例中队列调度方法的整体过程示意图;
图10为本申请另一实施例中队列调度的方法流程图;
图11为本申请实施例中的计算系统的硬件实现的实例系统框图。
具体实施方式
本申请实施例提供一种队列调度方法及计算系统,用以解决现有技术中的调度方法存在的不能兼容多种队列配置方式的技术问题。
本申请实施例中的技术方案为解决上述的技术问题,总体思路如下:
在本申请实施例中,专用硬件芯片上的第一队列按照链表结构进行连接,形成第一队列空闲链表。然后专用硬件芯片从第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,所以每个VF的队列是独立的,而不受另一个VF的影响。例如:删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分配给每个VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用率。因此,综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第二队列的数量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射计算,所以能够提高调度的便捷性。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图对本申请优选的实施方式进行详细说明。
本申请一实施例提供一种队列调度方法,应用于基于SR-IOV的计算系统,所述计算系统包括通用处理器以及专用硬件芯片。通用处理器用于运行一个或多个虚拟机。专用硬件芯片用于基于SR-IOV协议实现物理功能PF以及一个或多个虚拟功能VF,每个虚拟机与一个或多个VF对应,虚拟机可以通过驱动来访问VF。
专用硬件芯片包括第一队列空闲链表,第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队列,其中,第一队列为位于专用硬件芯片中的队列。
该方法由专用硬件芯片内的一个或多个功能模块执行。请参考图4所示,为本实施例中队列调度方法的流程图,该方法包括以下内容:
步骤10:从第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,其中,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致;
步骤20:获取虚拟机中的第二队列中的数据,将第二队列中的数据存放到所述第一队列中进行处理。
在一种可能的实现方式中,步骤10具体包括:获取每个VF的第二队列的数量,根据第二队列的数量确定分配给每个VF的第一队列的数量;将与确定的第一队列的数量对应的第一队列分配给一个或多个VF。
具体来说,例如:与虚拟机对应的驱动获取每个VF的第二队列的数量,然后通过通用处理器和专用硬件芯片之间的接口传输给专用硬件芯片。
然后,执行步骤20,获取虚拟机中的第二队列中的数据,并将第二队列中的数据存放到分配给每个VF的第一队列中进行处理。
由此可以看出,分配给每个VF的队列是独立的,而不受另一个VF的影响。例如:删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分配给每个VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用率。因此,综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第二队列的数量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射计算,所以能够提高调度的便捷性。例如队列号为2的第二队列中的数据存放到队列号为2的第一队列中,所以不需要再通过算法计算队列号为2的第二队列中的数据应该存放到队列号为几的第一队列中。
可选的,分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化而进行同样的变化,以使两种队列的数量相一致(如第二队列增加2个,第一队列也增加2个;第二队列减少1个,第一队列也减少1个)。举例来说,当某个VF的第二队列的数量由10变化为8时,分配给该VF的第一队列的数量也会由10变为8。
可选的,当分配给每个VF的第一队列的数量为多个时,每个VF的多个第一队列按链表结构进行连接。例如:分配给VF0的第一队列分别是第一队列0、第一队列20、第一队列4时,那么第一队列0、第一队列20、第一队列4是按照链表结构进行连接的。具体的,每个队列是该链表的节点。节点包括有数据部分以及下一个节点的地址。
可选的,当单个VF支持一个或多个优先级PRI时,每个VF和PRI的组合所对应的队列按照链表结构进行连接。不同的VF和PRI的组合所对应的链表互不相同。
在本实施例中,具体可以采用单向链表的方式来串接相关的队列,各种类型的队列分别串成一个链表。例如,空闲的第一队列组成第一队列空闲链表,分配组VF某个优先级的队列组成一个链表。这样,针对某个VF某个PRI的链表配置与其他VF和PRI的链表配置完全无关,保持了链表配置的独立性,即业务的独立性。
链表的具体实现方式相对比较灵活,本发明实施例结合图5、图6对其中一种具体的实现进行介绍,本领域技术人员可以根据本发明实施例中的方案在不付出创新性的劳动性来进行各种变形,以通过其他方案进行实现。
请参考图5,图5示意了64个VF可以使用1024个队列,其中,一部分未分配给VF的队列(图中最右侧一部分)组成第一队列空闲链表,另一部分队列已分配给了相应的VF、PRI组合(如前4个队列分配给了{VF0,PRI0}组合)的队列各自再组成一个链表。
参见图6,图6示出了如何管理链表的一些数据结构。
图6中的“空闲链表的指示信息”包括空闲链表的起始队列的地址和结束队列的结束地址,从而可以知道空闲链表从哪里开始,哪里结束,还可以知道长度是多少(假设地址是连续的);
图6中的“VF,PRI链表结构”的内容与“空闲链表的指示信息”中的内容类似,也包括起始队列和结束队列的地址;
图6中的“队列数据结构”包括“en”、“cnt”以及“next_node_addr”等字段,其中,“en”用于指示该队列是否有报文,可以使用“1”来表示有报文,“0”来表示无报文;“cnt”用于指示报文个数,“cnt”不为0时,“en”为1,“cnt”为0时,“en”变为0;“next_node_addr”用于指示下一个节点(即下一个队列)的地址。如果该队列为某一个VF和PRI的组合对应的链表中的最后一个队列,那么“next_node_addr”项的值可设置成本身的地址。需要说明的是,在另一实施例中,也可以不设置“en”字段,而通过“cnt”来判断有没有报文,但“cnt”在实际中数量会比较大,数据占用物理空间的bit数会比较多,而“en”可以只使用1个bit位(表示0或1),这样通过专用硬件芯片来实现时效率会更加高一点。
通过上述数据结构,即可以灵活实现各个链表中队列的增加及删除,例如,需要从第一队列空闲链表中分配一个队列给为VF0和PRI0组合时,可以先通过空间链表的指示信息找到空闲链表;然后修改“VF,PRI链结构”中的对应于VF0和PRI0组合的表项中的地址,来表示有新队列加入;再修改“队列数据结构”表中跟被分配给VF0和PRI0组合的队列相关的一些队列的next_node_addr来指示各个新各队列新的关系,具体可以结合实际情况(如是从链首取队列还是从链尾取队列,是添加到链首还是链尾)来进行修改,具体修改方法这些都为本领域技术人员所公知的技术,这里不再赘述。
接下来再介绍步骤20中的处理过程,其中处理具体为调度处理,在调度后,通过一套报文处理机制来对队列中的报文进行处理,这套报文处理机制为现有技术,本实施例中并不对此进行具体描述,本实施例仅针对队列的调度进行详细说明。
具体的,参见图7,本发明实施例提供的调度方法包括以下内容:
步骤101:获得需要调度的第一VF和第一PRI的组合;
具体的,组合可以用{VF,PRI}这种格式表示,如{VF0,PRI2}表示“VF0,且优先级为2”这个组合,该组合对应有一个或多个队列。
步骤102:在表Y中确定出与第一VF和第一PRI的组合对应的队列的首队列在表X中的第一地址。
其中,表X存储有个数为所有队列数的第一表项。其中,所有队列数表示分配到所有VF的队列数;第一表项包括每个VF和每个PRI的组合对应的队列的队列号(如有1024个队列,队列号可以为0-1023)。表Y存储有多个第二表项,每个第二表项包括每个VF和每个PRI的组合,以及每个VF和每个PRI的组合对应的队列的首队列在表X中的地址。第二表项的个数为VF的个数乘以单个VF支持的最大PRI个数的值。
步骤103:获取上次调度的终止队列的队列序号;队列序号表征终止队列在第一VF和第一PRI的组合对应的队列中的排序;
步骤104:根据第一地址和队列序号在表X中确定出针对第一VF和第一PRI的组合的本次调度的起始队列。
举例来说,请参考图8a所示,假设VF的数量为64,单个VF支持的最大PRI个数为4,分别为PRI0、PRI1、PRI2和PRI3。所有队列数,即队列总数为1024。不管如何配置每个PRI下的队列数和/或队列号,在系统启动时,或者在每次队列配置有更新时,或者是定期扫描队列配置的相关信息,生成或更新表X。
在表X中,每个VF的每个PRI下的队列均是按照顺序存储的。例如:VF0下的PRI0包括有3个队列,分别是队列1、队列10和队列100,而且队列1是一个队列,队列10是第二个队列,队列100是第三个队列。在存储时,按照队列的顺序存储,表X中的前三项依次为1、10、100。换言之,表X中的地址0中存储有1,地址1存储有10,地址2中存储有100。
进一步,在同一个VF中,也是按照PRI0至PRI3的顺序存储的。VF之间也是按照VF0至VF63的顺序存储的。
可选的,第一表项也可以包括每个VF和每个PRI的组合。
而在表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。
具体来说,在生成或更新表X时,就把每个VF和每个PRI的组合对应的队列的首队列在表X中的地址写入表Y中。
可选的,在实际运用中,表Y中也可以存储有每个VF和每个PRI的组合对应的队列的尾队列在表X中的地址。例如:在图8b所示的{VF0,PRI0}对应的数据可以是(0,2),分别表示首队列和尾队列在表X中的地址。
如果是采用链表的形式来管理队列,那么在建立表X和表Y时,具体可以通过扫描队列链表来建立,即先查找到一个链表的首队列,然后根据首队列的数据结构表找到下一个队列,依次类推,直到找到链表的尾队列,从而建立表X和表Y。
接下来介绍步骤101的实施过程。一种可能的实现方式与现有技术中类似,请参考图9所示,同一优先级下VF之间采用轮询(Round-Robin;RR)调度,如图9中所示,每个PRI对应一个RR调度,共有4个RR调度。例如:PRI0对应的RR调度,先查询VF0是否有数据,具体可以通过是否有数据使能来判断是否有数据,同时查询“VF带宽配置表”,如果有数据的话,并且VF0具有带宽,就输出调度结果{VF PRI}到先入先出(First Input First Output;FIFO)单元。然后继续查询VF1的PRI0,如果VF1的PRI0没有数据使能,表示没有数据,和/或VF1没有带宽,就跳过VF1的PRI0,继续查询VF2的PRI0,重复相同的动作直至查询完最后一个VF,例如VF63。
按照上述描述的一个RR的调度过程,本实施例中通过RR调度并行对VF的4个PRI进行轮询,如果VF有带宽,同时VF有数据,那么就将调度结果{VF,PRI}输出至FIFO单元。对应每个RR调度,共有4个FIFO单元,分别用于存储对应的RR调度的调度结果。
然后采用优先级调度的方式对4个FIFO单元中的调度结果进行优先级调度,根据优先级配置原则选出哪个VF哪个PRI需要先进行队列调度,例如输出的优先级调度的结果为{VF0,PRI1}。相应的,就获得了需要调度的第一VF和第一PRI的组合。
当然,在实际运用中,还可以通过其他方式获得需要调度的第一VF和第一PRI的组合,例如通过其他调度规则确定,或者直接由用户配置。
当获得需要调度的第一VF和第一PRI的组合之后,接下来执行步骤102,即在表Y中确定出与第一VF和第一PRI的组合对应的队列的首队列在表X中的第一地址。
继续以前述图8a和图8b中所示的表X和表Y为例进行说明,假设在步骤101中获得的第一VF和第一PRI的组合为{VF0,PRI1},那么查询图8b中的表Y就可以获得{VF0,PRI1}对应的数字为3,即{VF0,PRI1}对应的队列的首队列在表X中的第一地址为3。
可选的,在步骤101之后,步骤102的同时、之前或之后,执行步骤103:即获取上次调度的终止队列的队列序号;队列序号表征终止队列在第一VF和第一PRI的组合对应的队列中的排序。其中,获取上次调度的终止队列的队列序号,具体例如:通过上次轮询位置寄存表获取所述队列序号。请参考图9所示,上次轮询位置寄存表中存储有每个VF和每个PRI的组合对应的上次调度中的终止队列的队列序号。
需要说明的是,在本实施例中,如果本次调度为第一次调度时,上次调度的终止队列的队列序号均为0。例如当每次系统上电时,上次轮询位置寄存表中的每个项都重置为0。
接下来执行步骤104,即根据第一地址和队列序号在表X中确定出针对第一VF和第一PRI的组合的本次调度的起始队列。
步骤104具体包括:将第一地址和队列序号相加,获得第二地址;当第二地址小于第一VF和第一PRI的组合的下一VF和PRI的组合的队列的首地址时,在表X中确定出第二地址对应的队列号,所述队列号对应的队列即为所述起始队列。
举例来说,请继续参考图8a所示,队列2为{VF0,PRI1}的队列中的第1队列。队列20为{VF0,PRI1}的队列中的第2队列。队列200为{VF0,PRI1}的队列中的第3队列。假设上次调度的终止队列的队列序号为1,那么就表示上次调度的终止队列为{VF0,PRI1}的队列中的第1队列,即队列2。那么根据步骤103,将第一地址3与队列序号1相加,获得第二地址4;第二地址4小于下一VF和PRI的组合,即{VF0,PRI2}的队列的首地址7,所以在表X中确定出第二地址4对应的队列号为20,那么队列号为20的队列即为本次调度的起始队列。
具体来说,可以通过以下两种但不限于以下两种的方法确定第二地址是否小于下一VF和PRI的组合的队列的首地址。
第一种:如前述所描述,在表Y中同时也存储有每个VF和每个PRI的组合对应的队列的尾队列在表X中的地址时,可以通过判断第二地址是否小于等于尾队列的地址来确定第二地址是否小于下一VF和PRI的组合的队列的首地址。具体来说,如果第二地址小于等于尾队列的地址,那么第二地址就小于下一VF和PRI的组合的队列的首地址;否则,第二地址等于下一VF和PRI的组合的队列的首地址。
第二种,在表Y中读取下一VF和PRI的组合的队列的首地址;直接比较第二地址和该首地址。
可选的,当第二地址等于下一VF和PRI的组合的队列的首地址时,在表X中确定出第一地址对应的队列号;第一地址对应的队列号对应的队列即为所述起始队列。
举例来说,请继续参考图8a和图8b所示,假设获取到的队列序号为4,也即上次调度的是队列300,得到的第二地址为7;判断第二地址7是否小于下一VF和PRI的组合,即{VF0,PRI2}的队列的首地址7。判断的结果为否,表示第二地址为{VF0,PRI2}的首队列在表X中的地址,也表示第一VF和第一PRI上次调度了最后一个队列。因此,本次调度应该从首队列开始,所以就将第一地址对应的队列号对应的队列作为本次调度的起始队列,即队列2为本次调度的起始队列。
由以上描述可以看出,不管每个VF和每个PRI的组合的队列是如何配置的,例如每个PRI下的队列数不相等,或者是队列数相等但是没有按照队列号顺序配置,都可以通过本实施例中队列调度方法在表X和表Y确定出本次调度的起始队列,所以本实施例中的调度方法能够适用于不同的队列配置方式。进一步,采用前述的队列调度方法,因为只需要查询表X和表Y即可,不需要去扫描{VF,PRI}的组合对应的队列链表即可确定本次调度的起始队列,所以可以提高调度的效率。
当在步骤104中确定出本次调度的起始队列之后,该方法还包括:确定起始队列中是否有数据;当起始队列中有数据时,生成第一调度结果,第一调度结果包括第一VF、第一PRI以及起始队列的队列号。
其中,确定起始队列中是否有数据,具体例如为:确定起始队列中是否有数据使能(即判断“en”位是否是“1”),如果是,则可确定起始队列中有数据。若果不是,则确定起始队列中没有数据。
当起始队列中有数据时,生成第一调度结果,第一调度结果包括第一VF、第一PRI以及起始队列的队列号,例如{VF0,PRI1,20}。如此,专用硬件芯片可以去队列20取数据,队列20中的数据输出可以通过先进先出的原则进行输出,也可以通过优先级高低的原则进行输出。
进一步,当起始队列中有数据时,保存起始队列的队列序号。例如:将队列序号2保存在上次轮询位置寄存表中,便于下次调度时,作为第一VF和PRI的下次调度的上次调度的终止队列的队列序号。
然后,继续执行步骤101,按照前述描述的过程继续处理,进行下一次调度过程。
可选的,该方法还包括:当起始队列中没有数据时,通过查询起始队列的数据结构表,确定下一队列;确定所述下一队列中是否有数据;当下一队列中有数据时,生成第二调度结果,第二调度结果包括第一VF、第一PRI以及下一队列的队列号;保存下一队列的队列序号。
当然,如果起始队列的下一队列中也没有数据的话,就继续查询下一队列的数据结构表,确定下一队列的下一队列,然后对下一队列的队列进行查询。如此循环,直至找到数据。轮询完第一VF和第一PRI下的所有队列之后,一定可以找出一个数据,因为第一VF和第一PRI的组合具有数据使能。其中,当再次轮询到起始队列时,就表征已轮询完第一VF和第一PRI下的所有队列。
需要说明的是,在轮询过程中,当确定出某一队列的下一队列是该队列本身时,就表示已轮询到第一VF和第一PRI的组合对应的队列的最后一个队列,那么就应该跳到该队列的首队列继续查询。
可选的,当数据从专用硬件芯片被调度出去之后,该方法还包括:刷新队列数据结构表的数据使能、数据统计和VF输入队列的数据使能。例如:将“cnt”的值减1。如果减1之后的值变为0,那么还要将“en”项置为0。
基于链表的队列配置方式,步骤20还可以通过以下方法进行队列调度。
第一步,与前述步骤101相同。
第二步,查询{VF,PRI}链,即{VF,PRI}的队列链的指示信息,得到第一VF和第一PRI的组合对应的首队列的队列号和尾队列的队列号。
第三步,在上次轮询位置寄存表中获得上次调度的终止队列的队列号。
第四步,查询如图6和图9中的“队列数据结构”表,得到终止队列的下一队列的队列号next_node_addr。从next_node_addr对应的队列号开始轮询输入队列,当next_node_addr等于第一VF,第一PRI链表的尾队列的队列号时下一个轮询地址要跳到第一VF,第一PRI链表的首队列。
与前述图7及其相关描述相同的部分,本实施例中不再赘述。
上述描述了如何将数据调度出去,接下来将介绍如何将数据存入第一队列中。除有特别说明,相同的术语表征相同的意思。
一种情况为:即将步骤20中获取的数据存放到所述第一队列中。因为第二队列与第一队列一致,所以,当虚拟机中的数据传输到专用硬件芯片中,数据携带了在第二队列的队列号,那么就可以确定存放该数据的第一队列的队列号。然后将该数据存储在该队列中。具体来说,可以将数据的首地址和长度存储在队列中。也可以将数据本身存储在队列中。
可选的,存储的方式可以是按照存储时间的先后存储,也可以是按照链表的形式进行存储。
可选的,当将数据存储在该队列中后,将该队列的数据计数器加1。例如:将前述所述“cnt”项的值加1。如果“cnt”的值是由0变成1,那么还要将“en”项的值置为1,表示有数据使能。即刷新该队列的数据结构表。
同时可以查询如图9中“队列到{VF,PRI}配置表”,就可以确定出该数据对应的VF和PRI的组合。
进一步,还需要将{VFx,PRIy}有数据的标志置位,表示有数据使能。在RR调度的时候,只有有数据使能的{VF,PRI}才会被调度。
另一种情况为从系统外部获取到的外部数据,将外部数据存放到第一队列中。请再参考图10所示,该队列调度方法包括以下内容:
步骤201:接收一外部数据;
步骤202:确定外部数据对应的虚拟功能VF、优先级PRI和队列序号;
步骤203:在表Y中确定出与VF和PRI的组合对应的队列的首队列在表X中的第一地址;
步骤204:根据第一地址和队列序号,获得将要存储所述外部数据的队列在表X中的第二地址;该第二地址与前述的第二地址不完全相同,下面将详细介绍。
步骤205:根据第二地址在表X中确定出将要存储所述外部数据的队列的队列号;
步骤206:将所述外部数据存储在所述队列号对应的队列中。
在步骤201中,接收一外部数据。具体来说,例如从其他设备接收到一个报文。
接下来执行步骤202,具体来说,确定外部数据对应的虚拟功能VF,可以是通过L2交换,即外部数据的媒体接入控制(Media Access Control;MAC)地址到VF之间的映射,确定该外部数据对应的VF。
确定PRI,具体可以是将外部数据中的特定字段,例如VLAN(虚拟局域网)字段中优先级的比特值,经过一个映射规则映射成符合本实施例中的优先级的值。
为方便描述,假设确定出的该外部数据对应的VF和PRI,记为{VFx,PRIy}。
确定队列序号,具体例如是利用哈希算法计算MAC地址得到一个索引,该索引对应到{VFx,PRIy}的多个物理队列中的某一个。该索引表征将要存储该外部数据的队列在{VFx,PRIy}对应的队列中的排序。例如:该索引对应到{VFx,PRIy}的第2个队列,也即表征将要存储该外部数据的队列序号为2。
接下来执行步骤203,即在表Y中确定出与{VFx,PRIy}对应的队列的首队列在表X中的第一地址。
举例来说,假设{VFx,PRIy}为{VF0,PRI1},那么根据图8b中的表Y,可以确定第一地址为3。
接下来执行步骤204,根据第一地址和队列序号,获得将要存储该数据的队列在表X中的第二地址。
具体来说,将第一地址加上队列序号再减去1,得到第二地址。继续沿用前述例子,第一地址为3,队列序号为2,那么第二地址为4。
接下来执行步骤205,即根据第二地址在表X中确定出将要存储该外部数据的队列的队列号。例如:在图8a中所示的表X中,查询到第二地址4对应的队列号为20。
当确定队列号后,执行步骤206,将该数据存储在该队列中。具体来说,可以将数据的首地址和长度存储在队列中。也可以将数据本身存储在队列中。
通过本实施例中的方法,只需要通过表X和表Y就可以快速查询到存储数据的队列号,所以不需要每次都扫描队列配置表,所以可以提高查询的效率。
可选的,存储的方式可以是按照存储时间的先后存储,也可以是按照链表的形式进行存储。
可选的,当将数据存储在该队列中后,将该队列的数据计数器加1。例如:将前述所述“cnt”项的值加1。如果“cnt”的值是由0变成1,那么还要将“en”项的值置为1,表示有数据使能。
进一步,还需要将{VFx,PRIy}有数据的标志置位,表示有数据使能。在RR调度的时候,只有有数据使能的{VF,PRI}才会被调度。
基于同一发明构思,本申请实施例还提供一种基于SR-IOV的计算系统。请参考图11所示,为本实施例中计算系统的硬件实现的系统框图。该计算系统包括:通用处理器301以及专用硬件芯片302,通用处理器301用于运行一个或多个虚拟机,专用硬件芯片302用于基于SR-IOV协议实现物理功能PF以及一个或多个虚拟功能VF,每个虚拟机与一个或多个VF对应。
可选的,通用处理器301具体例如是CPU。通用处理器301还用于运行通用的操作系统。
可选的,专用硬件芯片302具体例如是ASIC、FPGA、CPLD。
专用硬件芯片302包括第一队列空闲链表,第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队列,其中,第一队列为位于专用硬件芯片302中的队列。
专用硬件芯片302还用于从第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,其中,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致;以及还用于获取虚拟机中的第二队列中的数据,将第二队列中的数据存放到第一队列中进行处理。
可选的,当分配给每个VF的第一队列的数量为多个时,每个VF的多个第一队列按链表结构进行连接。
可选的,分配给每个VF的第一队列的数量随着第二队列的数量的变化而进行同样的变化。如此可以保证所述第二队列的数量和所述第一队列的数量始终一致。
结合以上各实施例,当单个VF支持一个或多个优先级PRI,处理为调度处理时,专用硬件芯片302具体用于:获得需要调度的第一VF和第一PRI的组合;
在表Y中确定出与第一VF和第一PRI的组合对应的队列链的首队列在表X中的第一地址;其中,表X存储有个数为所有队列数的第一表项,第一表项包括每个VF和每个PRI的组合对应的队列的队列号;表Y存储有多个第二表项,每个第二表项包括每个VF和每个PRI的组合,以及每个VF和每个PRI的组合对应的队列的首队列在表X中的地址;第二表项的个数为VF的个数乘以单个VF支持的最大PRI个数的值;
获取上次调度的终止队列的队列序号;队列序号表征终止队列在第一VF和第一PRI的组合对应的队列中的排序;
根据第一地址和队列序号在表X中确定出针对第一VF和第一PRI的组合的本次调度的起始队列。
进一步,专用硬件芯片302具体用于:将第一地址和队列序号相加,获得第二地址;当第二地址小于第一VF和第一PRI的组合的下一VF和PRI的组合的队列的首地址时,在表X中确定出第二地址对应的队列号,队列号对应的队列即为起始队列。
进一步,专用硬件芯片302具体用于:当第二地址等于下一VF和PRI的组合的队列的首地址时,在表X中确定出第一地址对应的队列号,队列号对应的队列即为起始队列。
结合以上各实施例,专用硬件芯片302还用于:确定起始队列中是否有数据;当起始队列中有数据时,生成第一调度结果以及保存起始队列的队列序号,第一调度结果包括第一VF、第一PRI以及起始队列的队列号。
进一步,专用硬件芯片302还用于:当起始队列中没有数据时,通过查询起始队列的数据结构表,确定下一队列;其中,数据结构表包括用于指示起始队列是否有数据的指示信息、数据的数量信息以及起始队列的下一队列的队列号;确定下一队列中是否有数据;当下一队列中有数据时,生成第二调度结果,第二调度结果包括第一VF、第一PRI以及下一队列的队列号;保存下一队列的队列序号。
结合以上各实施例,专用硬件芯片302还用于:在分配一个或多个第一队列分别给一个或多个VF之后,从每个VF的一个或多个第一队列中删除队列;并将删除的队列加入第一队列空闲链表中。
结合以上各实施例,专用硬件芯片302还用于:接收一外部数据;确定外部数据对应的VF、PRI和队列序号;其中,队列序号表征将要存储外部数据的队列在VF和PRI的组合对应的队列中的排序;在表Y中确定出与VF和PRI的组合对应的队列的首队列在表X中的第一地址;根据第一地址和队列序号,获得将要存储外部数据的队列在表X中的第二地址;根据第二地址在表X中确定出将要存储外部数据的队列的队列号;将外部数据存储在队列号对应的队列中。
进一步,在图11中,总线架构(用总线300来代表),总线300可以包括任意数量的互联的总线和桥,总线300将包括由通用处理器301代表和专用硬件芯片302的一个或多个处理器和存储器304代表的存储器的各种电路链接在一起。总线300还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口303在总线300和接收器305和发送器306之间提供接口。接收器305和发送器306可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。例如:接收器305从其他设备接收外部数据。发送器306用于将专用硬件芯片302处理后的数据发送给其他设备。取决于计算系统的性质,还可以提供用户接口307,例如小键盘、显示器、扬声器、麦克风、操纵杆。
通用处理器301负责管理总线300和通常的处理,如前述所述运行通用操作系统。而存储器304可以被用于存储通用处理器301在执行操作时所使用的数据。
前述图4-图10实施例中的队列调度方法中的各种变化方式和具体实例同样适用于本实施例的计算系统,通过前述对队列调度方法的详细描述,本领域技术人员可以清楚的知道本实施例中计算系统的实施方法,所以为了说明书的简洁,在此不再详述。
申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
在本申请实施例中,专用硬件芯片上的第一队列按照链表结构进行连接,形成第一队列空闲链表。然后专用硬件芯片从第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,所以每个VF的队列是独立的,而不受另一个VF的影响。例如:删除一个VF,也不需要因此为其他VF重新分配队列。进一步,分配给每个VF的第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,所以分配给每个VF的队列数可能不同,所以在本实施例中是按需进行分配,能够提高队列的利用率。因此,综合以上两方面,可以较大的提高队列配置的灵活性。另外,因为第一队列和第二队列的数量一致,所以在将第二队列中的数据存放到第一队列中时,不需要复杂的映射计算,所以能够提高调度的便捷性。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (16)

1.一种队列调度方法,应用于基于单根输入输出虚拟化SR-IOV的计算系统,所述计算系统包括通用处理器以及专用硬件芯片,所述通用处理器用于运行一个或多个虚拟机,所述专用硬件芯片用于基于SR-IOV协议实现物理功能PF以及一个或多个虚拟功能VF,每个所述虚拟机与一个或多个VF对应,其特征在于:
所述专用硬件芯片包括第一队列空闲链表,所述第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队列,其中,所述第一队列为位于所述专用硬件芯片中的队列;
所述方法由所述专用硬件芯片内的一个或多个功能模块执行,包括:
从所述第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,其中,分配给每个VF的所述第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,且分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化而进行同样的变化;
获取所述虚拟机中的所述第二队列中的数据,将所述第二队列中的数据存放到所述第一队列中进行处理;
其中,单个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的组合的本次调度的起始队列。
2.如权利要求1所述的方法,其特征在于,当分配给所述每个VF的第一队列的数量为多个时,所述每个VF的多个第一队列按链表结构进行连接。
3.如权利要求1或2所述的方法,其特征在于,根据所述第一地址和所述队列序号在所述表X中确定出针对所述第一VF和所述第一PRI的组合的本次调度的起始队列,包括:
将所述第一地址和所述队列序号相加,获得第二地址;
当所述第二地址小于所述第一VF和所述第一PRI的组合的下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第二地址对应的队列号,所述队列号对应的队列即为所述起始队列。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:当所述第二地址等于所述下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第一地址对应的队列号,所述队列号对应的队列即为所述起始队列。
5.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
确定所述起始队列中是否有数据;
当所述起始队列中有数据时,生成第一调度结果以及保存所述起始队列的队列序号,所述第一调度结果包括所述第一VF、所述第一PRI以及所述起始队列的队列号。
6.如权利要求5所述的方法,其特征在于,所述方法还包括:
当所述起始队列中没有数据时,通过查询所述起始队列的数据结构表,确定下一队列;其中,所述数据结构表包括用于指示所述起始队列是否有数据的指示信息、数据的数量信息以及所述起始队列的下一队列的队列号;
确定所述下一队列中是否有数据;
当所述下一队列中有数据时,生成第二调度结果,所述第二调度结果包括所述第一VF、所述第一PRI以及所述下一队列的队列号;
保存所述下一队列的队列序号。
7.如权利要求1或2所述的方法,其特征在于,在分配一个或多个第一队列分别给一个或多个VF之后,所述方法还包括:
从所述每个VF的一个或多个第一队列中删除队列;
将删除的队列加入所述第一队列空闲链表中。
8.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收一外部数据;
确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储所述外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序;
在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI个数的值;
根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表X中的第二地址;
根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的队列号;
将所述外部数据存储在所述队列号对应的队列中。
9.一种基于单根输入输出虚拟化SR-IOV的计算系统,包括通用处理器以及专用硬件芯片,所述通用处理器用于运行一个或多个虚拟机,所述专用硬件芯片用于基于SR-IOV协议实现物理功能PF以及一个或多个虚拟功能VF,每个所述虚拟机与一个或多个VF对应,其特征在于:
所述专用硬件芯片包括第一队列空闲链表,所述第一队列空闲链表包括多个按链表结构进行连接的空闲的第一队列,其中,所述第一队列为位于所述专用硬件芯片中的队列;
所述专用硬件芯片还用于从所述第一队列空闲链表中分配一个或多个第一队列分别给与虚拟机对应的一个或多个VF,其中,分配给每个VF的所述第一队列的数量与每个VF对应的虚拟机中的程序需要用到的第二队列的数量一致,且分配给每个VF的所述第一队列的数量随着所述第二队列的数量的变化而进行同样的变化;以及还用于获取所述虚拟机中的所述第二队列中的数据,将所述第二队列中的数据存放到所述第一队列中进行处理;
其中,单个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的组合的本次调度的起始队列。
10.如权利要求9所述的计算系统,其特征在于,当分配给所述每个VF的第一队列的数量为多个时,所述每个VF的多个第一队列按链表结构进行连接。
11.如权利要求9所述的计算系统,其特征在于,所述专用硬件芯片具体用于:将所述第一地址和所述队列序号相加,获得第二地址;当所述第二地址小于所述第一VF和所述第一PRI的组合的下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第二地址对应的队列号,所述队列号对应的队列即为所述起始队列。
12.如权利要求11所述的计算系统,其特征在于,所述专用硬件芯片具体用于:当所述第二地址等于所述下一VF和PRI的组合的队列的首地址时,在所述表X中确定出所述第一地址对应的队列号,所述队列号对应的队列即为所述起始队列。
13.如权利要求9或10所述的计算系统,其特征在于,所述专用硬件芯片还用于:确定所述起始队列中是否有数据;当所述起始队列中有数据时,生成第一调度结果以及保存所述起始队列的队列序号,所述第一调度结果包括所述第一VF、所述第一PRI以及所述起始队列的队列号。
14.如权利要求13所述的计算系统,其特征在于,所述专用硬件芯片还用于:当所述起始队列中没有数据时,通过查询所述起始队列的数据结构表,确定下一队列;其中,所述数据结构表包括用于指示所述起始队列是否有数据的指示信息、数据的数量信息以及所述起始队列的下一队列的队列号;确定所述下一队列中是否有数据;当所述下一队列中有数据时,生成第二调度结果,所述第二调度结果包括所述第一VF、所述第一PRI以及所述下一队列的队列号;保存所述下一队列的队列序号。
15.如权利要求9或10所述的计算系统,其特征在于,所述专用硬件芯片还用于:在分配一个或多个第一队列分别给一个或多个VF之后,从所述每个VF的一个或多个第一队列中删除队列;并将删除的队列加入所述第一队列空闲链表中。
16.如权利要求9或10所述的计算系统,其特征在于,所述专用硬件芯片还用于:接收一外部数据;
确定所述外部数据对应的VF、PRI和队列序号;其中,所述队列序号表征将要存储所述外部数据的队列在所述VF和所述PRI的组合对应的队列中的排序;
在表Y中确定出与所述VF和所述PRI的组合对应的队列的首队列在表X中的第一地址;其中,所述表X存储有个数为所有队列数的第一表项,所述第一表项包括每个VF和每个PRI的组合对应的队列的队列号;所述表Y存储有多个第二表项,每个所述第二表项包括所述每个VF和所述每个PRI的组合,以及所述每个VF和所述每个PRI的组合对应的队列的首队列在表X中的地址;所述第二表项的个数为VF的个数乘以单个VF支持的最大PRI个数的值;
根据所述第一地址和所述队列序号,获得将要存储所述外部数据的队列在所述表X中的第二地址;根据所述第二地址在所述表X中确定出将要存储所述外部数据的队列的队列号;将所述外部数据存储在所述队列号对应的队列中。
CN201410375173.1A 2014-07-31 2014-07-31 一种队列调度方法及计算系统 Active CN104125166B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410375173.1A CN104125166B (zh) 2014-07-31 2014-07-31 一种队列调度方法及计算系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410375173.1A CN104125166B (zh) 2014-07-31 2014-07-31 一种队列调度方法及计算系统

Publications (2)

Publication Number Publication Date
CN104125166A CN104125166A (zh) 2014-10-29
CN104125166B true CN104125166B (zh) 2018-05-29

Family

ID=51770434

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410375173.1A Active CN104125166B (zh) 2014-07-31 2014-07-31 一种队列调度方法及计算系统

Country Status (1)

Country Link
CN (1) CN104125166B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107818056B (zh) * 2016-09-14 2021-09-07 华为技术有限公司 一种队列管理方法及装置
BR112018000362A2 (pt) * 2016-11-09 2018-09-11 Huawei Technologies Co., Ltd. método de processamento de pacote em sistema de computação em nuvem, hospedeiro e sistema
CN108255572A (zh) * 2016-12-29 2018-07-06 华为技术有限公司 一种vcpu切换方法和物理主机
CN109086033B (zh) * 2018-07-06 2021-08-03 中科星图股份有限公司 一种遥感数据处理的流程调度方法
CN109189581B (zh) * 2018-09-20 2021-08-31 郑州云海信息技术有限公司 一种作业调度方法和装置
CN112614331B (zh) * 2020-12-14 2022-01-11 杭州海兴电力科技股份有限公司 抄读电能表事件的方法与电能表抄读事件系统
CN114253979B (zh) * 2021-12-23 2023-10-03 北京百度网讯科技有限公司 一种报文处理方法、装置及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102377682A (zh) * 2011-12-12 2012-03-14 西安电子科技大学 基于定长单元存储变长分组的队列管理方法及设备

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102377682A (zh) * 2011-12-12 2012-03-14 西安电子科技大学 基于定长单元存储变长分组的队列管理方法及设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
"一种基于SR-IOV扩展的VF分配模型";李南,封卫兵,张武,彭俊杰;《计算机应用于软件》;20131130;全文 *
"几种索引技术的比较";谢力军,杨军;《怀化学院学报》;20090831;第2页左栏的倒数第二段2.3节稀疏索引;图2.3 *
"基于SR-IOV虚拟化技术";李超,董青,戴华东;《电脑与信息技术》;20101031;全文 *

Also Published As

Publication number Publication date
CN104125166A (zh) 2014-10-29

Similar Documents

Publication Publication Date Title
CN104125166B (zh) 一种队列调度方法及计算系统
CN106027643B (zh) 一种基于Kubernetes容器集群管理系统的资源调度方法
CN107278362B (zh) 云计算系统中报文处理的方法、主机和系统
CN105900064B (zh) 调度数据流任务的方法和装置
CN114303138A (zh) 用于多核计算环境的硬件队列调度
CN105159753B (zh) 加速器虚拟化的方法、装置及集中资源管理器
CN105264509A (zh) 融合网络中的自适应中断联合
CN105993009A (zh) 通过非透明桥向PCIe集群中的计算资源传送MSI-X中断的方法和装置
CN110162388A (zh) 一种任务调度方法、系统及终端设备
CN109714268A (zh) 一种虚拟私有云的流量控制方法及相关装置
CN104995604A (zh) 虚拟机的资源分配方法及装置
CN106325976B (zh) 一种渲染任务调度处理方法及服务器
CN105988948B (zh) 一种数据传输的方法及设备
CN109962859A (zh) 一种报文调度方法及设备
CN107247629A (zh) 云计算系统及用于控制服务器的云计算方法和装置
CN109508326A (zh) 用于处理数据的方法、装置和系统
CN110380988A (zh) 用于针对网络分组处理的功率感知的调度的技术
DE60104005D1 (de) Übertragung von paketdaten
CN107181698A (zh) 单队列多流业务整形的系统和方法
CN108605017A (zh) 查询计划和操作感知通信缓冲区管理
Stephens et al. Titan: Fair Packet Scheduling for Commodity Multiqueue {NICs}
CN104780118B (zh) 一种基于令牌的流控方法及装置
CN108123891A (zh) Sdn网络中使用分布式域控制器实现的动态负载均衡方法
CN116382581A (zh) 一种加速执行NVMe协议的方法、系统、设备和存储介质
CN103533090A (zh) 单个物理网口模拟为多个逻辑网口的映射方法与装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant