用于转发数据包的方法、网卡、主机设备和计算机系统与流程

文档序号:21719622发布日期:2020-08-05 01:09阅读:190来源:国知局
用于转发数据包的方法、网卡、主机设备和计算机系统与流程
本申请涉及虚拟化
技术领域
,并且更具体地,涉及一种用于转发数据包的方法、网卡、主机设备和计算机系统。
背景技术
:通过虚拟化技术,可以在一台主机设备(主机设备也可称为计算机设备、物理主机或物理计算机)上模拟出一台或多台虚拟机(virtualmachine,vm)。vm可以像主机设备一样工作。例如,用户可以在vm上安装操作系统和应用程序;又如,用户可以通过vm访问网络资源。对于用户而言,vm可以看成是运行在主机设备上的应用程序,但对于运行在vm中的应用程序而言,vm就像真正的主机设备一样为该应用程序提供工作环境。单根输入输出虚拟化(singlerootiinput/outputvirtualization,sriov)技术允许在多个vm之间高效共享外设部件互连表示(peripheralcomponentinterconnectexpress,pcie)设备。sriov引入了物理功能(physicalfunction,pf)和虚拟功能(virtualfunction,vf)的概念,以支持网卡(或称网络接口卡、物理网卡或物理网络接口卡)的虚拟化。pf是网卡所支持的一项pci功能,pf可以扩展出若干个vf。vf是支持sriov的网卡所虚拟出的一个实例,网卡中的每个vf配置有进行数据传输的带宽资源,每个vf会经由虚拟机监控器(virtualmachinemonitor,vmm)分配给主机设备上运行的vm使用。网卡内部提供了虚拟交换机功能,并能通过pf/vf提供了带宽限制功能。用户(或管理员)可以根据该带宽限制功能为每个vf分配带宽。现有技术中,由于一个vf对应一个虚拟网络接口卡(virtualnetworkinterfacecard,vnic,简称虚拟网卡),因此,每个vf分配的带宽资源仅能供一个vnic使用,无法在多个vnic之间共享带宽资源。技术实现要素:本申请提供一种用于转发数据包的方法、网卡、主机设备和计算机系统,使得同一vm中的各vnic之间可以共享带宽资源。一方面,本申请提供一种用于转发数据包的方法,所述方法应用于网卡,所述网卡与主机设备相连,所述主机设备包括第一vm(或主机设备上运行着第一vm),所述第一vm包括n个vnic,所述网卡包括分配给所述第一vm的第一vf,n为大于1的整数,所述方法包括:接收所述主机设备发送的映射关系信息,所述映射关系信息用于指示所述第一vf配置的队列中的n对队列与所述n个vnic之间的一一映射关系,所述n对队列中的每对队列用于转发所述每对队列对应的vnic的数据包;将所述映射关系信息记录在所述网卡的转发表中;根据所述转发表中记录的所述映射关系信息,转发所述n个vnic的数据包。通过建立第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,使得n个vnic的数据包均会使用第一vf中的队列进行转发,由于网卡会以vf为单位分配带宽资源,因此,该n个vnic可以共享第一vf的带宽资源。在一种可能的设计中,所述映射关系信息记录了所述n个vnic中的每个vnic的标识,并记录了所述每个vnic对应的vf的标识以及所述每个vnic对应的队列的标识。在一种可能的设计中,所述根据所述转发表中记录的所述映射关系信息,转发所述n个vnic的数据包,包括:接收第一数据包,所述第一数据包是发往所述n个vnic中的第一vnic的数据包,所述第一数据包包括所述第一vnic的标识;根据所述第一vnic的标识,通过查询所述转发表中的所述映射关系信息,确定所述第一vnic对应所述第一vf中的目标接收队列;从所述第一vf的pci内存空间中获取所述目标接收队列的控制信息;根据所述目标接收队列的控制信息,通过所述目标接收队列向所述第一vnic发送所述第一数据包。在一种可能的设计中,所述n个vnic中的每个vnic的标识包括所述每个vnic的mac地址和vlan标识。在一种可能的设计中,所述方法还包括:在所述第一vm启动之前,从所述网卡的pf的驱动接收第一指示信息,所述第一指示信息用于指示所述第一vf需要启用的队列的数量为n;在所述第一vm启动的过程中,向所述第一vf的驱动发送第二指示信息,所述第二指示信息用于指示所述第一vf启用的队列的数量为n,以触发所述第一vf的驱动创建n个vnic。现有技术中,一个vf驱动仅会创建一个vnic,本方案,第一vf的驱动能够根据第一vf启用的队列的数量创建相应数量的vnic,与现有技术相比更加灵活。在一种可能的设计中,所述方法还包括:从所述网卡的pf驱动接收限速策略信息,所述限速策略信息用于指示所述第一vm的所述n个vnic的整体限速策略;根据所述整体限速策略,配置所述第一vf对应的带宽资源。现有技术中,由于一个vf仅对应一个vnic,因此只能制定针对一个vnic的限速策略,本方案中,由于n个vnic共享第一vf的带宽资源,因此可以制定针对n个vnic的整体限速策略,丰富了限速策略的种类。在一种可能的设计中,所述n个vnic为所述第一vm中的全部vnic。通过建立第一vf的队列与第一vm中的全部vnic的对应关系,使得一个vf可以服务于一个vm,该vm中的全部vnic可以共享同一vf的带宽资源。在一种可能的设计中,所述n个vnic为所述第一vm中的全部vnic,所述方法还包括:从所述网卡的pf驱动接收针对第一vm的限速策略信息;根据所述针对第一vm的限速策略信息,配置所述第一vf对应的带宽资源。通过制定针对vm的限速策略信息,进一步丰富了限速策略的种类。另一方面,本申请提供一种用于转发数据包的方法,所述方法应用于主机设备,所述主机设备与网卡相连,所述主机设备包括第一vm,所述第一vm包括n个vnic,所述网卡包括分配给所述第一vm的第一vf,n为大于1的整数,所述方法包括:获取映射关系信息,所述映射关系信息用于指示所述第一vf配置的队列中的n对队列与所述n个vnic之间的一一映射关系,所述n对队列中的每对队列用于转发所述每对队列对应的vnic的数据包;向所述网卡发送所述映射关系信息,以便所述网卡将所述映射关系信息记录在所述网卡的转发表中。通过建立第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,使得n个vnic的数据包均会使用第一vf中的队列进行转发,由于网卡会以vf为单位分配带宽资源,因此,该n个vnic可以共享第一vf的带宽资源。在一种可能的设计中,所述映射关系信息记录了所述n个vnic中的每个vnic的标识,并记录了所述每个vnic对应的vf的标识以及所述每个vnic对应的队列的标识。在一种可能的设计中,所述n个vnic中的每个vnic的标识包括所述每个vnic的mac地址和vlan标识。在一种可能的设计中,所述方法还包括:在所述第一vm启动之前,通过所述网卡的pf的驱动向所述网卡发送第一指示信息,所述第一指示信息用于指示所述第一vf需要启用的队列的数量为n;在所述第一vm启动的过程中,接收所述网卡向所述第一vf的驱动发送的第二指示信息,所述第二指示信息用于指示所述第一vf启用的队列的数量为n,以触发所述第一vf的驱动创建n个vnic。现有技术中,一个vf驱动仅会创建一个vnic,本方案中,第一vf的驱动能够根据第一vf启用的队列的数量创建相应数量的vnic,与现有技术相比更加灵活。在一种可能的设计中,所述方法还包括:通过所述网卡的pf驱动向所述网卡发送限速策略信息,所述限速策略信息用于指示所述第一vm的所述n个vnic的整体限速策略。现有技术中,由于一个vf仅对应一个vnic,因此只能制定针对一个vnic的限速策略,本方案中,由于n个vnic共享第一vf的带宽资源,因此可以制定针对n个vnic的整体限速策略,丰富了限速策略的种类。在一种可能的设计中,所述n个vnic为所述第一vm中的全部vnic。通过建立第一vf的队列与第一vm中的全部vnic的对应关系,使得一个vm中的全部vnic可以共享同一vf的带宽资源。在一种可能的设计中,所述n个vnic为所述第一vm中的全部vnic,所述方法还包括:从所述网卡的pf驱动接收针对第一vm的限速策略信息;根据所述针对第一vm的限速策略信息,配置所述第一vf对应的带宽资源。通过制定针对vm的限速策略信息,进一步丰富了限速策略的种类。另一方面,本申请提供一种网卡,包括用于执行上述某些方面提供的应用于网卡的方法的模块。另一方面,本申请提供一种主机设备,包括用于执行上述某些方面提供的应用于主机设备的方法的模块。另一方面,本申请提供一种网卡,包括存储器和处理器,所述存储器用于存储程序代码,所述处理器用于执行所述存储器中存储的程序代码,以执行上述某些方面提供的应用于网卡的方法对应的操作。另一方面,本申请提供一种主机设备,包括存储器和处理器,所述存储器用于存储程序代码,所述处理器用于执行所述存储器中存储的程序代码,以执行上述某些方面提供的应用于主机设备的方法对应的操作。另一方面,本申请提供一种计算机可读介质,所述计算机可读介质存储用于网卡执行的程序代码,所述程序代码包括用于执行上述某些方面提供的应用于网卡的方法的指令。另一方面,本申请提供一种计算机可读介质,所述计算机可读介质存储用于主机设备执行的程序代码,所述程序代码包括用于执行上述某些方面提供的应用于主机设备的方法的指令。另一方面,本申请提供一种计算机系统,包括上述某些方面提供的网卡和主机设备。综上,本申请通过建立第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,实现了多个vnic之间的带宽资源共享。附图说明图1是虚拟化系统的系统结构示意图。图2是现有的网卡中的vf与vm中的vnic的对应关系示意图。图3是基于队列的数据包存取方式示例图。图4是本发明一个实施例提供的用于转发数据包的方法的示意性流程图。图5是本发明实施例提供的网卡中的vf与vm中的vnic的对应关系示意图。图6是本发明实施例提供的用于转发数据包的方法的流程图。图7是本发明另一实施例提供的用于转发数据包的方法的示意性流程图。图8是本发明一个实施例提供的网卡的示意性结构图。图9是本发明一个实施例提供的主机设备的示意性结构图。图10是本发明一个实施例提供的计算机系统的示意性结构图。图11是本发明另一实施例提供的网卡的示意性结构图。图12是本发明另一实施例提供的主机设备的示意性结构图。图13是本发明另一实施例提供的计算机系统的示意性结构图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。应理解,本文中的网卡均指支持sriov技术的网卡,这样的网卡也可称为sriov网卡。如图1所示,虚拟化系统一般包括管理控制中心110、vmm120、一个或多个vm130和网卡140等。管理控制中心110可以对整个虚拟化系统进行管理和控制,下发各种指令或策略。vmm120可以包括应用程序编程接口(applicationprogramminginterface,api)模块121、虚拟化层122和pf驱动123。用户可以通过虚拟化层122实现vm的创建。进一步地,用户可以通过api模块121与pf驱动交互,调用pf驱动的相关接口以完成vf的创建,并将创建出的vf分配给相应的vm。vm130可以像真正的计算机一样工作,如可以安装应用程序和操作系统。此外,vm130可以包括vf驱动131。vm130可以通过该vf驱动131创建vnic。假设vf驱动131对应网卡140中的vf1,则该vf驱动131创建的vnic的数据包可以通过该vf1对应的带宽资源进行传输。网卡140包含pf和vf。pf是网卡所支持的一项pci功能,pf可以扩展出若干个vf。vf是支持sriov的网卡虚拟出的一个实例(instance),网卡中的每个vf配置有进行数据传输的带宽资源,每个vf会经由vmm分配给主机设备上运行的vm使用。进一步地,网卡140可以包含管理小系统141,可用于与pf驱动和vf驱动进行交互。管理小系统141例如可以是中央处理单元(centralprocessingunit,cpu),或其他类型的处理单元。网卡140还可以包括tx限速模块142,rx限速模块143以及转发模块144。tx限速模块142可以为硬件形式的模块。tx限速模块142可用于对tx方向的流量进行限速,tx方向是指从某个vnic到外界(同一主机设备的其他vnic或其他主机设备)的方向。rx限速模块143可以为硬件形式的模块。rx限速模块143可用于对rx方向的流量进行限速,rx方向是指从外界到某个vnic的方向。转发模块144可以为硬件形式的模块。转发模块144可以包括转发表,网卡可以基于转发模块144中的转发表在不同主机设备或同一主机设备的不同vnic之间转发数据包。需要说明的是,图1中的vmm120和vm130可以运行在与网卡140连接的主机设备中,管理控制中心110可以运行在该主机设备中,也可以运行在其他主机设备中。现有技术中,一般会为一个vm配置(或创建)多个vnic。相应地,网卡会为该多个vnic中的每个vnic配置一个vf。参见图2,vm1配置有vnic1、vnic2和vnic3。相应地,网卡配置有vf1、vf2和vf3,分别与vm1的vnic1、vnic2和vnic3对应。同理,vm2配置有vnic4、vnic5和vnic6,网卡配置了vf4、vf5和vf6,分别与vm2的vnic4、vnic5和vnic6对应。网卡中的每个vf具有独立的pci配置空间(或pcie配置空间)和pci内存空间(pci内存空间也可称为pcie内存空间,或bar空间),vf的pci内存空间存储了队列的控制信息,网卡可以根据该队列的控制信息转发该vf对应的vnic的数据包。以图2中的vf1为例,在创建vf1时,网卡会为vf1配置用于转发vnic1的数据包的一对队列,该对队列包括发送队列(sendingqueue,sq)和接收队列(receivingqueue,rq)。该sq和rq的控制信息会存储在vf1的pci内存空间中。在转发vnic1的数据包的过程中,网卡会从vf1的pci内存空间中获取该sq和rq的控制信息,并基于该sq和rq的控制信息控制vnic1的数据包的转发过程。此外,当需要转发的数据包的数量较多时,队列还可用于缓存待转发的数据包。下面结合图3对vnic1的数据包的转发过程进行详细描述。如图3所示,以sq为例,网卡这一侧主要用于存放sq的控制信息(具体存放在vf的pci内存空间中),sq的控制信息包括基地址(baseaddress),队列的头部(head)地址,尾部(tail)地址以及队列的长度(length)。主机设备这一侧主要用于存放sq和数据包。参见图3,sq中的每个存储单元用于存放一个缓存描述符(bufferdescription,bd)。bd包含数据包的信息,如数据包在主机设备内存中的存储位置、数据包的大小等(图3中的pktbuf表示的是存储数据包的内存,其位置由bd进行描述或指示)。当需要向同一主机设备的其他vm或其他主机设备转发该vf对应的vnic的数据包时,网卡先从vf的pci内存空间中读取sq的控制信息,并根据sq的控制信息从sq的队列头部读取bd。然后,网卡解析该bd以获取待转发的数据包在主机设备内存中的存储位置。接着,网卡以直接内存存取(directmemoryaccess,dma)的方式从内存中获取该待转发的数据包,并将该待转发的数据包转发出去。rq的处理过程与sq的处理过程大致类似,不同之处在于网卡并非以dma方式从主机设备内存中读数据包,而是需要以dma方式将数据包存储至主机设备内存中,并更新rq队列尾部的bd,为避免重复,此处不再详述。现有技术中,网卡会为每个vf配置一对或多对队列,每个vf仅会为一个vnic提供服务,即每个vf的队列仅会用于转发一个vnic的数据包,vf和vnic是一一对应关系。网卡内部提供了虚拟交换机功能,并能通过pf/vf提供了带宽限制功能。用户可以根据该带宽限制功能为每个vf分配带宽资源。带宽是指单位时间内的数据传输量,例如,可以指1秒内能够传输的数据包的个数。每个vf的带宽资源可以指经过每个vf的队列转发的数据包所占的平均带宽、峰值带宽或突发带宽等,以基于令牌桶技术的限速方式为例,每个vf的带宽资源可以通过网卡中的限速模块为每个vf分配的令牌桶的类型和令牌数量进行控制。由于每个vf对应一个vnic,因此,每个vf分配的带宽仅能供一个vnic使用,无法在多个vnic之间共享带宽资源。为了解决上述技术问题,下面结合图4,详细描述本发明的方法实施例。图4是本发明实施例提供的用于转发数据包的方法的示意性流程图。图4的方法可应用于网卡,或图4的方法可以由网卡实现。具体地,该网卡可以与主机设备(例如可以是服务器)相连。该主机设备包括第一vm,第一vm可以包括n个vnic,n为大于1的整数。网卡包括分配给第一vm的第一vf,具体的分配过程可以由主机设备中的vmm实现。应理解,本发明实施例中的网卡(包括网卡或虚拟网卡)也可称为网络接口卡,或网络适配器。图4的方法包括:410、网卡接收主机设备发送的映射关系信息,该映射关系信息用于指示第一vf配置的队列中的n对队列与n个vnic之间的一一映射关系,n对队列中的每对队列用于转发该每对队列对应的vnic的数据包。具体地,如图1所示,映射关系信息可以由位于上层的管理控制中心110生成,并通过主机设备中运行的第一vm的驱动下发给网卡的转发模块144。需要说明的是,在创建第一vf的过程中,网卡会为第一vf配置x对队列(x为不小于n的正整数),本发明实施例可以使能(或启用)该x对队列中的任意n对队列,分别用于转发第一vm的n个vnic的数据包。x表示的是第一vf最大可配置的队列数(即最大可以配置几对队列)。x可以是系统默认值,该系统默认值可以预先存储在如图1所示的管理小系统141中。还需要说明的是,vnic的数据包可以是发往该vnic的数据包,或vnic需要向外转发的数据包。在一些实施例中,vnic的数据包可以是以该vnic的mac地址为目的地址的数据包,和/或以该vnic的mac地址为源地址的数据包。420、网卡将映射关系信息记录在网卡的转发表中。430、网卡根据转发表中记录的该映射关系信息,转发n个vnic的数据包。网卡包含转发表,用于记录映射关系信息,如图1所示,网卡140包括转发模块144,转发模块144基于该转发表中记录的映射关系信息进行数据包的转发。现有技术中,由于一个vf对应一个vnic,该vf的队列仅会用于转发一个vnic的数据包。相比而言,本发明实施例建立了第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,即第一vf的队列可用于转发n个vnic的数据包,进一步地,本发明实施例将映射关系信息存储在网卡的转发表中。按照本发明实施例提供的转发表转发n个vnic的数据包时,该n个vnic的数据包均会使用第一vf中的队列进行转发,由于网卡会以vf为单位分配带宽资源,因此,该n个vnic可以共享第一vf的带宽资源。上述n个vnic可以是第一vm上的部分vnic,也可以是第一vm上的全部vnic,本发明实施例对此不做具体限定。在一些实施例中,n个vnic可以是第一vm上的全部vnic,则第一vf相当于为整个第一vm服务,第一vm中的全部vnic均可共享第一vf的带宽资源。以图5为例,上文中的第一vm可以是图5中的vm1和vm2中的任一个。假设第一vm是vm1,第一vf是图5中的vf1,vm1包括3个vnic,分别是vnic1、vnic2和vnic3。vf1配置有负责转发vnic1的数据包的发送队列sq1和接收队列rq1,负责转发vnic2的数据包的发送队列sq2和接收队列rq2,以及负责转发vnic3的数据包的发送队列sq3和接收队列rq3。这样一来,vf1相当于为整个vm1服务,并非像现有技术那样仅为一个vnic提供服务,因此,vm1的全部3个vnic均可共享vf1的带宽资源。需要说明的是,图5是以一个vf对应一个vm中的全部vnic为例进行举例说明的,但本发明实施例不限于此。在一些实施例中,图5中的vf1可以仅对应vm1的部分vnic,如仅对应于vm1的vnic1和vnic2,这样一来,在建立vf1的队列与vm1的vnic之间的对应关系时,仅需要建立vnic1与sq1/rq1的对应关系,以及vnic2与sq2/rq2的对应关系,无需建立vnic3与sq3/rq3的对应关系。还需要说明的是,图5仅是以vm1(或vm2)包括3个vnic为例进行说明的,实际中,vm1可以包括2个,4个,甚至更多vnic。本发明实施例对上述映射关系信息的内容不做具体限定,只要能够基于该映射关系信息找到待发送或待接收的数据包对应的队列即可。可选地,在一些实施例中,映射关系信息可以记录n个vnic中的每个vnic的标识,并记录每个vnic对应的vf的标识以及每个vnic对应的队列的标识。进一步地,在一些实施例中,n个vnic中的每个vnic的标识可以包括该每个vnic的媒体接入控制(mediaaccesscontrol,mac)地址和虚拟局域网(virtuallocalareanetwork,vlan)标识。在一些实施例中,上述映射关系信息可以采用表的形式实现,此时,映射关系信息也可称为映射关系表。表一是映射关系表的一个示例。表一中的每行记录了vnic的mac地址和vlan标识,并记录了与该vnic的对应的vf的标识,以及该vnic对应的队列(包括发送队列和接收队列)的标识。表一、映射关系信息的示例mac地址vlan标识vf的标识队列标识00:11:22:33:44:5501000:11:22:33:44:6611100:11:22:33:44:7721200:11:22:33:55:5502000:11:22:33:55:66121可选地,在一些实施例中,图4的方法还可包括:在第一vm启动之前,网卡(具体可以是网卡中的管理小系统)从网卡的pf的驱动接收第一指示信息,第一指示信息用于指示第一vf需要启用的队列的数量为n;在第一vm启动的过程中,网卡(具体可以是网卡中的管理小系统)向第一vm中运行的第一vf的驱动发送第二指示信息,第二指示信息用于指示第一vf启用的队列的数量为n,以触发第一vf的驱动创建n个vnic。以图1为例,在第一vm启动之前,用户(或管理员)可以操作管理控制中心110,通过vmm120中的api模块121配置第一vm需要的vnic的数量m(其中m为大于或等于n的正整数)。然后,api模块121可以根据第一vm需要的vnic的数量向网卡中的管理小系统141发送第一指示信息,指示第一vf启用或使能n对队列,n对队列中的每对队列可以对应一个vnic。管理小系统141可以记录第一vf启用的队列数量n。在第一vf的驱动加载的过程中,网卡140中的管理小系统141向第一vf的驱动发送第二指示信息,第一vf的驱动根据第二指示信息创建n个vnic。现有技术中,由于一个vf对应一个vnic,因此,在第一vm启动的过程中,第一vf的驱动直接创建一个vnic即可。与现有技术不同,在本发明实施例中,由于第一vf对应第一vm的多个vnic,因此,在第一vm启动的过程中,第一vf的驱动可以先从网卡(具体可以是网卡中的管理小系统)中获知第一vf启用的队列的数量,从而获知第一vf的驱动需要创建的vnic的数量,然后创建相应数量的vnic。可选地,在一些实施例中,步骤430可包括:接收第一数据包,第一数据包是发往n个vnic中的第一vnic的数据包,第一数据包包括第一vnic的标识;根据第一vnic的标识,通过查询转发表中的映射关系信息,确定第一vnic对应第一vf中的目标接收队列;从第一vf的pci内存空间中获取目标接收队列的控制信息;根据目标接收队列的控制信息,通过所述目标接收队列向第一vnic发送第一数据包(根据队列的控制信息可以以dma的方式将数据包存储到主机设备内存的相应位置,进而实现数据包的收发,具体可以参见图3相关描述,此处不再赘述)。上述映射关系信息可用于同一主机设备内的不同vm之间的数据包交换,也可用于vm与其他主机设备之间的数据包交换。以表一为例,假设网卡接收到数据包1,该数据包1的mac地址为00:11:22:33:55:66,vlan标识为1,则网卡可以通过查询表一,找到与该mac地址和vlan标识对应的vf标识为2(下称vf2),队列标识为1(下称队列1)。然后,网卡可以从vf2的pci内存空间中获取队列1中的rq的控制信息,并根据该rq的控制信息将数据包1转发至队列1对应的vnic。网卡内部的带宽限制功能是针对vf/pf设计的,因此,可以通过调整vf对应的带宽,实现带宽限速功能。如前文所述,在现有技术中,一个vf对应一个vnic,因此,对vf的带宽进行限制相当于对一个vnic的流量进行限速,在这种情况下,云计算厂商也只能提供针对vnic的限速和计费策略,这种限速和计费策略过于单一,无法满足多样化的需求。本发明实施例中,每个vf可以对应一个vm中的多个vnic,因此,对vf的带宽进行限速相当于对vm中的多个vnic的整体流量进行限速。这样一来,云计算厂商就可以制定针对多个vnic整体流量的限速和计费策略,使得限速和计费策略更加灵活和多样化。在一些实施例中,图4的方法还可包括:网卡(具体可以是网卡中的管理小系统)从网卡的pf驱动接收限速策略信息,该限速策略信息可用于指示第一vm的n个vnic的整体限速策略;网卡(具体可以是网卡中的管理小系统)根据整体限速策略,配置第一vf对应的带宽资源。具体地,用户可以在第一vm启动前或启动后,通过操作管理控制中心下发限速策略信息。如图1所示,用户可以通过api模块121将限速策略信息发送至pf驱动123,再通过pf驱动123将限速策略信息发送至管理小系统141。管理小系统141可以保存限速策略信息中的各种配置参数,并通过tx限速模块142和rx限速模块143进行限速。具体的限速方式可以采用令牌桶技术进行限速,如基于双速双桶算法控制硬件形式的tx限速模块和rx限速模块进行限速,基于令牌桶技术的限速方式可以参见现有技术,此处不再详述。本发明实施例对限速策略信息包含的信息类型以及限速策略信息的形式不做具体限定。例如,限速策略信息可以包括针对tx方向的限速策略信息和针对rx方向的限速策略信息中的至少一种。针对tx方向的限速策略信息可包括以下信息中的至少一种:承诺信息率(committedinformationrate,cir)、平均带宽、峰值信息率(peakinformationrate,pir)、峰值带宽、峰值突发尺寸(peakburstsize,pbs)、突发流量等。针对rx方向的限速策略信息可包括以下信息中的至少一种:平均带宽、峰值带宽以及突发带宽。可选地,在一些实施例中,上述n个vnic可以是第一vm中的全部vnic,这样一来,云计算厂商可以制定针对第一vm的整体流量的限速和计费策略。下面结合具体例子,更加详细地描述本发明实施例。应注意,图6的例子仅仅是为了帮助本领域技术人员理解本发明实施例,而非要将本发明实施例限于所例示的具体数值或具体场景。本领域技术人员根据所给出的图6的例子,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本发明实施例的范围内。应理解,图6是以第一vf对应第一vm的全部vnic为例进行举例说明的,但本发明实施例不限于此,第一vf可以对应第一vm的部分vnic。图6是本发明实施例提供的用于转发数据包的方法的示意性流程图。610、在网卡启动的过程中,网卡根据第一vf最多可配置的队列数,为第一vf分配pci内存空间(或称bar空间)。步骤610具体可以由网卡中的pf执行。第一vf可以是网卡中的任意一个vf。第一vf最多可配置的队列数可以是一个默认值。该默认值例如可以由网卡中的管理小系统进行管理和维护。因此,当网卡启动时,可以从该管理小系统中获取该默认值。下文以第一vf最多可配置x对队列为例进行说明。第一vf的pci内存空间可以包括与x对队列一一对应的x个存储区域,其中每个存储区域用于存储一对队列的控制信息。队列的控制信息可以包括队列的基地址、长度、头部地址、尾部地址等。620、主机设备创建第一vm,并将第一vf分配给第一vm。步骤620具体可以由主机设备中的vmm执行。以图1为例,用户(或管理员)可以操作管理控制中心110,使得vmm120中的虚拟化层122创建第一vm,并将第一vf分配给第一vm。630、管理控制中心下发第一vm需要配置的vnic的个数。以图1为例,用户可以操作管理控制中心110,通过api模块121配置第一vm需要的vnic的数量。下文以第一vm需要配置n个vnic为例进行说明,n为不大于x的正整数。api模块121向网卡140中的管理小系统141下发第一指示信息,指示第一vf需要启用的队列数量为n,管理小系统141记录第一vf需要启用的队列数量,并记录第一vf的标识。640、主机设备启动第一vm,加载第一vf的驱动。步骤640具体可以由主机设备中的vmm执行。在第一vf的驱动加载的过程中,第一vf的驱动会与管理小系统进行信息交互,以获取第一vf启用的队列数量,第一vf的驱动可以根据第一vf启用的队列数量,创建相同数量的vnic。650、主机设备将管理控制中心下发的映射关系信息发送至网卡。映射关系信息可以由管理控制中心生成,并通过主机设备(具体可以是运行在第一主机设备上的第一vm的驱动)下发至网卡。映射关系信息可以包括第一vf对应的各虚拟网卡的mac地址、vlan标识、vf标识和队列标识的映射关系(具体参见表一)。网卡可以将该映射关系信息记录在转发表中。660、管理控制中心配置第一vm的限速策略。应理解,本发明实施例对步骤660与步骤610-650的先后顺序不做具体限定。例如,可以在第一vm启动前配置第一vm的限速策略,也可以在第一vm启动之后配置第一vm的限速策略。具体地,如图1所示,用户(或管理员)可以操作管理控制中心,将限速策略信息(指示第一vm的整体限速策略)下发至api模块121,api模块121可以通过pf驱动123将限速策略信息下发至管理小系统141,管理小系统141保存该限速策略信息,并根据限速策略信息,通过网卡140中的tx限速模块142和rx限速模块143,分别对第一vm的tx方向的流量和第一vm的rx方向的流量进行限速,具体的限速方式可以采用令牌桶技术或其他技术实现,本发明实施例对此不做具体限定。现有技术中,一个vf对应一个vnic,因此,用户仅能制定针对vnic的限速策略,本发明实施例中的vf对应vm中的全部vnic,因此,用户可以制定针对vm的限速策略。表二给出了vm的限速策略的示例。表二、vm的限速策略的示例670、网卡根据转发表中记录的映射关系信息和配置的限速策略,转发第一vm中的各vnic的数据包。步骤670具体可以由网卡中的转发模块实现。上述映射关系信息可以记录在转发模块的转发表中。无论是从网络侧接收到的数据包,还是从同一主机设备的不同vm接收到的数据包,均可根据数据包中记录的vnic的mac地址和vlan标识,通过查询该转发表中的映射关系信息查找对应的队列,并将该数据包发送至第一vm中的与该队列对应的vnic。如果未找到对应的队列,可以对该数据包进行广播处理。本发明实施例能够针对vm整体流量进行限速,有利于vm的用户均衡vm的各vnic之间的流量。此外,基于本发明实施例,云提供商可以针对vm整体流量进行计费,丰富了云提供商的计费策略。上文中结合图4-图6,从网卡的角度详细描述了根据本发明实施例的用于转发数据包的方法,下面将结合图7,从与该网卡连接的主机设备的角度描述根据本发明实施例的用于转发数据包的方法。应理解,主机设备侧描述的主机设备和网卡的交互及相关特性、功能等与网卡侧的描述相应,为了简洁,适当省略重复的描述。图7是本发明实施例提供的用于转发数据包的方法的示意性流程图。图7的方法可应用于主机设备,所述主机设备与网卡相连,所述主机设备包括第一vm,所述第一vm包括n个vnic,所述网卡包括分配给所述第一vm的第一vf,n为大于1的整数。图7的方法包括:710、主机设备获取映射关系信息,所述映射关系信息用于指示所述第一vf配置的队列中的n对队列与所述n个vnic之间的一一映射关系,所述n对队列中的每对队列用于转发所述每对队列对应的vnic的数据包。映射关系信息可以由如图1所示的管理控制中心110生成。步骤710具体可包括:从管理控制中心110获取该映射关系信息。720、主机设备向所述网卡发送所述映射关系信息,以便网卡将所述映射关系信息记录在网卡的转发表中。可选地,在一些实施例中,所述映射关系信息记录了所述n个vnic中的每个vnic的标识,并记录了所述每个vnic对应的vf的标识以及所述每个vnic对应的队列的标识。可选地,在一些实施例中,所述n个vnic中的每个vnic的标识包括所述每个vnic的mac地址和vlan标识。可选地,在一些实施例中,图7的方法还可包括:在所述第一vm启动之前,通过所述网卡的pf的驱动向所述网卡发送第一指示信息,所述第一指示信息用于指示所述第一vf需要启用的队列的数量为n;在所述第一vm启动的过程中,接收所述网卡向所述第一vf的驱动发送的第二指示信息,所述第二指示信息用于指示所述第一vf启用的队列的数量为n,以触发所述第一vf的驱动创建n个vnic。可选地,在一些实施例中,图7的方法还可包括:通过所述网卡的pf驱动向所述网卡发送限速策略信息,所述限速策略信息用于指示所述第一vm的所述n个vnic的整体限速策略。下面对本发明的装置实施例进行描述,由于装置实施例可以执行上述方法,因此未详细描述的部分可以参见前面各方法实施例。图8是本发明实施例提供的网卡的示意性结构图。图8的网卡800与主机设备相连,所述主机设备包括第一vm,所述第一vm包括n个vnic,所述网卡800包括分配给所述第一vm的第一vf,n为大于1的整数,所述网卡800包括:第一接收模块810,用于接收所述主机设备发送的映射关系信息,所述映射关系信息用于指示所述第一vf配置的队列中的n对队列与所述n个vnic之间的一一映射关系,所述n对队列中的每对队列用于转发所述每对队列对应的vnic的数据包;记录模块820,用于将所述映射关系信息记录在所述网卡800的转发表中;转发模块830,用于根据所述转发表中记录的所述映射关系信息,转发所述n个vnic的数据包。本发明实施例通过建立第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,使得n个vnic的数据包均会使用第一vf中的队列进行转发,由于网卡会以vf为单位分配带宽资源,因此,该n个vnic可以共享第一vf的带宽资源。可选地,在一些实施例中,所述映射关系信息可以记录所述n个vnic中的每个vnic的标识,并可以记录所述每个vnic对应的vf的标识以及所述每个vnic对应的队列的标识。可选地,在一些实施例中,所述转发模块830可具体用于接收第一数据包,所述第一数据包是发往所述n个vnic中的第一vnic的数据包,所述第一数据包包括所述第一vnic的标识;根据所述第一vnic的标识,通过查询所述转发表中的所述映射关系信息,确定所述第一vnic对应所述第一vf中的目标接收队列;从所述第一vf的pci内存空间中获取所述目标接收队列的控制信息;根据所述目标接收队列的控制信息,通过所述目标接收队列向所述第一vnic发送所述第一数据包。可选地,在一些实施例中,所述n个vnic中的每个vnic的标识可以包括所述每个vnic的mac地址和vlan标识。可选地,在一些实施例中,所述网卡800还可包括:第二接收模块,用于在所述第一vm启动之前,从所述网卡800的pf的驱动接收第一指示信息,所述第一指示信息用于指示所述第一vf需要启用的队列的数量为n;发送模块,用于在所述第一vm启动的过程中,向所述第一vf的驱动发送第二指示信息,所述第二指示信息用于指示所述第一vf启用的队列的数量为n,以触发所述第一vf的驱动创建n个vnic。可选地,在一些实施例中,所述网卡800还可包括:第三接收模块,用于从所述网卡800的pf驱动接收限速策略信息,所述限速策略信息用于指示所述第一vm的所述n个vnic的整体限速策略;配置模块,用于根据所述整体限速策略,配置所述第一vf对应的带宽资源。图9是本发明实施例提供的主机设备的示意性结构图。图9的主机设备900与网卡相连,所述主机设备900包括第一vm,所述第一vm包括n个vnic,所述网卡包括分配给所述第一vm的第一vf,n为大于1的整数,所述主机设备900包括:获取模块910,用于获取映射关系信息,所述映射关系信息用于指示所述第一vf配置的队列中的n对队列与所述n个vnic之间的一一映射关系,所述n对队列中的每对队列用于转发所述每对队列对应的vnic的数据包;第一发送模块920,用于向所述网卡发送所述映射关系信息,以便所述网卡将所述映射关系信息记录在所述网卡的转发表中。本发明实施例通过建立第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,使得n个vnic的数据包均会使用第一vf中的队列进行转发,由于网卡会以vf为单位分配带宽资源,因此,该n个vnic可以共享第一vf的带宽资源。可选地,在一些实施例中,所述映射关系信息可以记录所述n个vnic中的每个vnic的标识,并可以记录所述每个vnic对应的vf的标识以及所述每个vnic对应的队列的标识。可选地,在一些实施例中,所述n个vnic中的每个vnic的标识可以包括所述每个vnic的mac地址和vlan标识。可选地,在一些实施例中,所述主机设备900还可包括:第二发送模块,用于在所述第一vm启动之前,通过所述网卡的pf的驱动向所述网卡发送第一指示信息,所述第一指示信息用于指示所述第一vf需要启用的队列的数量为n;接收模块,用于在所述第一vm启动的过程中,接收所述网卡向所述第一vf的驱动发送的第二指示信息,所述第二指示信息用于指示所述第一vf启用的队列的数量为n,以触发所述第一vf的驱动创建n个vnic。可选地,在一些实施例中,所述主机设备900还可包括:第三发送模块,用于通过所述网卡的pf驱动向所述网卡发送限速策略信息,所述限速策略信息用于指示所述第一vm的所述n个vnic的整体限速策略。图10是本发明实施例提供的计算机系统的示意性结构图,图10的计算机系统1000包括如图8所述的网卡800以及如图9所述的主机设备900。图11是本发明实施例提供的网卡的示意性结构图。图11的网卡1100与主机设备相连,所述主机设备包括第一vm,所述第一vm包括n个vnic,所述网卡1100包括分配给所述第一vm的第一vf,n为大于1的整数,所述网卡1100包括:存储器1110,用于存储程序代码;处理器1120,用于执行存储器1110中存储的程序代码,以执行以下操作:接收所述主机设备发送的映射关系信息,所述映射关系信息用于指示所述第一vf配置的队列中的n对队列与所述n个vnic之间的一一映射关系,所述n对队列中的每对队列用于转发所述每对队列对应的vnic的数据包;将所述映射关系信息记录在所述网卡1100的转发表中;根据所述转发表中记录的所述映射关系信息,转发所述n个vnic的数据包。本发明实施例通过建立第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,使得n个vnic的数据包均会使用第一vf中的队列进行转发,由于网卡会以vf为单位分配带宽资源,因此,该n个vnic可以共享第一vf的带宽资源。可选地,在一些实施例中,所述映射关系信息可以记录所述n个vnic中的每个vnic的标识,并可以记录所述每个vnic对应的vf的标识以及所述每个vnic对应的队列的标识。可选地,在一些实施例中,所述根据所述转发表中记录的所述映射关系信息,转发所述n个vnic的数据包可包括:接收第一数据包,所述第一数据包是发往所述n个vnic中的第一vnic的数据包,所述第一数据包包括所述第一vnic的标识;根据所述第一vnic的标识,通过查询所述转发表中的所述映射关系信息,确定所述第一vnic对应所述第一vf中的目标接收队列;从所述第一vf的pci内存空间中获取所述目标接收队列的控制信息;根据所述目标接收队列的控制信息,通过所述目标接收队列向所述第一vnic发送所述第一数据包。可选地,在一些实施例中,所述n个vnic中的每个vnic的标识可以包括所述每个vnic的mac地址和vlan标识。可选地,在一些实施例中,所述处理器1120还可用于执行以下操作:在所述第一vm启动之前,从所述网卡1100的pf的驱动接收第一指示信息,所述第一指示信息用于指示所述第一vf需要启用的队列的数量为n;在所述第一vm启动的过程中,向所述第一vf的驱动发送第二指示信息,所述第二指示信息用于指示所述第一vf启用的队列的数量为n,以触发所述第一vf的驱动创建n个vnic。可选地,在一些实施例中,所述处理器1120还可用于执行以下操作:从所述网卡1100的pf驱动接收限速策略信息,所述限速策略信息用于指示所述第一vm的所述n个vnic的整体限速策略;根据所述整体限速策略,配置所述第一vf对应的带宽资源。图12是本发明实施例提供的主机设备的示意性结构图。图12的主机设备1200与网卡相连,所述主机设备1200包括第一vm,所述第一vm包括n个vnic,所述网卡包括分配给所述第一vm的第一vf,n为大于1的整数,所述主机设备1200包括:存储器1210,用于存储程序代码;处理器1220,用于执行存储器1210中存储的程序代码,以执行以下操作:获取映射关系信息,所述映射关系信息用于指示所述第一vf配置的队列中的n对队列与所述n个vnic之间的一一映射关系,所述n对队列中的每对队列用于转发所述每对队列对应的vnic的数据包;向所述网卡发送所述映射关系信息,以便所述网卡将所述映射关系信息记录在所述网卡的转发表中。本发明实施例通过建立第一vf的n对队列和第一vm的n个vnic之间的一一映射关系,使得n个vnic的数据包均会使用第一vf中的队列进行转发,由于网卡会以vf为单位分配带宽资源,因此,该n个vnic可以共享第一vf的带宽资源。可选地,在一些实施例中,所述映射关系信息可以记录所述n个vnic中的每个vnic的标识,并可以记录所述每个vnic对应的vf的标识以及所述每个vnic对应的队列的标识。可选地,在一些实施例中,所述n个vnic中的每个vnic的标识可以包括所述每个vnic的mac地址和vlan标识。可选地,在一些实施例中,所述处理器1220还可用于执行以下操作:在所述第一vm启动之前,通过所述网卡的物理功能pf的驱动向所述网卡发送第一指示信息,所述第一指示信息用于指示所述第一vf需要启用的队列的数量为n;在所述第一vm启动的过程中,接收所述网卡向所述第一vf的驱动发送的第二指示信息,所述第二指示信息用于指示所述第一vf启用的队列的数量为n,以触发所述第一vf的驱动创建n个vnic。可选地,在一些实施例中,所述处理器1220还可用于执行以下操作:通过所述网卡的pf驱动向所述网卡发送限速策略信息,所述限速策略信息用于指示所述第一vm的所述n个vnic的整体限速策略。图13是本发明实施例提供的计算机系统的示意性结构图。图13的计算机系统1300包括如图11所述的网卡1100以及如图12所述的主机设备1200。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1