首页 / 专利库 / 电脑零配件 / 计算机系统 / 硬件 / 主板 / 网络适配器 / 报文转发的方法、计算机设备和中间设备

报文转发的方法、计算机设备和中间设备

阅读:232发布:2020-05-11

专利汇可以提供报文转发的方法、计算机设备和中间设备专利检索,专利查询,专利分析的服务。并且一种报文转发的方法、计算机设备和中间设备。所述计算机设备中的中间设备,包括支持SR-IOV的第一代理单元和支持Virtio的第二代理单元,且所述第一代理单元和所述第二代理单元分别是 网络适配器 中功能单元的代理。这样,计算机设备中的 虚拟机 既可以采用SR-IOV技术,也可以采用Virtio技术,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一。同时,中间设备通过 硬件 实现,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于 软件 实现的转发方式,还能够减少对所述第一CPU资源的占用,提升所述第一CPU资源的利用率。,下面是报文转发的方法、计算机设备和中间设备专利的具体信息内容。

1.一种计算机设备,其特征在于,所述计算机设备包括第一中央处理器CPU、中间设备、网络适配器和总线,所述中间设备通过所述总线分别与所述第一CPU和所述网络适配器连接,所述第一CPU支持运行第一虚拟机,所述网络适配器包括多个基于虚拟化技术产生的功能单元;
所述第一CPU,用于通过枚举所述中间设备,获取所述中间设备中支持单根输入输出虚拟化SR-IOV的第一代理单元的信息和支持Virtio的第二代理单元的信息,分别为所述第一代理单元和所述第二代理单元分配地址信息;其中,所述第一代理单元是所述网络适配器中的第一功能单元的代理,所述第二代理单元是所述网络适配器中的第二功能单元的代理,所述第一功能单元与所述第二功能单元是所述网络适配器中的同一功能单元或不同的功能单元;
所述中间设备,用于通过枚举所述网络适配器,为所述网络适配器中的第一功能单元和第二功能单元分配地址信息,建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系,以及建立所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;当所述第一虚拟机采用SR-IOV技术时,所述中间设备用于根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发;当所述第一虚拟机采用Virtio技术时,所述中间设备用于根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发。
2.根据权利要求1所述的计算机设备,其特征在于,所述中间设备包括第一端点端口,所述中间设备通过所述第一端点端口与所述第一CPU连接,所述第一端点端口包括第一交换设备,第一子端点端口和第二子端点端口,所述第一子端点端口和所述第二子端点端口分别与所述第一交换设备的下行端口连接;
所述第一CPU还用于通过枚举获取所述第一交换设备的信息,并通过枚举所述第一子端点端口获取所述第一代理单元的信息,通过枚举所述第二子端点端口获取所述第二代理单元的信息。
3.根据权利要求2所述的计算机设备,其特征在于,
所述第一交换设备,用于接收所述第一虚拟机发送的第一报文,根据所述第一报文中的地址信息,从所述第一子端点端口和所述第二子端点端口中选择一个以转发所述第一报文。
4.根据权利要求1-3任意一项所述的计算机设备,其特征在于,所述中间设备还包括通道控制模
所述通道控制模块,用于实现所述网络适配器向所述第一虚拟机发送第二报文时转发路径的控制;
当所述第一虚拟机采用SR-IOV技术时,所述通道控制模块将包含所述第一子端点端口的路径确定为转发所述第二报文的路径;当所述第一虚拟机采用Virtio技术时,所述通道控制模块将包含所述第二子端点端口的路径确定为转发所述第二报文的路径。
5.根据权利要求1-4任意一项所述的计算机设备,其特征在于,所述中间设备还包括转换模块;
所述转换模块,用于将采用Virtio技术的第一虚拟机发送的报文,转换为所述中间设备与所述网络适配器之间转发协议的报文,或将所述网络适配器向采用Virtio技术的第一虚拟机发送的报文转换为支持Virtio协议的报文。
6.根据权利要求1-5任意一项所述的计算机设备,其特征在于,所述计算机设备还包括第二CPU,所述第二CPU支持运行第二虚拟机;
所述第二CPU通过所述总线分别与所述第一CPU和所述中间设备连接;
所述第二CPU,用于通过枚举所述中间设备,获取所述中间设备中支持SR-IOV的第三代理单元的信息和支持Virtio的第四代理单元的信息,分别为所述第三代理单元和所述第四代理单元分配地址信息;其中,所述第三代理单元是所述网络适配器中的第三功能单元的代理,所述第四代理单元分别是所述网络适配器中的第四功能单元的代理,所述第三功能单元与所述第四功能单元是所述网络适配器中的同一功能单元或不同的功能单元;
所述中间设备,还用于为所述网络适配器中的第三功能单元和第四功能单元分配地址信息,建立所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系,以及建立所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系;
当所述第二虚拟机采用SR-IOV技术时,所述中间设备用于根据所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系实现所述第二虚拟机与所述网络适配器之间的报文转发;当所述第二虚拟机采用Virtio技术时,所述中间设备用于根据所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系实现所述第二虚拟机与所述网络适配器之间的报文转发。
7.根据权利要求2-6中任意一项所述的计算机设备,其特征在于:
所述中间设备还用于根据所述第一功能单元的信息,在所述第一子端点端口中配置所述第一代理单元的信息,在所述第二子端点端口中配置所述第二代理单元的信息。
8.根据权利要求1-7中任意一项所述的计算机设备,其特征在于,所述第一功能单元的地址信息包括所述第一功能单元的总线设备功能BDF信息和所述第一功能单元的基地址寄存器Bar空间地址信息;
所述第二功能单元的地址信息包括所述第二功能单元的总线设备功能BDF信息和所述第二功能单元的基地址寄存器Bar空间地址信息;
所述第一代理单元的地址信息包括所述第一代理单元的BDF信息和所述第一代理单元的Bar空间地址信息;
所述第二代理单元的地址信息包括所述第二代理单元的BDF信息和所述第二代理单元的Bar空间地址信息。
9.根据权利要求1-8中任意一项所述的计算机设备,其特征在于,所述网络适配器支持SR-IOV功能,所述第一功能单元包括第一物理功能或第一虚拟功能。
10.一种中间设备,其特征在于,所述中间设备通过总线与计算机设备中的第一中央处理器CPU和网络适配器连接,所述第一CPU支持运行第一虚拟机,所述中间设备包括控制器存储器
所述控制器,用于获取所述网络适配器中第一功能单元的信息和第二功能单元的信息,分别为所述第一功能单元和所述第二功能单元分配地址,获取第一代理单元的地址信息和第二代理单元的地址信息,并建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;其中,所述第一功能单元和所述第二功能单元,为所述网络适配器中基于虚拟化技术产生的同一功能单元或不同的功能单元,所述第一代理单元支持单根输入输出虚拟化SR-IOV技术且是所述第一功能单元的代理,所述第二代理单元支持Virtio技术且是所述第二功能单元的代理;
所述存储器,用于存储所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;
所述控制器,还用于当所述第一虚拟机采用SR-IOV技术时,根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发;当所述第一虚拟机采用Virtio技术时,根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发。
11.根据权利要求10所述的中间设备,其特征在于,所述中间设备还包括第一端点端口,所述中间设备通过所述第一端点端口与所述第一CPU连接,所述第一端点端口包括第一交换设备,第一子端点端口和第二子端点端口,所述第一子端点端口和所述第二子端点端口分别与所述第一交换设备的下行端口连接;
所述第一子端点端口包含所述第一代理单元的信息,所述第二子端点端口包含所述第二代理单元的信息。
12.根据权利要求11所述的中间设备,其特征在于,
所述第一交换设备,用于接收所述第一虚拟机发送的第一报文,根据所述第一报文中的地址信息,从所述第一子端点端口和所述第二子端点端口中选择一个以转发所述第一报文。
13.根据权利要求10-12任意一项所述的中间设备,其特征在于,所述中间设备还包括通道控制模块;
所述通道控制模块,用于实现所述网络适配器向所述第一虚拟机发送第二报文时转发路径的控制;
当所述第一虚拟机采用SR-IOV技术时,所述通道控制模块将包含所述第一子端点端口的路径确定为转发所述第二报文的路径;当所述第一虚拟机采用Virtio技术时,所述通道控制模块将包含所述第二子端点端口的路径确定为转发所述第二报文的路径。
14.根据权利要求10-13任意一项所述的中间设备,其特征在于,所述中间设备还包括转换模块;
所述转换模块,用于将采用Virtio技术的第一虚拟机发送的报文,转换为所述中间设备与所述网络适配器之间转发协议的报文,或将所述网络适配器向采用Virtio技术的第一虚拟机发送的报文转换为支持Virtio协议的报文。
15.根据权利要求11-14中任意一项所述的中间设备,其特征在于:
所述中间设备还用于根据所述第一功能单元的信息,在所述第一子端点端口中配置所述第一代理单元的信息,在所述第二子端点端口中配置所述第二代理单元的信息。
16.根据权利要求10-15中任意一项所述的中间设备,其特征在于,所述第一功能单元的地址信息包括所述第一功能单元的总线设备功能BDF信息和所述第一功能单元的基地址寄存器Bar空间地址信息;
所述第二功能单元的地址信息包括所述第二功能单元的总线设备功能BDF信息和所述第二功能单元的基地址寄存器Bar空间地址信息;
所述第一代理单元的地址信息包括所述第一代理单元的BDF信息和所述第一代理单元的Bar空间地址信息;
所述第二代理单元的地址信息包括所述第二代理单元的BDF信息和所述第二代理单元的Bar空间地址信息。
17.一种报文转发的方法,其特征在于,所述方法包括:
获取网络适配器中第一功能单元和第二功能单元的信息,分别为所述第一功能单元和所述第二功能单元分配地址;
获取第一代理单元的地址信息和第二代理单元的地址信息,并建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;其中,所述第一功能单元和所述第二功能单元,为所述网络适配器中基于虚拟化技术产生的同一功能单元或不同的功能单元,所述第一代理单元支持单根输入输出虚拟化SR-IOV技术且是所述第一功能单元的代理,所述第二代理单元支持Virtio技术且是所述第二功能单元的代理,所述网络适配器是虚拟机与网络实现报文转发的设备;
当所述虚拟机采用SR-IOV技术时,根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述虚拟机与所述网络适配器之间的报文转发;当所述虚拟机采用Virtio技术时,根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述虚拟机与所述网络适配器之间的报文转发。
18.根据权利要求17所述的方法,其特征在于,所述获取网络适配器中功能单元的信息包括:
通过枚举所述网络适配器,获取所述网络适配器中所述第一功能单元的信息和所述第二功能单元的信息。
19.根据权利要求17或18所述的方法,其特征在于,所述方法还包括:
根据所述第一功能单元的信息和所述第二功能单元的信息,在不同的子端点端口中分别配置所述第一代理单元的信息和所述第二代理单元的信息。
20.根据权利要求19所述的方法,其特征在于,所述地址信息包括总线设备功能BDF信息和基地址寄存器Bar空间地址信息。
21.一种计算机设备,其特征在于,所述计算机设备包括第一中央处理器CPU、中间设备、网络适配器和总线,所述中间设备通过所述总线分别与所述第一CPU和所述网络适配器连接,所述第一CPU支持运行第一虚拟机,所述第一虚拟机支持单根输入输出虚拟化SR-IOV技术或所述第一虚拟机支持Virtio技术;
所述中间设备,用于接收所述第一虚拟机发送的第一报文,并将所述第一报文转发给所述网络适配器;或,
所述中间设备,用于接收所述网络适配器发送的第二报文,并将所述第二报文转发给所述所述第一虚拟机。
22.根据权利要求1所述的计算机设备,其特征在于,所述计算机设备还包括第二CPU,所述中间设备通过所述总线分别与所述第二CPU和所述网络适配器连接,所述第二CPU支持运行第二虚拟机,所述第二虚拟机支持单根输入输出虚拟化SR-IOV技术或所述第二虚拟机支持Virtio技术;
所述中间设备,用于接收所述第二虚拟机发送的第三报文,并将所述第三报文转发给所述网络适配器;或,
所述中间设备,用于接收所述网络适配器发送的第四报文,并将所述第四报文转发给所述所述第二虚拟机。
23.一种中间设备,其特征在于,所述中间设备通过总线与计算机设备中的第一中央处理器CPU和网络适配器连接,所述第一CPU支持运行第一虚拟机,所述第一虚拟机支持单根输入输出虚拟化SR-IOV技术或所述第一虚拟机支持Virtio技术,所述中间设备包括控制器和存储器;
所述存储器,用于存储实现报文转发的地址对应关系;
所述控制器,用于接收所述第一虚拟机发送的第一报文,并根据所述地址对应关系将所述第一报文转发给所述网络适配器;或用于接收所述网络适配器发送的第二报文,并根据所述地址对应关系将所述第二报文转发给所述所述第一虚拟机。

说明书全文

报文转发的方法、计算机设备和中间设备

技术领域

[0001] 本申请涉及信息技术领域,特别涉及一种实现报文转发的方法、计算机设备和中间设备。

背景技术

[0002] 随着多核处理器、虚拟化技术、分布式存储等技术的兴起,产生了一种新型的计算模式—计算。云计算是一种基于网络的、可配置的共享计算资源池。因此,虚拟化技术成为云计算的一个重要技术特点,虚拟化包括资源虚拟化和应用虚拟化。
[0003] 云计算中虚拟机的规格由多个维度决定,比如超分比设置、中央处理器(central processing unit,CPU)/内存比、CPU选型、内存配置、本地磁盘配置、异构场景等。根据不同维度的需求,可以通过排列组合建立各种资源池,并按照客户需求调用各种资源池为客户服务。每种资源池都会预留一部分资源用于客户的扩容,资源池过多时,会造成投资的浪费;并且,各种资源池的运维管理也会比较复杂。因此,资源池的归一是云计算技术的发展趋势。
[0004] 在云网络中,智能网卡应用越来越广泛。智能网卡能够协助服务器的CPU处理网络负载,将网络虚拟化、负载均衡以及一些管理功能从服务器的CPU中卸载下来,以使服务器的CPU为虚拟机应用提供更大的处理能
[0005] 智能网卡主流的虚拟化技术有两种,一种是virtio技术,另一种是单根输入输出虚拟化(single-root I/O virtualization,SR-IOV)技术。通过SR-IOV技术,智能网卡可以通过PCIe的扩展配置空间虚拟化出多个虚拟功能,并通过直通的方式呈现给虚拟机,具有高性能、功能丰富的特点。但缺点也很明显,比如热迁移不方便,不同厂家提供的虚拟功能接口不一致,需要额外的驱动等等。virtio技术作为业界比较通用的虚拟化接口可以解决如上问题,但目前virtio技术都是使用软件模拟实现方式,网络性能不是很好。发明内容
[0006] 本申请实施例提供一种报文转发的方法、计算机设备和中间设备,以提升设备的IO性能和资源利用率。
[0007] 第一方面,本申请实施例提供了一种计算机设备,所述计算机设备包括第一CPU、中间设备、网络适配器和总线,所述中间设备通过所述总线分别与所述第一CPU和所述网络适配器连接,所述第一CPU支持运行第一虚拟机,所述网络适配器包括多个基于虚拟化技术产生的功能单元;
[0008] 所述第一CPU,用于通过枚举所述中间设备,获取所述中间设备中支持SR-IOV的第一代理单元的信息和支持Virtio的第二代理单元的信息,分别为所述第一代理单元和所述第二代理单元分配地址信息;其中,所述第一代理单元是所述网络适配器中的第一功能单元的代理,所述第二代理单元是所述网络适配器中的第二功能单元的代理,所述第一功能单元与所述第二功能单元是所述网络适配器中的同一功能单元或不同的功能单元;
[0009] 所述中间设备,用于通过枚举所述网络适配器,为所述网络适配器中的第一功能单元和第二功能单元分配地址信息,建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系,以及建立所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;当所述第一虚拟机采用SR-IOV技术时,所述中间设备用于根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发;当所述第一虚拟机采用Virtio技术时,所述中间设备用于根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发。
[0010] 上述计算机设备中的中间设备能够包括支持SR-IOV的第一代理单元和支持Virtio的第二代理单元,且所述第一代理单元是所述第一功能单元的代理,所述第二代理单元是所述第二功能单元的代理,所述第一功能单元与所述第二功能单元是所述网络适配器中的同一功能单元或不同的功能单元。这样,第一虚拟机既可以采用SR-IOV技术,也可以采用Virtio技术,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一。同时,中间设备分别与所述第一CPU和网络适配器通过总线连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对所述第一CPU资源的占用,提升所述第一CPU资源的利用率。
[0011] 可选的,所述中间设备可以通过现场可编程阵列(field programmable gate array,FPGA)、专用集成电路(application-specific integrated circuit,ASIC)或FPGA+ASIC等设备实现。
[0012] 可选的,所述报文包括数据报文或命令报文。所述数据报文包括但不限于需要读写的数据,所述命令报文包括但不限于需要发送的控制命令或控制消息。
[0013] 可选的,所述总线可以是快捷外围部件互连标准(Peripheral Component Interconnect Express,PCIe)总线或超级通道互联(Ultra Path Interconnect,UPI)总线。当所述总线是PCIe总线时,所述中间设备作为PCIe的根节点,通过PCIe枚举发现所述网络适配器,并获取所述网络适配器中功能单元的信息。所述功能单元用于实现所述网络适配器的功能,所述功能单元可以包括物理功能(physical function,PF)PF或虚拟功能(virtual function,VF)。
[0014] 可选的,所述第一功能单元或所述第二功能单元是所述网络适配器包括的多个基于虚拟化技术产生的功能单元中的一个。
[0015] 可选的,所述第一功能单元与所述第二功能单元可以是所述网络适配器中的同一个VF,也可以是不同的VF。或者,所述第一功能单元与所述第二功能单元可以是所述网络适配器中的同一个PF,也可以是不同的PF。
[0016] 可选的,所述支持SR-IOV的第一代理单元是所述第一功能单元的代理,即所述第一代理单元是所述中间设备中用于代理所述第一功能单元的功能的单元。例如,当所述第一功能单元是PF时,所述第一代理单元是所述PF的代理单元;当所述第一功能单元是VF时,所述第一代理单元是所述VF的代理单元。
[0017] 可选的,所述支持Virtio的第二代理单元是所述第二功能单元的代理,即所述第二代理单元是所述中间设备中用于代理所述第二功能单元的功能的单元。例如,当所述第二功能单元是PF时,所述第二代理单元是所述PF的代理单元;当所述第二功能单元是VF时,所述第二代理单元是所述VF的代理单元。
[0018] 可选的,所述支持SR-IOV的第一代理单元是所述中间设备中包括的多个功能单元中的一个,所述第一代理单元用于实现支持SR-IOV的网络适配器的功能。所述第一代理单元的信息是用于标识所述第一代理单元的信息。所述用于标识所述第一代理单元的信息,可以存储在所述中间设备的端点端口的寄存器中。所述第一CPU在通过PCIe枚举所述中间设备时,通过获取所述第一子端点端口的寄存器中的信息,获取所述第一代理单元的信息。可选的,所述第一子端点端口的寄存器中存储的是作为代理单元的PFA’的信息。
[0019] 可选的,所述支持Virtio的第二代理单元是所述中间设备中包括的多个功能单元中的一个,所述第二代理单元用于实现支持Virtio的网络适配器的功能。所述第二代理单元的信息是用于标识所述第二代理单元的信息。所述用于标识所述第二代理单元的信息,可以存储在所述中间设备的第二子端点端口的寄存器中。所述第一CPU在通过PCIe枚举所述中间设备时,通过获取所述第二子端点端口的寄存器中的信息,获取所述第一代理单元的信息。可选的,所述端点端口的寄存器中存储的是作为代理单元的PFB’的信息。
[0020] 可选的,所述中间设备还用于存储所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系,以及存储所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系。
[0021] 当所述总线是PCIe总线时,所述第一CPU作为PCIe的根节点,通过PCIe枚举发现所述中间设备,并获取所述中间设备中所述第一代理单元的信息和第二代理单元的信息。所述第一CPU在PCIe枚举中发现中间设备中的所述第一代理单元信息后,为发现的所述第一代理单元分配地址信息,分配的地址信息包括但不限于分配总线设备功能(Bus Device Function,BDF)和基地址寄存器(base address register,Bar)空间地址信息。并且,所述第一CPU在PCIe枚举中发现中间设备中的所述第二代理单元信息后,为发现的所述第二代理单元分配地址信息,分配的地址信息包括但不限于分配BDF和Bar空间地址信息。
[0022] 可选的,所述第一虚拟机可以被配置为采用SR-IOV技术,也可以被配置为采用Virtio技术。所述第一虚拟机具体被配置为哪种虚拟化技术,可以是所述计算机设备中的功能单元(例如虚拟机管理器)根据接收到的用户的配置指令配置的。可以理解,在同一时刻,所述第一虚拟机只支持一种虚拟化技术。在一种可能的设计中,所述中间设备还包括第一端点端口,所述中间设备通过所述第一端点端口与所述第一CPU连接,所述第一端点端口包括第一交换设备,第一子端点端口和第二子端点端口,所述第一子端点端口和所述第二子端点端口分别与所述第一交换设备的下行端口连接;
[0023] 所述第一CPU还用于通过枚举获取所述第一交换设备的信息,并通过枚举所述第一子端点端口获取所述第一代理单元的信息,通过枚举所述第二子端点端口获取所述第二代理单元的信息。
[0024] 可选的,所述第一交换设备可以是PCIe switch,所述PCIe switch的配置空间中记录有所述第一CPU通过枚举分配的第一代理单元的地址信息,以及所述第一CPU通过枚举分配的第二代理单元的地址信息。这样,所述PCIe switch能够根据记录的地址信息,转发所述第一虚拟机收发的报文。
[0025] 在一种可能的设计中,所述第一交换设备,用于接收所述第一虚拟机发送的第一报文,根据所述第一报文中的地址信息,从所述第一子端点端口和所述第二子端点端口中选择一个以转发所述第一报文。
[0026] 在一种可能的设计中,所述中间设备还包括通道控制模
[0027] 所述通道控制模块,用于实现所述网络适配器向所述第一虚拟机发送第二报文时转发路径的控制;
[0028] 当所述第一虚拟机采用SR-IOV技术时,所述通道控制模块将包含所述第一子端点端口的路径确定为转发所述第二报文的路径;当所述第一虚拟机采用Virtio技术时,所述通道控制模块将包含所述第二子端点端口的路径确定为转发所述第二报文的路径。
[0029] 可选的,所述通道控制模块,可以通过通道控制寄存器实现。所述通道控制寄存器可以是所述中间设备中Bar空间中的寄存器,例如可以是所述第一子端点端口的Bar空间中的寄存器,也可以是所述第二子端点端口的Bar空间中的寄存器。
[0030] 在一种可能的设计中,所述交换设备还包括转换模块;
[0031] 所述转换模块,用于将采用Virtio技术的第一虚拟机发送的报文,转换为所述中间设备与所述网络适配器之间转发协议的报文,或将所述网络适配器向采用Virtio技术的第一虚拟机发送的报文转换为支持Virtio协议的报文。
[0032] 可选的,所述中间设备与所述网络适配器之间的转发协议的报文,可以是普通直接内存访问(direct memory access,DMA)命令的报文,也可以是非易失性高速传输总线(non-volatile memory express,NVMe)的报文。
[0033] 通过所述中间设备中的转换模块,能够实现能够实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0034] 在一种可能的设计中,所述计算机设备还包括第二CPU,所述第二CPU支持运行第二虚拟机;
[0035] 所述第二CPU通过所述总线分别与所述第一CPU和所述中间设备连接;
[0036] 所述第二CPU,用于通过枚举所述中间设备,获取所述中间设备中支持SR-IOV的第三代理单元的信息和支持Virtio的第四代理单元的信息,分别为所述第三代理单元和所述第四代理单元分配地址信息;其中,所述第三代理单元是所述网络适配器中的第三功能单元的代理,所述第四代理单元分别是所述网络适配器中的第四功能单元的代理,所述第三功能单元与所述第四功能单元是所述网络适配器中的同一功能单元或不同的功能单元;
[0037] 所述中间设备,还用于为所述网络适配器中的第三功能单元和第四功能单元分配地址信息;建立所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系,以及建立所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系;
[0038] 当所述第二虚拟机采用SR-IOV技术时,所述中间设备用于根据所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系实现所述第二虚拟机与所述网络适配器之间的报文转发;当所述第二虚拟机采用Virtio技术时,所述中间设备用于根据所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系实现所述第二虚拟机与所述网络适配器之间的报文转发。
[0039] 这样,第二虚拟机既可以采用SR-IOV技术,也可以采用Virtio技术,不仅实现了资源池的归一,也实现了Virtio协议报文转发的硬卸载,能够减少对所述第一CPU资源的占用,提升所述第一CPU资源的利用率。
[0040] 可选的,所述第一CPU和所述第二CPU共享所述网络适配器。所述第一CPU和所述第二CPU共享所述网络适配器,是所述第一CPU和所述第二CPU分别通过所述网络适配器与网络通信连接。
[0041] 在一种可能的设计中,所述中间设备还用于根据所述第一功能单元的信息,在所述第一子端点端口中配置所述第一代理单元的信息;根据所述第二功能单元的信息,在所述第二子端点端口中配置所述第二代理单元的信息。
[0042] 可选的,所述第一子端点端口中所述第一代理单元的信息,以及所述第二子端点端口中所述第二代理单元的信息,可以是所述中间设备在制造时就配置好的,也可以是所述控制器获取到所述网络适配器中PF和VF的信息后配置在所述第一子端点端口和所述第二子端点端口中的。当所述第一子端点端口的寄存器中包括的用于标识PFA’的信息和第二子端点端口的寄存器中包括的用于标识PFB’的信息,是所述控制器获取到所述网络适配器中PF和VF的信息后配置在所述第一子端点端口和所述第二子端点端口中时,所述中间设备能够根据连接的网络适配器的具体情况配置相应的代理单元,能够更灵活地实现所述中间设备的功能。
[0043] 可选的,所述中间设备还用于根据所述第三功能单元的信息,在第三子端点端口中配置所述第三代理单元的信息,在第四子端点端口中配置所述第四代理单元的信息。
[0044] 可选的,所述第三子端点端口中所述第三代理单元的信息,以及所述第四子端点端口中所述第四代理单元的信息,可以是所述中间设备在制造时就配置好的,也可以是所述控制器获取到所述网络适配器中PF和VF的信息后配置在所述第三子端点端口和所述第四子端点端口中的。当所述第三子端点端口的寄存器中包括的用于标识PFA’的信息和第四子端点端口的寄存器中包括的用于标识PFB’的信息,是所述控制器获取到所述网络适配器中PF和VF的信息后配置在所述第三子端点端口和所述第四子端点端口中时,所述中间设备能够根据连接的网络适配器的具体情况配置相应的代理单元,能够更灵活地实现所述中间设备的功能。
[0045] 可选的,当所述第一CPU通过PCIe枚举获取所述第一子端点端口的寄存器中包括的用于标识支持SR-IOV的PFA’的信息后,使能该PFA’的SR-IOV配置空间的VF Enable寄存器,配置VF的属性以发现VFA’。所述配置VF的属性可以通过配置所述PFA’的SR-IOV的capability以发现支持SR-IOV的VFA’。所述第一CPU发现的PFA’和VFA’都可以是所述第一代理单元的一种实现方式。
[0046] 可选的,当所述第一CPU通过PCIe枚举获取所述第二子端点端口的寄存器中包括的用于标识支持Virtio的PFB’的信息后,使能该PFB’的SR-IOV配置空间的VF Enable寄存器,配置VF的属性以发现支持Virtio的VFB’。所述配置VF的属性可以通过配置所述PFB’的SR-IOV的capability以发现VFB’。所述第一CPU发现的PFA’和VFA’都可以是所述第二代理单元的一种实现方式。
[0047] 可选的,所述第一CPU在PCIe枚举过程中,根据获取到的PF’和/或VF’在PCIe拓扑中的位置,为相应的PF’和VF’分配BDF,即为发现的代理单元分配相应的BDF。
[0048] 可选的,所述第一CPU通过枚举获取代理单元(PF’或VF’)的Bar空间大小并配置Bar空间地址的起始地址和地址长度,以配置代理单元的Bar空间地址信息。
[0049] 可选的,所述第一CPU还可以通过传输层包(transaction layer packet,TLP)报文将获取到的代理单元的地址信息,包括但不限于所述第一代理单元的BDF和Bar空间地址信息,以及第二代理单元的BDF和Bar空间地址信息,发送给所述中间设备。
[0050] 在一种可能的设计中,所述第一功能单元的地址信息包括所述第一功能单元的BDF信息和所述第一功能单元的Bar空间地址信息;
[0051] 所述第二功能单元的地址信息包括所述第二功能单元的BDF信息和所述第二功能单元的Bar空间地址信息;
[0052] 所述第一代理单元的地址信息包括所述第一代理单元的BDF信息和所述第一代理单元的Bar空间地址信息;
[0053] 所述第二代理单元的地址信息包括所述第二代理单元的BDF信息和所述第二代理单元的Bar空间地址信息。
[0054] 在一种可能的设计中,所述网络适配器支持SR-IOV功能,所述第一功能单元包括第一物理功能或第一虚拟功能。
[0055] 第二方面,本申请实施例提供了一种中间设备,所述中间设备通过总线与计算机设备中的第一CPU和网络适配器连接,所述第一CPU支持运行第一虚拟机,所述中间设备包括控制器和存储器
[0056] 所述控制器,用于获取所述网络适配器中第一功能单元的信息和第二功能单元的信息,分别为所述第一功能单元和所述第二功能单元分配地址,获取第一代理单元的地址信息和第二代理单元的地址信息,并建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;其中,所述第一功能单元和所述第二功能单元,为所述网络适配器中基于虚拟化技术产生的同一功能单元或不同的功能单元,所述第一代理单元支持SR-IOV技术且是所述第一功能单元的代理,所述第二代理单元支持Virtio技术且是所述第二功能单元的代理;
[0057] 所述存储器,用于存储所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;
[0058] 所述控制器,还用于当所述第一虚拟机采用SR-IOV技术时,根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发;当所述第一虚拟机采用Virtio技术时,根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发。
[0059] 上述中间设备能够包括支持SR-IOV的第一代理单元和支持Virtio的第二代理单元,且所述第一代理单元是所述第一功能单元的代理,所述第二代理单元是所述第二功能单元的代理,所述第一功能单元和所述第二功能单元为所述网络适配器中的同一功能单元或不同的功能单元。这样,该中间设备既可以对实现采用SR-IOV技术的虚拟机收发的报文的转发,也可以实现对采用Virtio技术的虚拟机收发的报文的转发,实现了资源池的归一。同时,所述中间设备通过总线与计算机设备中的第一中央处理器CPU和网络适配器连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0060] 可选的,所述中间设备可以通过FPGA、ASIC或FPGA+ASIC等设备实现。
[0061] 可选的,所述报文包括数据报文或命令报文。所述数据报文包括但不限于需要读写的数据,所述命令报文包括但不限于需要发送的控制命令或控制消息。
[0062] 可选的,所述第一功能单元是所述网络适配器包括的多个基于虚拟化技术产生的功能单元中的一个。
[0063] 可选的,所述支持SR-IOV的第一代理单元是所述第一功能单元的代理,即所述第一代理单元是所述中间设备中用于代理所述第一功能单元的功能的单元。例如,当所述第一功能单元是PF时,所述第一代理单元是所述PF的代理单元;当所述第一功能单元是VF时,所述第一代理单元是所述VF的代理单元。
[0064] 可选的,所述支持Virtio的第二代理单元是所述第二功能单元的代理,即所述第二代理单元是所述中间设备中用于代理所述第二功能单元的功能的单元。例如,当所述第二功能单元是PF时,所述第二代理单元是所述PF的代理单元;当所述第二功能单元是VF时,所述第二代理单元是所述VF的代理单元。
[0065] 可选的,所述支持SR-IOV的第一代理单元是所述中间设备中包括的多个功能单元中的一个,所述第一代理单元用于实现支持SR-IOV的网络适配器的功能。所述第一代理单元的信息是用于标识所述第一代理单元的信息。所述用于标识所述第一代理单元的信息,可以存储在所述中间设备的端点端口的寄存器中。所述第一CPU在通过PCIe枚举所述中间设备时,通过获取所述第一子端点端口的寄存器中的信息,获取所述第一代理单元的信息。可选的,所述第一子端点端口的寄存器中存储的是作为代理单元的PFA’的信息。
[0066] 可选的,所述支持Virtio的第二代理单元是所述中间设备中包括的多个功能单元中的一个,所述第二代理单元用于实现支持Virtio的网络适配器的功能。所述第二代理单元的信息是用于标识所述第二代理单元的信息。所述用于标识所述第二代理单元的信息,可以存储在所述中间设备的第二子端点端口的寄存器中。所述第一CPU在通过PCIe枚举所述中间设备时,通过获取所述第二子端点端口的寄存器中的信息,获取所述第一代理单元的信息。可选的,所述端点端口的寄存器中存储的是作为代理单元的PFB’的信息。
[0067] 可选的,所述中间设备还用于存储所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系,以及存储所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系。
[0068] 在一种可能的设计中,所述中间设备还包括第一端点端口,所述中间设备通过所述第一端点端口与所述第一CPU连接,所述第一端点端口包括第一交换设备,第一子端点端口和第二子端点端口,所述第一子端点端口和所述第二子端点端口分别与所述第一交换设备的下行端口连接;
[0069] 所述第一子端点端口包含所述第一代理单元的信息,所述第二子端点端口包含所述第二代理单元的信息。
[0070] 可选的,所述第一交换设备可以是PCIe switch,所述PCIe switch的配置空间中记录有所述第一CPU通过枚举分配的第一代理单元的地址信息,以及所述第一CPU通过枚举分配的第二代理单元的地址信息。这样,所述PCIe switch能够根据记录的地址信息,转发所述第一虚拟机收发的报文。
[0071] 在一种可能的设计中,所述第一交换设备,用于接收所述第一虚拟机发送的第一报文,根据所述第一报文中的地址信息,从所述第一子端点端口和所述第二子端点端口中选择一个以转发所述第一报文。
[0072] 在一种可能的设计中,所述中间设备还包括通道控制模块;
[0073] 所述通道控制模块,用于实现所述网络适配器向所述第一虚拟机发送第二报文时转发路径的控制;
[0074] 当所述第一虚拟机采用SR-IOV技术时,所述通道控制模块将包含所述第一子端点端口的路径确定为转发所述第二报文的路径;当所述第一虚拟机采用Virtio技术时,所述通道控制模块将包含所述第二子端点端口的路径确定为转发所述第二报文的路径。
[0075] 可选的,所述通道控制模块,可以通过通道控制寄存器实现。所述通道控制寄存器可以是所述中间设备中Bar空间中的寄存器,例如可以是所述第一子端点端口的Bar空间中的寄存器,也可以是所述第二子端点端口的Bar空间中的寄存器。
[0076] 在一种可能的设计中,所述交换设备还包括转换模块;
[0077] 所述转换模块,用于将采用Virtio技术的第一虚拟机发送的报文,转换为所述中间设备与所述网络适配器之间转发协议的报文,或将所述网络适配器向采用Virtio技术的第一虚拟机发送的报文转换为支持Virtio协议的报文。
[0078] 可选的,所述中间设备与所述网络适配器之间的转发协议的报文,可以是普通DMA命令的报文,也可以NVMe的报文。
[0079] 在一种可能的设计中,所述中间设备还用于根据所述第一功能单元的信息,在所述第一子端点端口中配置所述第一代理单元的信息;根据所述第二功能单元的信息,在所述第二子端点端口中配置所述第二代理单元的信息。
[0080] 在一种可能的设计中,所述第一功能单元的地址信息包括所述第一功能单元的BDF信息和所述第一功能单元的Bar空间地址信息;
[0081] 所述第二功能单元的地址信息包括所述第二功能单元的BDF信息和所述第二功能单元的Bar空间地址信息;
[0082] 所述第一代理单元的地址信息包括所述第一代理单元的BDF信息和所述第一代理单元的Bar空间地址信息;
[0083] 所述第二代理单元的地址信息包括所述第二代理单元的BDF信息和所述第二代理单元的Bar空间地址信息。
[0084] 可选的,所述中间设备还通过总线与所述计算机设备中的第二CPU和网络适配器连接,所述第二CPU支持运行第二虚拟机;
[0085] 所述控制器,还用于获取所述网络适配器中第三功能单元和第四功能单元的信息,分别为所述第三功能单元和所述第四功能分配地址,获取第三代理单元的地址信息和第四代理单元的地址信息,并建立所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系以及所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系;其中,所述第三功能单元和所述第四功能单元,为所述网络适配器中基于虚拟化技术产生的同一功能单元或不同的功能单元,所述第三代理单元支持SR-IOV技术且是所述第一功能单元的代理,所述第四代理单元支持Virtio技术且是所述第一功能单元的代理;
[0086] 所述存储器,用于存储所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系以及所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系;
[0087] 所述控制器,还用于当所述第二虚拟机采用SR-IOV技术时,根据所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系实现所述第二虚拟机与所述网络适配器之间的报文转发;当所述第二虚拟机采用Virtio技术时,根据所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系实现所述第二虚拟机与所述网络适配器之间的报文转发。
[0088] 这样,第二虚拟机既可以采用SR-IOV技术,也可以采用Virtio技术,不仅实现了资源池的归一,也实现了Virtio协议报文转发的硬卸载,能够减少对所述第一CPU资源的占用,提升所述第一CPU资源的利用率。
[0089] 第三方面,本申请实施例提供了一种虚拟化技术资源池归一的方法,所述方法包括:
[0090] 获取网络适配器中第一功能单元和第二功能单元的信息,分别为所述第一功能单元和所述第二功能单元分配地址,获取第一代理单元的地址信息和第二代理单元的地址信息,并建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;其中,所述第一功能单元和所述第二功能单元,为所述网络适配器中基于虚拟化技术产生的同一功能单元或不同的功能单元,所述第一代理单元支持SR-IOV技术且是所述第一功能单元的代理,所述第二代理单元支持Virtio技术且是所述第二功能单元的代理,所述网络适配器是虚拟机与网络实现报文转发的设备;
[0091] 当所述虚拟机采用SR-IOV技术时,根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述虚拟机与所述网络适配器之间的报文转发;当所述虚拟机采用Virtio技术时,根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述虚拟机与所述网络适配器之间的报文转发。
[0092] 通过上述方法,虚拟机既可以采用SR-IOV技术,也可以采用Virtio技术,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一。同时,所述虚拟机与所述网络适配器之间报文的转发可以通过硬件实现,能够实现Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0093] 可选的,所述报文包括数据报文或命令报文。所述数据报文包括但不限于需要读写的数据,所述命令报文包括但不限于需要发送的控制命令或控制消息。
[0094] 可选的,所述第一功能单元或所述第二功能单元是所述网络适配器包括的多个基于虚拟化技术产生的功能单元中的一个。
[0095] 可选的,所述支持SR-IOV的第一代理单元是所述第一功能单元的代理,即所述第一代理单元是所述中间设备中用于代理所述第一功能单元的功能的单元。例如,当所述第一功能单元是PF时,所述第一代理单元是所述PF的代理单元;当所述第一功能单元是VF时,所述第一代理单元是所述VF的代理单元。
[0096] 可选的,所述支持Virtio的第二代理单元是所述第二功能单元的代理,即所述第二代理单元是所述中间设备中用于代理所述第二功能单元的功能的单元。例如,当所述第二功能单元是PF时,所述第二代理单元是所述PF的代理单元;当所述第二功能单元是VF时,所述第二代理单元是所述VF的代理单元。
[0097] 在一种可能的设计中,所述获取网络适配器中第一功能单元的信息包括:
[0098] 通过枚举所述网络适配器,获取所述网络适配器中所述第一功能单元的信息。
[0099] 在一种可能的设计中,所述获取网络适配器中第二功能单元的信息包括:
[0100] 通过枚举所述网络适配器,获取所述网络适配器中所述第二功能单元的信息。
[0101] 在一种可能的设计中,所述方法还包括:
[0102] 根据所述第一功能单元的信息和所述第二功能单元的信息,在不同的子端点端口中分别配置所述第一代理单元的信息和所述第二代理单元的信息。
[0103] 在一种可能的设计中,所述地址信息包括BDF信息和Bar空间地址信息。
[0104] 第四方面,本申请实施例提供了一种计算机设备,所述计算机设备包括第一中央处理器CPU、中间设备、网络适配器和总线,所述中间设备通过所述总线分别与所述第一CPU和所述网络适配器连接,所述第一CPU支持运行第一虚拟机,所述第一虚拟机支持SR-IOV技术或所述第一虚拟机支持Virtio技术;
[0105] 所述中间设备,用于接收所述第一虚拟机发送的第一报文,并将所述第一报文转发给所述网络适配器;或,
[0106] 所述中间设备,用于接收所述网络适配器发送的第二报文,并将所述第二报文转发给所述所述第一虚拟机。
[0107] 上述计算机设备中第一虚拟机既可以采用SR-IOV技术,也可以采用Virtio技术,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一。同时,中间设备分别与所述第一CPU和网络适配器通过总线连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对所述第一CPU资源的占用,提升所述第一CPU资源的利用率。
[0108] 可选的,所述中间设备可以通过FPGA、ASIC或FPGA+ASIC等设备实现。
[0109] 可选的,所述报文包括数据报文或命令报文。所述数据报文包括但不限于需要读写的数据,所述命令报文包括但不限于需要发送的控制命令或控制消息。
[0110] 可选的,所述总线可以是PCIe总线或UPI总线。当所述总线是PCIe总线时,所述中间设备作为PCIe的根节点,通过PCIe枚举发现所述网络适配器。
[0111] 可选的,所述第一虚拟机可以被配置为采用SR-IOV技术,也可以被配置为采用Virtio技术。所述第一虚拟机具体被配置为哪种虚拟化技术,可以是所述计算机设备中的功能单元(例如虚拟机管理器)根据接收到的用户的配置指令配置的。可以理解,在同一时刻,所述第一虚拟机只支持一种虚拟化技术。
[0112] 在一种可能的设计中,所述计算机设备还包括第二CPU,所述中间设备通过所述总线分别与所述第二CPU和所述网络适配器连接,所述第二CPU支持运行第二虚拟机,所述第二虚拟机支持单根输入输出虚拟化SR-IOV技术或所述第二虚拟机支持Virtio技术;
[0113] 所述中间设备,用于接收所述第二虚拟机发送的第三报文,并将所述第三报文转发给所述网络适配器;或,
[0114] 所述中间设备,用于接收所述网络适配器发送的第四报文,并将所述第四报文转发给所述所述第二虚拟机。
[0115] 可选的,所述第一CPU和所述第二CPU共享所述网络适配器。所述第一CPU和所述第二CPU共享所述网络适配器,是所述第一CPU和所述第二CPU分别通过所述网络适配器与网络通信连接。
[0116] 第五方面,本申请实施例提供了一种中间设备,所述中间设备通过总线与计算机设备中的第一中央处理器CPU和网络适配器连接,所述第一CPU支持运行第一虚拟机,所述第一虚拟机支持SR-IOV技术或所述第一虚拟机支持Virtio技术,所述中间设备包括控制器和存储器;
[0117] 所述存储器,用于存储实现报文转发的地址对应关系;
[0118] 所述控制器,用于接收所述第一虚拟机发送的第一报文,并根据所述地址对应关系将所述第一报文转发给所述网络适配器;或用于接收所述网络适配器发送的第二报文,并根据所述地址对应关系将所述第二报文转发给所述所述第一虚拟机。
[0119] 上述中间设备既可以对实现采用SR-IOV技术的虚拟机收发的报文的转发,也可以实现对采用Virtio技术的虚拟机收发的报文的转发,实现了资源池的归一。同时,所述中间设备通过总线与计算机设备中的第一中央处理器CPU和网络适配器连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0120] 可选的,所述中间设备可以通过FPGA、ASIC或FPGA+ASIC等设备实现。
[0121] 本申请实施例还提供了一种计算机可读存储介质,包括程序代码,该程序代码包括用于执行第三方面提供的任一方法的部分或全部步骤的指令。
[0122] 本申请实施例还提供了一种计算机可读存储介质,其上储存有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述第三方面提供的任一种可能的方法。
[0123] 本申请实施例还提供了一种计算机程序产品,当其在计算机上运行时,使得第三方面提供的任一方法被执行。
[0124] 可以理解地,上述提供的任一种存储设备、计算机可读存储介质或计算机程序产品等均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法中的有益效果,此处不再赘述。附图说明
[0125] 下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0126] 图1为本申请实施例提供的一种服务器实现方式的结构示意图;
[0127] 图2A为本申请实施例提供的服务器200的一种是实现方式结构示意图;
[0128] 图2B为本申请实施例提供的服务器200的另一种实现方式结构示意图;
[0129] 图2C为本申请实施例提供的服务器200的再一种实现方式结构示意图;
[0130] 图2D为本申请实施例提供的服务器200的再一种实现方式结构示意图;
[0131] 图3为本申请实施例提供的服务器300的一种实现方式结构示意图;
[0132] 图4A为图3中中间设备304建立映射表的方法流程示意图;
[0133] 图4B为本申请实施例提供的BDF信息记录方式的示意图;
[0134] 图4C为本申请实施例提供的Bar空间地址信息记录方式的示意图;
[0135] 图4D为本申请实施例提供的PFA’与PF,以及VFA’与VF之间的BDF对应关系的示意图;
[0136] 图4E为本申请实施例提供的的PFA’与PF,以及VFA’与VF之间的Bar空间地址之间对应关系的示意图;
[0137] 图4F为本申请实施例提供的PFB’与PF,以及VFB’与VF之间的BDF对应关系的示意图;
[0138] 图4G为本申请实施例提供的PFB’与PF,以及VFB’与VF之间的Bar空间地址之间对应关系的示意图;
[0139] 图5为本申请实施例提供的报文转发方法的流程示意图;
[0140] 图6A为本申请实施例提供的一种计算机设备600的结构示意图;
[0141] 图6B为本申请实施例提供的一种计算机设备600的另一种结构示意图;
[0142] 图6C为本申请实施例提供的一种计算机设备600的再一种结构示意图;
[0143] 图6D为本申请实施例提供的一种计算机设备600的再一种结构示意图;
[0144] 图7A为本申请实施例提供的一种中间设备700的结构示意图;
[0145] 图7B为本申请实施例提供的另一种中间设备700的结构示意图;
[0146] 图8为本申请实施例提供的另一种报文转发方法流程示意图;
[0147] 图9为本申请实施例提供的另一种计算机设备900的结构示意图;
[0148] 图10为本申请实施例提供的另一种中间设备1000的结构示意图。

具体实施方式

[0149] 下面结合附图,对本发明的实施例进行描述。
[0150] 另外,本发明实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
[0151] 本申请实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下中的至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a、b、c、a-b、a-c、b-c或a-b-c,其中a、b、c可以是单个,也可以是多个。
[0152] 本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
[0153] 为了帮助本领域技术人员更好地理解本申请的技术方案,首先对本申请实施例中所涉及到的一些概念进行介绍。
[0154] 虚拟化:将一种形式的资源抽象成另外一种形式就是虚拟化,虚拟化本质上是一种模拟。系统虚拟化是将一台物理计算机系统(Host主机)虚拟化为一台或多台虚拟计算机(virtual machine,VM)。每台VM都有自己的硬件,如CPU、内存和各种外设,每台VM上都可以运行自己的OS和应用程序。VM拥有的硬件资源既可以是软件模拟的也可以是真实的物理硬件。
[0155] SR-IOV技术:一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。通过SR-IOV技术,单个输入输出(input/output,I/O)资源可由多个虚拟机共享,每个虚拟机都可访问唯一的I/O资源。启用了SR-IOV并且具有适当的硬件和操作系统(operating system,OS)支持的PCIe设备可以显示为多个单独的物理设备,每个都具有自己的PCIe配置空间。该技术抽象出两种功能类型供用户使用,分别称为PF和VF。PF是全功能的PCIe功能,可以像其他任何PCIe设备一样被发现、管理和处理。PF拥有完全配置资源,可以用于配置或控制PCIe设备。VF是与PF关联的一种功能,是一种轻量级PCIe功能,可以与PF以及与同一PF关联的其他VF共享一个或多个物理资源。VF仅允许拥有用于其自身行为的配置资源。每个实现SR-IOV的设备都可以有一个PF或多个PF,并且每个PF最多可有64,000个与其关联的VF。PF可以通过寄存器创建VF,这些寄存器设计有专用于此目的的属性。每个VF都具有一个PCIe内部空间,用于映射其寄存器集。VF设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的PCIe设备。每个PF或VF在PCIe总线系统中都有一个唯一的BDF。
[0156] Virtio技术:Virtio是一种I/O半虚拟化解决方案,是客户端(Guest)与主机(Host)之间通信的润滑剂,提供了一套通用框架,以及标准接口或协议来完成两者之间的交互过程,极大地解决了各种驱动程序和不同虚拟化解决方案之间的适配问题。Virtio技术提供了一套上层应用与各Hypervisor虚拟化设备(例如基于内核的虚拟机(Kernel-based Virtual Machine,KVM),Xen,Vmware等)之间的通信框架和编程接口。在完全虚拟化的解决方案中,guest VM要使用底层host资源,需要Hypervisor来截获所有的请求指令,然后模拟出这些指令的行为,这样势必会带来很多性能上的开销。半虚拟化通过底层硬件辅助的方式,将部分没必要虚拟化的指令通过硬件来完成,Hypervisor只负责完成部分指令的虚拟化,要做到这点,需要guest来配合,guest完成不同设备的前端驱动程序,Hypervisor配合guest完成相应的后端驱动程序,这样两者之间通过某种交互机制就可以实现高效的虚拟化过程。从总体上看,virtio可以分为四层,包括前端guest中各种驱动程序模块,后端Hypervisor上的处理程序模块,中间用于前后端通信的virtio层和virtio-ring层,virtio层实现的是虚拟队列接口,可以被看作是前后端通信的桥梁,而virtio-ring层是该桥梁的具体实现,它实现了两个环形缓冲区,分别用于保存前端驱动程序和后端处理程序执行的信息。
[0157] BDF:PCIe设备的中的每一项功能的唯一的标识符。每个PCIe设备可以只有一个功能,也可以拥有最多8个功能。无论一个PCIe设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间。PCIe的配置软件(例如PCIe的Rootcomplex等)能够识别出PCIe总线系统的拓扑逻辑,以及其中的每一条总线,每一个PCIe设备和PCIe设备的每一项功能,即能够识别出BDF。具体实现中,BDF中,Bus Number可以占用8位,Device Number可以占用5位,Function Number可以占用3位。
[0158] PCIe设备枚举:PCIe体系架构一般由root complex,switch,endpoint等类型的PCIe设备组成,并且在root complex和switch中通常还会有一些embeded endpoint(这种设备对外没有PCIe接口)。当PCIe设备所在的计算机系统启动后,CPU需要识别这些设备。Root complex通常是采用特定的算法,例如深度优先算法,访问每一个可能的分支路径,直到不能再深入访问为止,且每个PCIe设备只访问一次。这个过程称为PCIe设备枚举。
[0159] PCIe配置空间:每个PCIe设备都有一段空间,Host软件可以通过该段空间获取该PCIe设备的一些信息,也可以通过该段空间来配置该PCIe设备,这段空间就叫做PCIe的配置空间。
[0160] 多PF场景:是指一个物理网卡的物理端口可以分成多个PF,即物理上只出一个端口,但在基本输入输出系统(basic input/output system,BIOS)扫描和OS下可以看到多个独立的PCIE设备,独立的网口,独立的媒体接入控制(Media Access Control,MAC)地址等。例如:Intel XL710网卡,支持40千兆以太网(Gigabit Ethernet,GE),出1个物理网口;可以将40GE的网口分成4个10GE的网口,此时就是1个物理端口分4个PF的场景。
[0161] TLP报文:PCIe总线在传输数据的时候使用事务进行传输,这种事务又称为TLP报文。TLP报文通常包含报文头,数据段,以及校验信息等。PCIe报文主要分为:内存访问读/写,I/O访问读/写,配置空间访问读/写,以及消息事务等。
[0162] Bar空间地址:每个PCIe设备(例如PF或VF)都有自己的内部空间,这部分内部空间不能直接被CPU访问。当CPU需要读取PF或VF的内部空间的数据时,首先由Root complex通过TLP报文把数据从PF或VF读到CPU可访问的内存,然后CPU从可访问的内存中读取数据;如果CPU要往PF或VF的内部空间写入数据时,则先把数据写入内存中,然后由Root complex通过TLP报文将数据写入PF或VF的内部空间中。
[0163] 图1为一种同时实现Virtio和SR-IOV的服务器结构示意图。如图1所示,服务器100包括CPU101、CPU102和网络适配器103。虚拟机1011通过CPU101运行,并通过虚拟网卡1与网络适配器103通信;虚拟机1021通过CPU102运行,并通过虚拟网卡2与网络适配器103通信。虚拟机1011支持Virtio协议,其运行的应用程序1通过Virtio驱动1实现与网络适配器103的连接;虚拟机1021也支持Virtio协议,其运行的应用程序2通过Virtio驱动2实现与网络适配器103的连接。网络适配器103支持SR-IOV,支持运行VF1和VF2。应用程序1需要收发的报文通过软转发程序104,与网络适配器103中的VF1通信。同样的,应用程序2需要收发的报文通过软转发程序104,与网络适配器103中的VF2通信。
[0164] 图1所示的服务器100虽然能够兼具Virtio和SR-IOV技术的优点,但通过软转发程序104实现virtio-net与SR-IOV之间的映射会占用服务器100中CPU的资源,与智能网卡卸载CPU资源的初衷相违背。并且,通过软件实现的方式,相对于通过硬件实现还存在着效率低、维护成本高的问题。
[0165] 另一种同时实现Virtio和SR-IOV的方式是在云网络中,实现了两套资源池,一个资源池支持SR-IOV技术,一个资源池支持virtio技术,用户可以选择需要的应用。例如,当用户选择SR-IOV技术时,可以从支持SR-IOV技术的资源池中分配虚机;当用户选择Virtio技术时,可以从支持Virtio技术的资源池中分配虚机。
[0166] 这种方式需要维护两套资源池,且资源池上不能共享,会造成一定的资源浪费。
[0167] 本申请实施例提供一种实现SR-IOV和Virtio资源池归一的方法和计算机设备,以在实现SR-IOV和Virtio资源池归一的同时,实现Virtio协议报文转发的硬件卸载,以提升设备的IO性能和资源利用率。
[0168] 下面以服务器为例,对本申请实施例提供的计算机设备进行说明。可以理解,对于其它形式的计算机设备,例如便携式电脑或终端设备,只要是实现虚拟化技术的设备通过网络适配器与网络连接并通信,都可以参照本申请实施例提供的技术方案来实现,不再赘述。
[0169] 如图2A所示,服务器200包括CPU201、CPU202、中间设备204和网络适配器203。其中,中间设备204可以通过FPGA或ASIC芯片实现,也可以通过FPGA和ASIC芯片共同实现。图2A是以中间设备204位于网络适配器203的外部为例所示的示意图。在一种实现方式中,中间设备204也可以是部署在物理网卡上的FPGA、ASIC或FPGA+ASIC等芯片。网络适配器203是物理网卡,用于与网络连接并实现报文(例如数据报文或命令报文)的转发。CPU201与CPU202之间可以通过通信总线205连接并通信,其中,通信总线205包括但不限于QPI总线、UPI总线、IAL总线等。CPU201和CPU202分别与中间设备204通过总线(包括但不限于PCIe总线或UPI总线)连接,中间设备204与网络适配器203之间通过总线(包括但不限于PCIe总线或UPI总线)连接。
[0170] 为清楚地对本申请实施例提供的技术方案进行描述,下面以CPU201和CPU202分别通过PCIe总线与中间设备204连接,中间设备204通过PCIe总线与网络适配器203连接,采用Virtio技术的虚拟机2011和采用SR-IOV技术的虚拟机2012通过CPU201运行,采用Virtio技术的虚拟机2021和采用SR-IOV技术的虚拟机2022通过CPU202运行,网络适配器203支持SR-IOV,中间设备204通过FPGA实现为例,对图2A所示的服务器200的实现方式做进一步的说明。可以理解,对于其它实现方式,例如虚拟机2012是采用Virtio技术的虚拟机,虚拟机2011是采用SR-IOV技术的虚拟机等,都在本申请实施例公开的范围之内,不再赘述。
[0171] 图2A中,以支持SR-IOV的网络适配器203包含PF2031和PF2032,VF20311与PF2031关联,VF20321与PF2032关联为例进行说明。网络适配器203的端点端口2034通过PCIe总线与中间设备204的根端口2045连接。网络端口2033是网络适配器203与网络连接的端口。
[0172] 中间设备204包括控制器2041、存储器2042、端点端口2043、端点端口2044和根端口2045。端点端口2043包括PCIe switch20431、子端点端口20432和子端点端口20433;端点端口2044包括PCIe switch20441、子端点端口20442和子端点端口20443。其中,控制器2041用于实现对中间设备204的控制;存储器2042用于存储控制器2041需要存储的信息,包括但不限于网络适配器203中功能单元(例如PF和VF)的地址信息和CPU(CPU201、CPU202)枚举到的中间设备中代理单元(例如PF’和VF’)的地址信息,以及所述功能单元的地址信息与所述代理单元的地址信息之间的对应关系。子端点端口20432和子端点端口20443是支持SR-IOV的端点端口,CPU(CPU201、CPU202)在进行PCIe枚举时,能够通过子端点端口20432和子端点端口20443识别中间设备204是支持SR-IOV的端点设备;子端点端口20433和子端点端口20442是支持Virtio的端点端口,CPU(CPU201、CPU202)在进行PCIe枚举时,能够通过子端点端口20433和子端点端口20442识别中间设备204是支持Virtio的端点设备。
[0173] 中间设备204可以对CPU(CPU201、CPU202)呈现为支持SR-IOV的端点设备和Virtio的端点设备。中间设备204可以先枚举网络适配器203,获取网络适配器203中功能单元(例如PF和VF)的地址信息;然后CPU(CPU201、CPU202)枚举中间设备204以获取中间设备204中代理单元(例如PF’和VF’)的地址信息,并将枚举到的代理单元(例如PF’和VF’)的地址信息发送给中间设备204。中间设备204中的控制器2041建立网络适配器203中功能单元的地址信息与中间设备204中代理单元的地址信息之间的对应关系。中间设备204可以根据所述对应关系实现CPU(CPU201、CPU202)中运行的虚拟机与网络适配器203之间报文的转发。其中,中间设备204中代理单元(例如PF’和VF’),包括支持SR-IOV的代理单元(本申请实施例中用PFA’和/或VFA’来表示),以及支持Virtio的代理单元(本申请实施例中用PFB’和/或VFB’来表示)。这样,当CPU(CPU201、CPU202)中运行的虚拟机被配置为一种虚拟化技术(SR-IOV或Virtio)时,中间设备204都有相应的代理单元用于实现该虚拟机收发的报文的转发。
[0174] 示例性的,控制器2041可以是片上系统(System-on-a-Chip,SoC)。根端口2045作为根复合体(Root complex)中的Root Port,与网络适配器203通过PCIe总线连接。所述Root complex是PCIe拓扑结构的根节点,通常包括Host bridge,Root Port和内部总线。在本申请实施例中,所述Host bridge可以通过控制器2041实现。当然,Host bridge也可以通过中间设备204中的其它控制部件或中间设备与网络适配器203之间的其它控制设备来实现,本申请实施例不限定Host bridge的具体实现方式。
[0175] 通过在中间设备204实现Root complex,中间设备204中的控制器2041可以作为PCIe拓扑结构的根节点,能够通过PCIe枚举发现PCIe的端点设备:网络适配器203。例如,控制器2041通过PCIe枚举,发现网络适配器203,并进一步发现网络适配器203中的PF:PF2031和PF2032。控制器2041使能每个PF的SR-IOV配置空间的VF Enable寄存器,配置VF的属性以发现VF,例如发现VF20311和VF20321。示例性的,控制器2041通过配置PF2031的SR-IOV的capability以发现VF20311,通过配置PF2032的SR-IOV的capability以发现VF20321。
[0176] 控制器2041通过PCIe枚举发现网络适配器203中的功能单元:PF和VF,并根据PF和VF在PCIe拓扑中的位置,为发现的PF和VF分配相应的BDF,并将分配的BDF存储在存储器2042中。例如,控制器2041将PF2031的BDF、VF20311的BDF、PF2032的BDF和VF20321的BDF,存储在存储器2042中。同时,控制器2041还通过枚举获取每个功能单元的Bar空间大小并配置Bar空间地址。以VF20311为例,控制器2041获取VF20311的Bar空间大小,配置VF20311的Bar空间的起始地址和地址长度,配置的VF20311的Bar空间的起始地址和地址长度为VF20311的Bar空间地址信息。通过类似的实现方式,控制器2041还可以获取到PF2031的Bar空间地址、PF2032的Bar空间地址和VF20321的Bar空间地址信息。控制器2041获取到各个功能单元的Bar空间地址后,将其存储在存储器2042中。
[0177] 存储器2042可以是中间设备204中独立的存储器,例如随机存取存储器(Random Access Memory,RAM)等,用于存储上述BDF信息和Bar空间地址信息。当然,控制器也可以将上述BDF信息和Bar空间地址信息存储在中间设备204其它的存储器中,该其它的存储器可以是非独立的存储器。本申请实施例不限定存储BDF信息和Bar空间地址信息的具体位置。
[0178] 图2A中,CPU201和CPU202分别运行Root complex,使得CPU201和CPU202分别作为PCIe拓扑结构的根节点,能够通过PCIe枚举发现中间设备204中的PCIe拓扑结构。根端口2013作为Root complex中的Root Port,与中间设备204的端点端口2043通过PCIe总线连接;根端口2023作为Root complex中的Root Port,与中间设备204中的端点端口2044通过PCIe总线连接。在本申请实施例中,以CPU(CPU201或CPU202)实现Root complex中的Host bridge为例进行说明。在具体实现时,Host bridge也可以通过服务器200中的北桥芯片组,或输入/输出中心(input output hub,IOH)芯片组等实现。
[0179] 端点端口2043是中间设备204与CPU201连接的端口,端点端口2044是中间设备204与CPU202连接的端口。CPU201在对中间设备204进行PCIe枚举时,能够通过端点端口2043枚举到PCIe Switch 20431,并进一步枚举到子端点端口20432和子端点端口20433。示例性的,PCIe switch 20431的PCIe bus号默认配置成优先于子端点端口20432和子端点端口20433的PCIe bus号。这样,CPU201通过端点端口2043枚举中间设备204时,会根据PCIe bus号先枚举到PCIe switch 20431,再枚举到子端点端口20432和子端点端口20433。
[0180] 端点端口2043中的PCIe switch 20431、子端点端口20432和子端点端口20433都各有一个独立的PCIe配置空间。CPU201在进行PCIe枚举时,通过获取相应的PCIe配置空间的内容,实现对相应的PCIe switch和PCIe端点设备的枚举。示例性的,CPU201通过端点端口2043对中间设备进行PCIe枚举时,通过获取PCIe switch 20431的PCIe配置空间的内容实现对PCIe switch的枚举,通过获取子端点端口20432的PCIe配置空间或子端点端口20433的PCIe配置空间的内容实现对PCIe端点设备的枚举。例如,CPU201获取PCIe switch 
20431的PCIe配置空间中header type的信息,所述header type中记录的信息包括但不限于上行链路(up link,UP)和下行链路(downlink,DP)等信息。CPU201根据获取到的所述UP和DP等信息,识别出枚举到的是PCIe switch。因为枚举到的是PCIe switch,CPU201会继续通过PCIe switch 20431的DP进一步枚举并发现子端点端口20432和子端点端口20433。
[0181] 示例性的,CPU201从子端点端口20432的PCIe配置空间中获取PF2031A’的信息。例如,CPU201读取子端点端口20432的寄存器,该寄存器中存储有标识PF2031A’的信息,CPU201根据该信息发现PF2031A’。其中,标识PF2031A’的信息可以是一段代码,例如“非FFFF”等。CPU201通过该PF2031A’将中间设备204识别为支持SR-IOV的端点设备。可选的,标识PF2031A’的信息还可以包括class code,CPU201通过该class code将中间设备204识别为网络适配器。
[0182] 与CPU201枚举子端点端口20432类似,CPU201在枚举子端点端口20433时,从子端点端口20433的PCIe配置空间中获取PF2031B’的信息。例如,CPU201读取子端点端口20433的寄存器,该寄存器中存储有标识PF2031B’的信息,CPU201根据该信息发现PF2031B’。其中,标识PF2031B’的信息包括但不限于Vendor Id,且Vendor Id值为0x1AF4。CPU201通过Vendor Id为0x1AF4将中间设备204识别为支持virtio的端点设备。可选的,标识PF2031B’的信息还可以包括Device Id,且Device Id值为0x1000,CPU201通过该Device Id将中间设备204识别为网络适配器。其中,Vendor Id值为0x1AF4和Device Id值为0x1000是Virtio协议(例如Virtio V1.1版本)中具体的规定。
[0183] 示例性的,子端点端口20432的寄存器中包括用于标识PF2031A’的信息,可以是中间设备204在制造时就配置好的,也可以是控制器2041获取到网络适配器203中PF和VF的信息后,根据网络适配器203中PF的信息配置在子端点端口20432中的。如果子端点端口20432的寄存器中用于标识PF2031A’的信息是在制造时就配置好的,需要在制造中间设备204时根据可能连接的网络适配器相关信息进行配置。如果子端点端口20432的寄存器中用于标识PF2031A’的信息,是控制器2041获取到网络适配器203中PF的信息后配置在子端点端口20432中的,控制器2041可以根据与中间设备204连接的网络适配器203中PF(例如PF2031)的信息,在子端点端口20432的寄存器中配置PF2031A’的信息。同样的,子端点端口20433的寄存器中包括用于标识PF2031B’的信息,可以是中间设备204在制造时就配置好的,也可以是控制器2041获取到网络适配器203中PF和VF的信息后,根据网络适配器203中PF的信息配置在子端点端口20433中的。不再赘述。
[0184] CPU201通过枚举发现中间设备204中的PF2031A’,使能PF2031A’的SR-IOV配置空间的VF Enable寄存器,配置VF的属性以发现VF20311A’。例如,CPU201通过配置PF2031A’的SR-IOV的capability以发现VF20311A’等。CPU201根据PF2031A’和VF20311A’在PCIe拓扑中的位置,为PF2031A’和VF20311A’分配相应的BDF。同时,CPU201还通过枚举获取PF’和VF’的Bar空间大小并配置Bar空间地址。以VF20311A’为例,CPU201获取VF20311A’的Bar空间大小,配置VF20311A’的Bar空间的起始地址和地址长度,配置的VF20311A’的Bar空间的起始地址和地址长度为VF20311A’的Bar空间地址信息。
[0185] CPU201在完成枚举后,可以通过TLP报文将PF2031A’的BDF信息和Bar空间地址信息,以及VF20311A’的BDF信息和Bar空间地址信息发送给中间设备204。控制器2041根据CPU201发送的信息,建立PF2031A’的BDF与PF2031的BDF之间的对应关系,以及VF20311A’的BDF与VF20311的BDF之间的对应关系,并将建立的对应关系存储在存储器2042中。同时,控制器2041建立PF2031A’的Bar空间地址与PF2031的Bar空间地址的对应关系,以及VF20311A’的Bar空间地址与VF20311的Bar空间地址之间的对应关系,并将建立的对应关系存储在存储器2042中。
[0186] CPU201在枚举过程中从子端点端口20433获取VF20311B’信息过程,与CPU201在枚举过程中从子端点端口20432获取VF20311A’信息的过程类似。例如,CPU201使能PF2031B’的SR-IOV配置空间的VF Enable寄存器,配置VF的属性以发现VF20311B’;CPU201根据PF2031B’和VF20311B’在PCIe拓扑中的位置,为PF2031B’和VF20311B’分配相应的BDF;CPU201通过枚举获取PF2031B’和VF20311B’的Bar空间大小并配置Bar空间地址。CPU201在完成枚举后,可以通过TLP报文将PF2031B’的BDF信息和Bar空间地址信息,以及VF20311B’的BDF信息和Bar空间地址信息发送给中间设备204。这样,控制器2041建立PF2031B’的BDF与PF2031的BDF之间的对应关系,以及VF20311B’的BDF与VF20311的BDF之间的对应关系,并将建立的对应关系存储在存储器2042中。同时,控制器2041建立PF2031B’的Bar空间地址与PF2031的Bar空间地址的对应关系,以及VF20311B’的Bar空间地址与VF20311的Bar空间地址之间的对应关系,并将建立的对应关系存储在存储器2042中。
[0187] 这样,PF2031A’或PF2031B’可以被看作PF2031在中间设备204中的代理,或者,PF2031A’或PF2031B’为中间设备204中与PF2031对应的虚拟的PF;VF20311A’或VF20311B’可以被看作VF20311在中间设备204中的代理,或者,VF20311A’或VF20311B’为中间设备204中与VF20311对应的虚拟的VF。CPU201通过枚举发现中间设备204具备PF的功能(PF2031A’)和VF的功能(VF20311A’),可以将中间设备204作为PCIe链路上的一个支持SR-IOV的网络适配器,并通过中间设备204实现报文(数据报文或命令报文)的转发;并且,CPU201通过枚举发现中间设备204具备PF的功能(PF2031B’)和VF的功能(VF20311B’),可以将中间设备204作为PCIe链路上的一个支持Virtio的网络适配器,并通过中间设备204实现报文(数据报文或命令报文)的转发。中间设备204可以根据存储的对应关系,实现对接收到的报文在中间设备204与网络适配器203之间的转发。
[0188] CPU202对中间设备204进行枚举的实现过程与上述CPU201对中间设备204进行枚举的过程类似。例如,在CPU202作为PCIe拓扑结构的根节点进行PCIe枚举时,首先枚举到PCIe switch20441;并通过PCIe switch20441进一步枚举,通过子端点端口20443发现PF2032A’并配置VF20321A’,并通过该PF2032A’将中间设备204识别为支持SR-IOV的端点设备;通过子端点端口20442发现PF2032B’并配置VF20321B’,并通过该PF2031B’将中间设备204识别为支持Virtio的端点设备。CPU202在完成枚举后,可以通过TLP报文将PF2032A’的BDF信息和Bar空间地址信息,VF20321A’的BDF信息和Bar空间地址信息,PF2032B’的BDF信息和Bar空间地址信息,以及VF20321B’的BDF信息和Bar空间地址信息,发送给控制器2041。
控制器2041将PF2032A’的BDF与PF2032的BDF之间的对应关系,VF20321A’的BDF与VF20321的BDF之间的对应关系,PF2032B’的BDF与PF2032的BDF之间的对应关系,以及VF20321B’的BDF与VF20321的BDF之间的对应关系存储在存储器2042中。同时,控制器2041将PF2032A’的Bar空间地址与PF2032的Bar空间地址的对应关系,VF20321A’的Bar空间地址与VF20321的Bar空间地址之间的对应关系,PF2032B’的Bar空间地址与PF2032的Bar空间地址之间的对应关系,以及VF20321B’的Bar空间地址与VF20321的Bar空间地址之间的对应关系存储在存储器2042中。
[0189] 这样,PF2032A’或PF2032B’可以被看作PF2032在中间设备204中的代理,或者,PF2032A’或PF2032B’为中间设备204中与PF2032对应的虚拟的PF;VF20321A’或VF20321B’可以被看作VF20321在中间设备204中的代理;或者,VF20321A’或VF20321B’为中间设备204中与VF20321对应的虚拟的VF。CPU202通过枚举发现中间设备204具备PF的功能(PF2032A’)和VF的功能(VF20321A’),并将中间设备204作为PCIe链路上的一个支持SR-IOV的网络适配器,可以通过中间设备204实现报文(数据报文或命令报文)的转发;并且,CPU202通过枚举发现中间设备204具备PF的功能(PF2032B’)和VF的功能(VF20321B’),并将中间设备204作为PCIe链路上的一个支持Virtio的网络适配器,可以通过中间设备204实现报文(数据报文或命令报文)的转发。中间设备204根据存储的对应关系,实现对接收到的报文在中间设备204与网络适配器203之间的转发。
[0190] 示例性的,中间设备204中支持SR-IOV的端点设备包含的代理单元(例如PF’或VF’)的个数与网络适配器203中功能单元(例如PF或VF)的个数相同,支持Virtio的端点设备包含的代理单元(例如PF’或VF’)的个数与网络适配器203中功能单元(例如PF或VF)的个数也相同。因此,中间设备204中包含的代理单元的数量可以是网络适配器203中功能单元数量的两倍。当然,在具体实现时,中间设备204中包含的代理单元(例如PF’或VF’)的个数与网络适配器203中功能单元(例如PF或VF)的个数也可以不同,只要中间设备中有相应的代理单元(支持SR-IOV的端点设备包含的代理单元或支持Virtio的端点设备包含的代理单元)用于代理网络适配器203中的功能单元,以实现虚拟机(例如虚拟机2011或虚拟机2012)与网络适配器203之间报文的转发,都在本申请实施例覆盖的范围之内。
[0191] 以图2A所示的服务器200为例,不同虚拟机的报文通过中间设备204转发到网络适配器203时,可能会存在冲突的问题。例如虚拟机2011通过子端点端口20433发送报文,虚拟机2012通过子端点端口20432发送报文,两个报文都需要中间设备204转发时,控制器2041需要确定报文转发的先后顺序。并且,网络适配器203通过中间设备204发送给不同虚拟机的报文,需要确定具体的路径以将报文转发给目的虚拟机。例如网络适配器203通过中间设备分别发送向虚拟机2011和虚拟机2012发送报文时,控制器2041需要确定发送报文的路径,即需要确定是选择从子端点端口20432到PCIe switch20431的路径,还是选择子端点端口20433到PCIe switch20431的路径,才能将报文发送到目的虚拟机。
[0192] 为实现中间设备204在虚拟机与网络适配器之间报文有效的转发,本申请实施例提供的中间设备204还包括通道控制的功能,以解决上述报文转发所存在的冲突和路径选择的问题。如图2B所示,中间设备204中的控制器2041还包括通道控制模块20411和通道控制模块20412。通道控制模块20411用于实现虚拟机2011和虚拟机2012收发的报文,与网络适配器203之间转发的控制;通道控制模块20412用于实现虚拟机2021和虚拟机2022收发的报文,与网络适配器203之间转发的控制。
[0193] 以通道控制模块20411实现通道控制为例,当虚拟机2011和虚拟机2012同时通过中间设备204转发报文到网络适配器203时,通道控制模块20411可以通过轮循的方式,分别转发待发送的报文;或者,通道控制模块20411可以将接收到的报文存入预先设置的转发队列中,并按照队列的发送机制(例如按照先进先出的机制)转发队列中的报文。可选的,通道控制模块20411也可以按照接收到的报文的先后顺序,分别转发虚拟机2011和虚拟机2012发送的报文。可以理解,前述通道控制模块20411实现通道控制的方式只是举例,在具体实现时,也可以采用其它方式实现通道的控制。
[0194] 当虚拟机2011和虚拟机2012分别通过中间设备204接收网络适配器203发送的报文时,控制器2041需要确定转发报文的路径,以将报文转发到目的虚拟机。
[0195] 通道控制模块20411可以通过设置通道选择开关的方式,实现路径的选择。示例性的,通道控制模块20411设置的通道选择开关可以是一个通道控制寄存器。例如,该通道控制寄存器可以是中间设备204的Bar空间中的寄存器。本申请实施例中,所述Bar空间中的寄存器,包括但不限于子端点端口20432的Bar空间中的寄存器,或子端点端口20432的Bar空间中的寄存器。该通道控制寄存器可以是一个2比特(bit)的寄存器,例如:bit为00表示两路通道都打开;bit为01表示支持SR-IOV的子端点端口20432的通道打开,支持virtio的子端点端口20433的通道关闭;bit为10表示支持SR-IOV的子端点端口20432的通道关闭,支持virtio的子端点端口20433的通道打开;bit为11表示两条通道都关闭。可选的,可以由虚拟机2011的网卡驱动或虚拟机2012的网卡驱动,通过发送TLP报文的方式实现对通道控制寄存器的配置。当该通道控制寄存器被配置后,中间设备204在转发网络适配器203发送的报文时,能够根据该通道控制寄存器的配置,确定具体的通道并发送相应的报文。
[0196] 例如,支持SR-IOV的虚拟机2012被创建后,其网卡驱动配置作为通道控制寄存器的通道控制模块20411,将bit设置为01。这样,网络适配器203发送给虚拟机2012的报文,经过通道控制模块20411后,将包含支持SR-IOV的子端点端口20432的路径确定为转发该报文的路径,并通过子端点端口20432将该报文发送给PCIe switch20431,并经由PCIe switch20431转发给虚拟机2012。再例如,支持Virtio的虚拟机2011被创建后,其网卡驱动配置作为通道控制寄存器的通道控制模块20411,将bit设置为10。这样,网络适配器203发送给虚拟机2011的报文,经过通道控制模块20411后,将包含支持Virtio的子端点端口20433的路径确定为转发该报文的路径,并通过子端点端口20433将该报文发送给PCIe switch20431,并经由PCIe switch20431转发给虚拟机2011。
[0197] 在具体实现时,每个虚拟机收发的报文都会通过网络适配器203中对应的一个VF实现转发。因此,每个虚拟机在中间设备204的Bar空间的寄存器中,都有一个对应的通道控制寄存器。这样,中间设备204转发网络适配器203发送给虚拟机的报文时,会根据每个虚拟机对应的通道控制寄存器所配置的路径实现路径的选择。每个虚拟机对应的通道控制寄存器可以通过不同的标识予以区分,在一种实现方式中,可以通过网络适配器203中每个VF的BDF号作为区分每个通道控制寄存器的标识。由于从网络适配器203向虚拟机发送的报文,都会携带发送该报文的VF的BDF号,控制器2041可以根据接收到的报文中的VF的BDF号确定具体的通道控制寄存器,并进而根据确定的通道控制寄存器配置的转发路径,实现报文的转发。
[0198] 需要说明的是,上述通道控制寄存器默认将两路通道都打开,即相关的bit设置为00,这样能够保证CPU201在枚举时,能够分别枚举到子端点端口20432和子端点端口20433。
[0199] 上述图2A的描述中,是以CPU201支持运行两个虚拟机(虚拟机2011和虚拟机2012)为例描述的实现方式。在具体实现时,当CPU201支持运行一个虚拟机时,该虚拟机可以是采用SR-IOV技术的虚拟机,也可以是采用Virtio技术的虚拟机,无论该虚拟机采用哪种虚拟化技术,都可以结合上述图2A中的实现方式,例如中间设备204的实现方式,实现不同虚拟化技术的虚拟机所收发报文的转发,而CPU201不需要做额外的配置,实现了不同虚拟化技术的虚拟机资源池的归一,提高了CPU等资源的利用率。
[0200] 上述图2B中是以两个通道控制模块为例描述中间设备204实现通道控制的实现方式。在具体实现时,还可以通过其它的方式实现通道的控制。例如,图2B中的两个通道控制模块可以合一,也可以通过不同于图2B中通道控制模块的另外两个通道控制模块实现通道的控制。当通过一个通道控制模块实现通道控制时,通道控制寄存器的比特可以为3比特,该3比特的寄存器能够标识4种不同路径的选择控制。当通过另外两个通道控制模块实现通道控制时,其中一个通道控制模块可以用于根据报文中携带的VF的BDF号确定具体的端点端口(例如端点端口2043或端点端口2044),另一个通道控制模块再通过两个比特的寄存器实现不同路径的选择。具体实现时的细节,可以结合上述通道控制模块20411或通道控制模块20412的实现方式来实现,不再赘述。
[0201] 需要说明的是,由于Virtio协议中描述Virtio是通过PCIe总线实现的,在其PCIe配置空间中的Vendor Id为0x1AF4,Device Id为0x1000。并且,因为代理单元VF’依附于代理单元PF’的原因,VF’配置空间中的Vendor Id和Device Id与PF’的配置空间中的Vendor Id和Device Id是相同的。因此,当采用Virtio技术的虚拟机切换为采用SR-IOV技术的虚拟机,对中间设备204内部已经配置的路径控制实现切换时,是以PF’为粒度切换的。例如图2B中,网络适配器203中实现2个PF(PF2031和PF3032),每个PF可以关联多个VF(虽然图2B以关联1个VF为例显示);中间设备204实现4个端点设备,其中两个是支持SR-IOV的端点设备,两个支持Virtio的端点设备。每个端点设备都有1个PF’,以及关联该PF’的VF’。当虚拟机2012切换为采用Virtio技术的虚拟机时,其通道控制模块需要做路径控制的切换,该路径控制的切换是以PF’为粒度进行切换的,即将包含子端点端口20432的路径,切换为包含子端点端口20433的路径。
[0202] 可以理解,如果Virtio的协议可以被修改,使得VF’的Vendor Id可以不同于PF’的Vendor Id,参考上述实现方式,也可以实现以VF’为粒度的切换,不再赘述。
[0203] 本申请实施例中,当PCIe switch20431转发虚拟机2011或虚拟机2012的报文时,会根据报文中携带的BDF号和/或Bar空间地址选择转发路径。其中,对于PCIe的Configue报文,PCIe switch20431仅根据报文中携带的BDF号选择转发的路径,而对于PCIe的memory读写报文,PCIe switch20431还需要结合报文中的Bar空间地址选择转发的路径。由于CPU201在进行PCIe枚举时,会为通过子端点端口20432发现的代理单元(PF’或VF’)分配相应的BDF号和Bar空间地址,也会为通过子端点端口20433发现的代理单元(PF’或VF’)分配相应的BDF号和Bar空间地址。CPU201分配的这些BDF号和Bar空间地址,与子端点端口之间的对应关系,会被记录在PCIe switch20431的PCIe配置空间中。当PCIe switch20431接收到需要转发的包含BDF号和/或Bar空间地址的报文时,根据记录的对应关系,通过相应的子端点端口转发报文。例如,虚拟机2011发送的memory读写报文,会携带VF20311B’的BDF号和Bar空间地址等信息;PCIe switch20431在接收到虚拟机2011发送的memory读写报文时,根据报文中的BDF号和Bar空间地址信息,以及记录的对应关系确定需要通过子端点端口20433转发该报文。PCIe switch20431接收到通过子端点端口20433转发的报文时,也会根据PCIe配置空间中记录的对应关系和报文中携带的地址信息,将报文发送给相应的虚拟机,不再赘述。
[0204] 上述是以虚拟机2011和虚拟机2012为例,对虚拟机收发报文时,路径选择或控制的实现过程进行的描述,对于虚拟机2021和虚拟机2022收发报文时的方式,与上述类似,不再赘述。
[0205] 当支持运行Virtio协议的虚拟机2011或虚拟机2021需要发送报文时,中间设备204需要将Virtio协议的报文转换为中间设备204与网络适配器203之间所采用的协议的报文,才能实现报文在中间设备204与网络适配器203之间的转发。如图2C所示,中间设备204还包括转换模块2046,该转换模块2046用于实现运行Virtio协议的虚拟机(例如虚拟机
2011或虚拟机2021)发送的报文的转换,使得转换后的报文能够在中间设备204与网络适配器203之间转发。
[0206] 中间设备204与网络适配器203之间报文转发的方式,包括但不限于普通DMA命令的方式或NVMe的方式。下面分别就中间设备204与网络适配器203之间通过普通DMA命令的方式和NVMe的方式传输报文为例,对转换模块2046实现转换的方式进行描述。对于中间设备204与网络适配器203之间实现的其它转发方式,可以参照下述转换为普通DMA命令的方式或NVMe的方式来实现,不再赘述。
[0207] 一、转换模块2046将Virtio协议的报文转换为普通DMA命令报文的方式[0208] 1.1:虚拟机2011向网络适配器203发送报文时的转换方式;
[0209] 当虚拟机2011向网络适配器203发送报文时,根据待发送的报文在内存空间的地址信息,封装成表示该内存空间地址的描述符,并根据该描述符构造成Virtio Vring,写入子端点端口20433的Bar空间中以通知中间设备204。中间设备204中的转换模块2046通过子端点端口20433读取所述描述符的信息,并根据读取到的描述符信息发起DMA操作以获取所述描述符,并生成包含所述描述符DMA的命令。可选的,可以按照队列的方式生成DMA命令。所生成的DMA命令通过地址映射(控制器2041实现的代理单元与功能单元之间地址的映射)后通过根端口2045发送给网络适配器203,网络适配器203根据获取到的DMA命令中的描述符,发起TLP memory读操作,通过中间设备204从所述描述符对应的内存空间中读取数据。
[0210] 在另外一种实现方式中,转换模块2046在获取所述描述后,也可以直接从所述描述符对应的内存空间中读取数据,并将获取的数据存入中间设备204的一段存储空间(例如存储器2042的一段存储空间)中,并基于该段存储空间生成新的描述符,发送包含该新的描述符的DMA命令给网络适配器203。网络适配器203根据接收到的DMA命令,从中间设备204的该段存储空间中获取相应的数据。
[0211] 1.2:虚拟机2011从网络适配器203接收报文时的转换方式。
[0212] 虚拟机2011预先预留一段空的内存空间,将该内存空间的地址信息封装成表示该缓存空间地址的描述符,并根据该描述符构造成Virtio Vring,写入子端点端口20433的Bar空间中以通知中间设备204。中间设备204中的转换模块2046通过子端点端口20433读取所述描述符的信息,并根据读取到的描述符信息发起DMA操作以获取所述描述符,并生成包含所述描述符DMA的命令。可选的,可以按照队列的方式生成该DMA命令。所述生成的DMA命令通过地址映射后通过根端口2045发送给网络适配器203后,网络适配器203根据该DMA命令中的描述符,发起TLP memory写操作,通过中间设备204将需要发送的报文直接写入虚拟机2011准备好的该段内存空间中。
[0213] 在另外一种实现方式中,转换模块2046在获取所述描述后,也可以在中间设备204中预留一段存储空间(例如存储器2042)中,并基于该段存储空间生成新的描述符,发送包含该新的描述符的DMA命令给网络适配器203。网络适配器203根据接收到的DMA命令,将待发送的数据写入中间设备204的该段存储空间中。转换模块2046再将该段存储空间中的数据,写入虚拟机2011准备好的内存空间中。
[0214] 二、转换模块2046将Virtio协议的报文转换为NVMe报文的方式
[0215] 2.1:虚拟机2011向网络适配器203发送报文时的转换方式;
[0216] 当虚拟机2011需要向网络适配器203发送报文时,根据待发送的报文在内存空间的地址信息,封装成表示该内存空间地址的描述符,并根据该描述符构造成Virtio Vring,写入子端点端口20433的Bar空间中以通知中间设备204。中间设备204中的转换模块2046通过子端点端口20433读取所述描述符的信息,并根据读取到的描述符信息发起DMA操作以获取所述描述符,并按照NVMe协议生成包含该描述符的DMA命令,转换模块2046将生成的DMA命令写入发送队列中,并将发送队列的命令指针和基地址写入所网络适配器203的doorbell寄存器中以发送TLP报文。控制器2041根据存储的代理单元与功能单元之间地址的对应关系,将该TLP报文的代理单元的地址替换为对应的功能单元的地址,并将替换地址后的TLP报文发送网络适配器。网络适配器203根据所述TLP报文中发送队列的命令指针和基地址,从发送队列获取该DMA命令中的描述符,并发起TLP memory读操作,通过中间设备直接从所述描述符对应的内存中读取数据。在完成数据读取后,网络适配器203将读数据完成的结果写入完成队列中,并向中间设备204发送中断通知执行完成。
[0217] 在另外一种实现方式中,转换模块2046在获取所述描述后,也可以直接获取待发送的数据并存入中间设备204的一段存储空间(例如存储器2042中的一段存储空间)中,并基于该段存储空间生成新的描述符,将包含该新的描述符的DMA命令写入发送队列中,并将发送队列的命令指针和基地址写入所网络适配器203的doorbell寄存器中以发送TLP报文。控制器2041根据存储的代理单元与功能单元之间地址的对应关系,将该TLP报文的代理单元的地址替换为对应的功能单元的地址,并将替换地址后的TLP报文发送网络适配器。网络适配器203根据接收到的DMA命令,从中间设备204的该段存储空间中获取相应的数据。
[0218] 2.2:虚拟机2011从网络适配器203接收报文时的转换方式。
[0219] 虚拟机2011预先预留一段空的内存空间,将该内存空间的地址信息封装成表示该缓存空间地址的描述符,并根据该描述符构造成Virtio Vring,写入子端点端口20433的Bar空间中以通知中间设备204。中间设备204中的转换模块2046通过子端点端口20433读取所述描述符的信息,并根据读取到的描述符信息发起DMA操作以获取所述描述符,并按照NVMe协议生成包含该描述符的DMA命令,将生成的DMA命令写入发送队列中,并将发送队列的命令指针和基地址写入所网络适配器203的doorbell寄存器中以发送TLP报文。控制器2041根据存储的代理单元与功能单元之间地址的对应关系,将该TLP报文的代理单元的地址替换为对应的功能单元的地址,并将替换地址后的TLP报文发送网络适配器。网络适配器
203根据所述发送队列的命令指针和基地址,获取发送队列中DMA命令中的描述符,并发起TLP memory写操作,通过中间设备204将需要发送的报文直接写入虚拟机2011准备好的内存空间中。在完成数据读取后,网络适配器203将写数据完成的结果写入完成队列中,并向中间设备204发送中断通知执行完成。
[0220] 在另外一种实现方式中,转换模块2046在获取所述描述后,也可以在中间设备204中预留一段存储空间(例如存储器2042中的一段存储空间)中,并基于该段存储空间生成新的描述符,将包含该新的描述符的DMA命令写入发送队列中,并将发送队列的命令指针和基地址写入所网络适配器203的doorbell寄存器中以发送TLP报文。控制器2041根据存储的代理单元与功能单元之间地址的对应关系,将该TLP报文的代理单元的地址替换为对应的功能单元的地址,并将替换地址后的TLP报文发送网络适配器。网络适配器203根据接收到的DMA命令,将待发送的数据写入中间设备204的该段存储空间中。转换模块2046再将该段存储空间中的数据,写入虚拟机2011准备好的内存空间中。
[0221] 由于中间设备204是通过FPGA、ASIC或FPGA+ASIC等硬件实现,通过在中间设备204中实现上述转换模块2046的功能,实现了Virtio协议报文转发的硬卸载。不仅转发的性能优于软件实现Virtio协议报文的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0222] 需要说明的是,上述是对图2C中采用Virtio技术的虚拟机2011实现协议转换的过程的描述,对于采用Virtio技术的虚拟机2021实现协议转换的过程,与上述实现方式类似,不再赘述。
[0223] 在一种可选的实现方式中,图2C中中间设备204的控制器2041也可以部署在中间设备204的外部。如图2D所示,控制器2041与中间设备204通过总线(例如PCIe总线)连接。示例性的,图2D中的控制器2041可以由SOC实现。图2D是以控制器2041中包括存储器2042为例进行说明;在具体实现时,存储器2042也可以位于控制器2041的外部。图2D中的存储器2042可以通过RAM等存储介质实现,可以用于存储PF的BDF与PF’的BDF、VF的BDF与VF’的BDF、PF的Bar空间地址与PF’的Bar空间地址以及VF的Bar空间地址与VF’的Bar空间地址之间的对应关系。并且,图2D中控制器2041也能够实现图2C中通道控制模块20411和通道控制模块20412的功能,图2D为了示图的简洁,未示出通道控制模块20411和通道控制模块20412。
[0224] 图2A至图2D是以一个CPU支持运行两个虚拟机,网络适配器支持两个PF,每个PF关联一个VF为例,对本申请实施例提供的技术方案进行的描述。在具体实现时,一个CPU可能支持运行多个虚拟机,一个网络适配器可能支持多个PF,每个PF可能关联多个VF。为进一步清楚地描述本申请实施例提供的技术方案,下面以服务器包括两个CPU和一个网络适配器,每个CPU支持运行128个VM,网络适配器支持4个PF,每个PF关联64个VF,通信总线为PCIe总线为例,对本申请实施例提供的中间设备的实现方式做进一步的描述。
[0225] 如图3所示,服务器300包括CPU301、CPU302、中间设备304和网络适配器303。其中,中间设备304与上述中间设备204类似,可以通过FPGA、ASIC或FPGA+ASIC等设备实现。网络适配器303是物理网卡,通过PCIe总线与中间设备304连接。CPU301与CPU302之间通过通信总线305连接并通信,且CPU301和CPU302分别与中间设备304通过PCIe总线连接。其中,通信总线305包括但不限于QPI总线、UPI总线或IAL总线等。
[0226] 端点端口3043是中间设备304与CPU301连接的端口,端点端口3044是中间设备304与CPU302连接的端口。端点端口3043包括PCIe switch30431、子端点端口30432和子端点端口30433;端点端口3044包括PCIe switch30441、子端点端口30442和子端点端口30443。子端点端口30432和子端点端口30443是支持SR-IOV的端点端口,CPU(CPU301、CPU302)在进行PCIe枚举时,能够通过子端点端口30432和子端点端口30443识别中间设备304是支持SR-IOV的端点设备;子端点端口30433和子端点端口30442是支持Virtio的端点端口,CPU(CPU301、CPU302)在进行PCIe枚举时,能够通过子端点端口30433和子端点端口30442识别中间设备304是支持Virtio的端点设备。
[0227] 网络适配器303支持SR-IOV,网络适配器303的端点端口3032通过PCIe总线与中间设备304的根端口3045连接。网络端口3033是网络适配器303与网络连接的端口。
[0228] 可以理解,图3只是为描述的方便,只显示了CPU和网络适配器等硬件资源,在具体实现时,图3所示的服务器300还可以包括内存、硬盘等硬件资源,以及需要运行的操作系统、应用程序等软件资源。
[0229] 图3中针对网络适配器303中的一个PF和一个VF的实现方式,可以参考上述图2A至图2D所描述的任何一个实现方式中网络适配器203包括一个PF和一个VF的实现方式来实现;例如可以参考上述图2A至图2D所描述的任何一个实现方式中网络适配器203包括的PF2031和VF20311的实现方式来实现。针对中间设备304中一个PF’和一个VF’的实现方式,也可以参考上述图2A至图2D所描述的任何一个中间设备204中的一个PF’和一个VF’的实现方式来实现;例如,支持SR-IOV的代理单元可以参考上述图2A至图2D所描述的任何一个中间设备204中的PF2031A’和VF20311A’的实现方式来实现,支持Virtio的代理单元可以参考上述图2A至图2D所描述的任何一个中间设备204中的PF2031B’和VF20311B’的实现方式来实现。
[0230] 图3中,CPU301支持运行VM0-VM127,CPU302支持运行VM128-255。VM0-VM255中的任何一个可以是采用SR-IOV技术的虚拟机,也可以是采用Virtio技术的虚拟机。一个VM具体是采用SR-IOV技术还是采用Virtio技术,是由用户在创建虚拟机时选择并配置的。例如,服务器300基于用户创建虚拟机时选择的虚拟化技术,创建相应的虚拟机。
[0231] 网络适配器303包括PF0-PF3,每个PF关联64个VF:VF0-VF63。示例性的,PF0关联的VF和PF1关联的VF分别对应于VM0-127,用于实现VM0-127中报文(例如数据报文或命令报文)的转发;PF2关联的VF和PF3关联的VF分别对应于VM128-255,用于实现VM128-255中报文(例如数据报文或命令报文)的转发。CPU301和CPU302中分别运行相应的PF驱动和VF驱动以支持相应的VM完成相应的功能。
[0232] 可以理解,只是为方便描述,图3中CPU301支持运行VM0-VM127,CPU302支持运行VM128-255,且服务器300中的VM与网络适配器303中的VF数量相同且一一对应。在具体实现时,CPU301和CPU302中运行的VM的数量也可以与网络适配器303中VF的数量不同。例如,CPU301支持运行100个VM,该100个VM分别与100个VF对应,使得该100个VM分别通过对应的VF实现数据报文或命令报文的转发。本申请实施例不限定服务器300中运行的VM的数量,或网络适配器303中PF或VF的数量,只要VM有相应的VF实现数据报文或命令报文的转发的即可。
[0233] 以为图3中的中间设备304建立映射表的方法为例进行说明,如图4A所示,该方法包括:
[0234] 步骤400:中间设备304枚举网络适配器303;
[0235] 当服务器300上电时,中间设备304作为Root complex通过端点端口3032枚举网络适配器303。
[0236] 示例性的,可以是中间设备304中的控制器3041实现Root complex中的Host bridge的功能,实现对网络适配器303的PCIe枚举。
[0237] 步骤402:中间设备304获取网络适配器303中功能单元(PF和VF)的信息;
[0238] 示例性的,中间设备304中的控制器3041通过根端口3045对网络适配器303进行PCIe枚举时,首选枚举到的是网络适配器303中的PF,即PF0-PF3。控制器3041使能各个PF的SRIOV配置空间的VF Enable寄存器,配置VF的属性,进一步枚举到每个PF关联的64个VF。这样,控制器3041通过PCIe枚举,发现网络适配器303中包括4个PF,以及每个PF关联的64个VF。
[0239] 步骤404:中间设备304将各个功能单元的BDF信息写入BDF信息表格中,并将各个功能单元的Bar空间地址写入Bar空间地址信息表中;
[0240] 各个功能单元的BDF信息,包括各个PF的BDF信息和各个VF的BDF信息,各个功能单元的Bar空间地址包括各个PF的Bar空间地址和各个VF的Bar空间地址。
[0241] 例如,中间设备304中的控制器3041根据步骤402获取的网络适配器303中各个PF的BDF信息和各个VF的BDF信息,以BDF信息表格的形式写入存储器3042中。所述BDF信息表格可以如图4B所示。需要说明的是,图4B只是BDF信息表格的一种具体实现方式,例如以PF和VF的依次顺序为索引记录PF和VF的BDF信息。并且,图4B只是显示了PF0以及与PF0关联的VF0-63的信息,对于PF1-3以及其关联的VF的信息在BDF信息表格中记录的形式,与PF0以及与PF0关联的VF0-63记录的形式类似,不再赘述。
[0242] 控制器3041还将获取的各个PF的Bar空间地址信息,以及各个VF的Bar空间地址信息,以Bar空间地址信息表格的形式写入存储器3042中。图4C所示的Bar空间地址信息表,记录了PF的Bar空间地址信息和VF的Bar空间地址信息。同样的,图4C只是显示了PF0的Bar空间地址信息,以及与PF0关联的VF0-63的Bar空间地址信息,对于PF1-3以及其关联的VF的Bar空间地址信息的记录形式,与PF0以及与PF0关联的VF0-63记录的形式类似。
[0243] 本申请实施例不限定记录BDF信息或Bar空间地址信息的具体形式,对于其它的实现方式,例如根据BDF标号的方式建立索引以建立BDF信息表等实现方式,也在本申请实施例保护的范围之内。
[0244] 步骤406:CPU(CPU301、CPU302)枚举中间设备304,并将枚举到的各个代理单元的BDF信息,以及各个代理单元的Bar空间地址信息发送给中间设备304;
[0245] 其中,各个代理单元的BDF信息包括各个PF’的BDF信息和各个VF’的BDF信息,各个代理单元的Bar空间地址信息包括各个PF’的Bar空间地址信息和各个VF’的Bar空间地址信息。
[0246] 可选的,CPU(CPU301、CPU302)可以通过TLP报文将各个代理单元的BDF信息和Bar空间地址信息发送给中间设备304。
[0247] 具体的,CPU301或CPU302在枚举中间设备304时,枚举到的是多个PF’和VF’。例如,CPU301枚举到支持SR-IOV的PFA’和VFA’以及枚举到支持Virtio的PFB’和VFB’。
[0248] 作为一种实现方式,CPU301枚举到2个支持SR-IOV的PFA’和128个支持SR-IOV的VFA’,并枚举到2个支持Virtio的PFB’和128个支持Virtio的VFB’。CPU302也枚举到2个支持SR-IOV的PFA’和128个SR-IOV的VFA’,并枚举到2个支持Virtio的PFB’和128个支持Virtio的VFB’。这样,CPU301枚举到256个支持SR-IOV的代理单元,CPU302枚举到256个支持Virtio的代理单元。因此,中间设备204中需要实现的代理单元的个数是网络适配器203中功能单元个数的两倍。
[0249] 对于枚举过程中每个PFA’/VFA’相关信息的获取,或PFB’/VFB’相关信息的获取,可以参考上述图2A中CPU201或CPU202枚举中间设备204时相应PF’或VF’相关信息获取方式的实现方式来实现,不再赘述。
[0250] 示例性的,CPU也可以通过TLP报文之外的其它报文,例如能够用于传输地址信息的其它报文,或根据UPI协议用于传输地址信息的其它报文,将枚举到的各个代理单元的BDF信息,以及各个代理单元的Bar空间地址信息发送给中间设备304。
[0251] 步骤408:中间设备304根据接收到的CPU(CPU301、CPU302)发送的各个代理单元的BDF信息,以及各个代理单元的Bar空间地址信息存储在存储器3042中,建立每个代理单元的地址与网络适配器303中每个功能单元的地址之间的对应关系。
[0252] 具体的,中间设备304可以根据接收到的CPU(CPU301、CPU302)发送的TLP报文,将各个PF’(包括支持SR-IOV的PFA’和支持Virtio的PFB’)的BDF信息和各个VF’(包括支持SR-IOV的VFA’和支持Virtio的VFB’)的BDF信息,以及所述各个PF’的Bar空间地址和所述各个VF’的Bar空间地址信息存储在存储器3042中,并建立每个PF’的地址与网络适配器303中每个PF的地址的对应关系,以及每个VF’的地址与网络适配器中每个VF的地址的对应关系。
[0253] 示例性的,CPU301通过TLP报文将支持SR-IOV的PF0A’和PF1A’的地址信息,PF0A’关联的VF0A’-VF63A’的地址信息,以及PF1A’关联的VF64A’-VF127A’的地址信息发送给中间设备304后,控制器3041在存储器3042的BDF信息表和Bar空间地址信息表中记录PF0A’、PF1A’、VF0A’-VF63A’以及VF64A’-VF127A’的信息,以建立每个PFA’的地址与每个PF的地址的对应关系,以及每个VFA’的地址与每个VF的地址的对应关系。VF0A’-VF127A’可以分别与VM0-127对应,可以分别被用于实现采用SR-IOV技术的VM0-127中数据报文或命令报文的转发。图4D为控制器3041建立的PFA’与PF之间的BDF信息表,以及VFA’与VF之间的BDF信息表的示意图。图4E为控制器3041建立的PFA’与PF之间的Bar空间地址,以及VFA’与VF之间的Bar空间地址之间对应关系示意图。
[0254] CPU301通过TLP报文将支持Virtio的PF0B’和PF1B’的地址信息,PF0B’关联的VF0B’-VF63B’的地址信息,以及PF1B’关联的VF64B’-VF127B’的地址信息发送给中间设备304后,控制器3041在存储器3042的BDF信息表和Bar空间地址信息表中记录PF0B’、PF1B’、VF0B’-VF63B’以及VF64B’-VF127B’的信息,以建立每个PFB’的地址与每个PF的地址之间的对应关系,以及每个VFB’的地址与每个VF的地址之间的对应关系。VF0B’-VF127B’可以分别与VM0-127对应,可以分别被用于实现采用Virtio技术的VM0-127中数据报文或命令报文的转发。图4F为控制器3041建立的PFB’与PF,以及VFB’与VF之间的BDF信息表的示意图。图4G为控制器3041建立的PFB’与PF,以及VFB’与VF之间的Bar空间地址之间对应关系示意图。
[0255] 需要说明的是,图4D至图4G只是示意性的显示了部分对应关系,对于未在图4D至[0256] 图4G中显示的PF’与PF,以及VF’与VF之间的对应关系,与图示中显示的方式类似。
[0257] 类似的,CPU302可以通过TLP报文将支持SR-IOV的PF’的地址信息和VF’的地址信息,以及支持Virtio的PF’的地址信息和VF’的地址信息发送给中间设备304。控制器3041在存储器3042的BDF信息表和Bar空间地址信息表中分别建立并存储相应的PF’与PF之间的对应关系,以及VF’与VF之间的对应关系。不再赘述。
[0258] 上述实现方式中,是支持SR-IOV的代理单元(例如PFA’或VFA’)和支持Virtio的代理单元(例如PFB’或VFB’),分别代理网络适配器303中的同一功能单元(例如同一PF或同一VF)为例进行描述的。在具体实现时,支持SR-IOV的代理单元(例如PFA’或VFA’)和支持Virtio的代理单元(例如PFB’或VFB’),也可以代理网络适配器303中的不同的功能单元(例如不同的PF或不同的VF)的对应关系。当网络适配器303中的功能单元足够多时,可以由不同的代理单元代理不同的功能单元,以实现虚拟机与网络适配器之间报文的转发。可选的,当支持SR-IOV的代理单元(例如PFA’或VFA’)和支持Virtio的代理单元(例如PFB’或VFB’),分别代理网络适配器303中的同一功能单元(例如同一PF或同一VF),能够简化对代理单元的配置和管理。
[0259] 需要说明的是,上述图3结合图4A-图4G所描述的实现方式,主要对中间设备304建立多个代理单元(PF’或VF’)的地址与多个功能单元(PF或VF)的地址之间对应关系的实现方式进行的描述。图3所示服务器300中的中间设备304基于建立的多个代理单元(PF’或VF’)的地址与多个功能单元(PF或VF)的地址之间对应关系,同样能够实现采用SR-IOV技术的虚拟机与网络适配器303之间报文的转发,以及采用Virtio技术的虚拟机与网络适配器303之间报文的转发。具体的实现方式,可以参照图2A至图2D中服务器200的实现方式来实现,例如:CPU301枚举端点端口3043的方式可以参考上述实现方式中CPU201枚举端点端口
2043的方式来实现,CPU302枚举端点端口3044的方式可以参考上述实现方式中CPU202枚举端点端口2044的方式来实现,中间设备304枚举网络适配器303的实现方式可以参考上述实施例中所述的中间设备204枚举网络适配器203的实现方式来实现;通道控制模块30411可以参照上述实施例中通道控制模块20411的实现方式来实现,通道控制模块30412可以参照上述实施例中通道控制模块20412的实现方式来实现,转换模块3046可以参照上述实施例中转换模块2046的实现方式来实现等,不再赘述。
[0260] 图5为本申请实施例提供的一种报文转发方法的流程示意图。示例性的,图5所示的方法,可以通过上述图2A至图2D所示的服务器200实现,也可以通过上述图3所示的服务器300实现。如图5所示,所述方法包括:
[0261] 步骤500:中间设备枚举网络适配器;
[0262] 中间设备枚举网络适配器,可以是中间设备作为PCIe拓扑结构的根节点,枚举网络适配器,获取网络适配器中功能单元的地址信息。其中,网络适配器中的功能单元包括PF和/或VF。
[0263] 具体的,可以参考上述图2A至图2D所描述的中间设备204枚举网络适配器203的实现方式,也可以参考上述图3所述描述的中间设备304枚举网络适配器303的实现方式。
[0264] 步骤502:中央处理器枚举所述中间设备,并将枚举到的代理单元的地址信息发送给所述中间设备;
[0265] 中央处理器枚举所述中间设备,可以是所述中央处理器作为PCIe拓扑结构的根节点,枚举所述中间设备,以获取所述中间设备中代理单元的地址信息。其中,中间设备中的代理单元包括支持SR-IOV的PFA’和/或VFA’,以及支持Virtio的PFB’和/或VFB’。中央处理器在枚举获取到所述中间设备中代理单元的地址信息后,发送给所述中间设备。其中,所述PF’(PFA’或PFB’)资源是网络适配器203中PF资源的代理,所述VF’(VFA’或VFB’)资源是网络适配器203中VF资源的代理;或,所述PF’(PFA’或PFB’)资源为中间设备204中与网络适配器203中PF资源对应的虚拟的PF,所述VF’(VFA’或VFB’)资源为中间设备204中与网络适配器203中VF资源对应的虚拟的VF。
[0266] 具体的,可以参考上述图2A至图2D所描述的CPU(CPU201或CPU202)枚举中间设备204的实现方式,也可以参考上述图3所述描述的CPU(CPU301或CPU302)枚举中间设备304的实现方式。
[0267] 步骤504:所述中间设备建立所述代理单元的地址与所述功能单元的地址之间的对应关系;
[0268] 所述中间设备根据枚举获取到的网络适配器中功能单元的地址信息,以及所述中央处理器发送的代理单元的地址信息,建立所述代理单元的地址与所述功能单元的地址之间的对应关系。
[0269] 具体的,可以参考上述图2A至图2D所描述中间设备204建立对应关系的实现方式,也可以参考上述图3所述描述的中间设备304建立对应关系的实现方式。所述中间设备建立的对应关系表,可以参考图4B至图4G所示的对应关系表。
[0270] 步骤506:虚拟机加载网卡驱动,以配置通道控制;
[0271] 当所述中央处理器中运行的虚拟机加载网卡驱动后,虚拟机的网卡驱动程序根据虚拟机采用的虚拟化技术,进行通道控制的配置。例如,当虚拟机采用SR-IOV技术时,其网卡驱动程序将通道控制寄存器配置为支持SR-IOV的子端点端口所在的路径;当虚拟机采用Virtio技术时,其网卡驱动程序将通道控制寄存器配置为支持Virtio的子端点端口所在的路径。
[0272] 具体的,可参考上述图2B中配置通道控制模块20411或配置通道控制寄存器20412的实现方式来实现通道控制的配置。
[0273] 需要说明的是,创建的虚拟机采用何种虚拟化技术,是用户在创建虚拟机时选择的。用户可以基于业务需求选择需要的虚拟化技术(SR-IOV技术或Virtio技术)以创建虚拟机。当虚拟机被创建后,虚拟机的网卡驱动程序会根据用户选择的虚拟化技术,设置通道控制寄存器。例如,图2A中,CPU201启动加载虚拟机的网卡驱动,服务器200中的虚拟机管理器根据虚拟机2011采用的虚拟化技术为Virtio技术,控制虚拟机2011的网卡驱动设置相应的通道控制寄存器。
[0274] 步骤508:中间设备接收虚拟机发送的报文;
[0275] 中间设备接收虚拟机发送的报文,判断待转发的报文是采用SR-IOV技术的虚拟机发送的报文还是采用Virtio技术的虚拟机发送的报文。以图2A所示的服务器200为例,当中间设备204接收到采用Virtio技术的虚拟机2011发送的报文后,PCIe switch 20431根据报文中携带的BDF号和/或Bar空间地址,通过子端点端口20433转发该报文;当中间设备204接收到采用SR-IOV技术的虚拟机2012发送的报文后,PCIe switch 20431根据报文中携带的BDF号和/或Bar空间地址,通过子端点端口20432转发该报文。
[0276] 步骤510A:对于采用SR-IOV技术的虚拟机发送的报文,透传给控制器;
[0277] 以图2A所示的服务器200为例,虚拟机2012发送的报文通过PCIe switch 20431转发到子端点端口20432,子端点端口20432将该报文透传给控制器2041。
[0278] 步骤510B:对于采用Virtio技术的虚拟机发送的报文,实现报文的协议转换;
[0279] 以图2C所示的服务器200为例,虚拟机2011发送的报文通过PCIe switch 20431转发到子端点端口20433,子端点端口20433将该报文转发到转换模块2046。转换模块2046将子端点端口20433转发的Virtio协议的报文转换为普通DMA命令的报文或NVMe的报文,并将转换后的报文发送给控制器2041。
[0280] 转换模块2046实现协议转换的方式,具体可参考上述关于转换模块2046实现协议转换的方式。
[0281] 步骤512:中间设备根据所述对应关系将报文转发给网络适配器。
[0282] 根据步骤504中建立的对应关系,中间设备中的控制器将所述报文中代理单元的地址,替换为与该代理单元的地址对应的网络适配器中功能单元的地址,并将转换后的报文发送给网络适配器。
[0283] 对于中间设备转发网络适配器发送给虚拟机报文的实现过程,与上述中间设备转发虚拟机发送给网络适配器报文的过程相反。例如,中间设备先根据存储的对应关系将报文中的功能单元的地址转换为中间设备中代理单元的地址,对于网络适配器发送给采用SR-IOV技术的虚拟机的报文,通过相应的子端点端口发送给相应的虚拟机;对于网络适配器发送给采用Virtio技术的虚拟机的报文,需要经过转换模块转换为Virtio协议的报文再通过相应的子端点端口发送给相应的虚拟机。例如,可以参考上述1.2和2.2中描述的协议转换的方式实现报文的协议转换,可以参考上述关于通道控制模块20411或通道控制模块20412的实现方式实现通道的选择,不再赘述。
[0284] 通过上述方法,在一个服务器中CPU既可以加载采用SR-IOV技术的虚拟机,也可以加载采用Virtio技术的虚拟机,这种在一台物理服务器上创建支持不同虚拟化技术的虚拟机的混合模式,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一;同时,由于中间设备204是通过FPGA、ASIC或FPGA+ASIC等硬件实现,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现Virtio协议报文的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0285] 在具体实现时,为有效地实现对应关系的建立,上述步骤500要先于步骤502实施。以图2A中的服务器200为例,中间设备204和网络适配器203在服务器200启动时先上电,中间设备204对网络适配器203进行PCIe枚举,在获取到网络适配器203中的PF和VF信息后,CPU(CPU201、CPU202)上电,再启动对中间设备204的枚举过程。这样,中间设备204能够根据网络适配器203中PF和VF的资源情况,配置相应的PF’和VF’资源。示例性的,上述中间设备
204和网络适配器203在服务器200启动时先上电,CPU(CPU201、CPU202)后上电的方式,包括但不限于将所述中间设备204和网络适配器203的电源与所述CPU(CPU201、CPU202)的电源分开设置并先后上电的方式来实现;或通过控制电路的器件,例如通过复杂可编程逻辑器件(complex programmable logic device,CPLD),控制中间设备204和网络适配器203先上电,再控制CPU(CPU201、CPU202)上电的方式来实现。本申请实施例对具体的实现方式不做限定。
[0286] 需要说明的是,上述是以SR-IOV技术和Virtio技术作为不同的虚拟化技术的在实现资源池归一化方法时进行的描述,对于采用其它虚拟化技术的实现方式,只要是两种不同的虚拟机技术在实现资源池归一时的实现方式,都可以参考本申请实施例上述的实现方式来实现,不再赘述。
[0287] 图6A为本申请实施例提供的一种计算机设备600的结构示意图。如图6A所示,所述计算机设备600包括CPU601、中间设备602和网络适配器603,所述中间设备602通过总线分别与所述CPU601和网络适配器603连接,所述CPU601支持运行虚拟机6011,所述网络适配器603包括多个基于虚拟化技术产生的功能单元;
[0288] 所述CPU601,用于通过枚举所述中间设备602,获取所述中间设备602中支持SR-IOV的第一代理单元的信息和支持Virtio的第二代理单元的信息,分别为所述第一代理单元和所述第二代理单元分配地址信息;其中,所述第一代理单元是所述网络适配器中的第一功能单元的代理,所述第二代理单元分别是所述网络适配器中的第二功能单元的代理,所述第一功能单元与所述第二功能单元是所述网络适配器中的同一功能单元或不同的功能单元;
[0289] 所述中间设备602,用于通过枚举所述网络适配器603,为所述网络适配器603中的第一功能单元和第二功能单元分配地址信息,建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系,以及建立所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;
[0290] 当所述虚拟机6011采用SR-IOV技术时,所述中间设备602用于根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述虚拟机6011与所述网络适配器603之间的报文转发;当所述虚拟机6011采用Virtio技术时,所述中间设备602用于根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述虚拟机6011与所述网络适配器603之间的报文转发。
[0291] 上述计算机设备600中的中间设备602能够包括支持SR-IOV的第一代理单元和支持Virtio的第二代理单元,且所述第一代理单元是所述第一功能单元的代理,所述第二代理单元分别是所述第二功能单元的代理,所述第一功能单元与所述第二功能单元是所述网络适配器中的同一功能单元或不同的功能单元。这样,虚拟机6011既可以采用SR-IOV技术,也可以采用Virtio技术,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一。同时,中间设备602可以是FPGA、ASIC或FPGA+ASIC等芯片分别与CPU601和网络适配器603连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU601资源的占用,提升CPU601资源的利用率。
[0292] 在一种实现方式中,如图6B所示,中间设备602还包括端点端口6021,所述中间设备602通过所述端点端口6021与所述CPU601连接,所述端点端口6021包括交换设备60211,子端点端口60212和子端点端口60213,所述子端点端口60212和所述子端点端口60213分别与所述交换设备60211的下行端口连接;
[0293] 所述CPU601还用于通过枚举获取所述交换设备60211的信息,并通过枚举所述子端点端口60212获取所述第一代理单元的信息,通过枚举所述子端点端口60213获取所述第二代理单元的信息。
[0294] 在一种实现方式中,所述交换设备60211,用于接收所述虚拟机6011发送的第一报文,根据所述第一报文中的地址信息,从所述子端点端口60212和所述子端点端口60213中选择一个以转发所述第一报文。
[0295] 在一种实现方式中,所述中间设备602还包括通道控制模块6022;所述通道控制模块6022,用于实现所述网络适配器603向所述虚拟机6011发送第二报文时转发路径的控制;
[0296] 当所述虚拟机6011采用SR-IOV技术时,所述通道控制模块6022将包含所述子端点端口60212的路径确定为转发所述第二报文的路径;当所述虚拟机6011采用Virtio技术时,所述通道控制模块6022将包含所述子端点端口60213的路径确定为转发所述第二报文的路径。
[0297] 在一种实现方式中,如图6D所示,所述中间设备602还包括转换模块6023;
[0298] 所述转换模块6023,用于将采用Virtio技术的虚拟机6011发送的报文,转换为所述中间设备602与所述网络适配器603之间转发协议的报文,或将所述网络适配器603向采用Virtio技术的虚拟机6011发送的报文转换为支持Virtio协议的报文。
[0299] 在一种实现方式中,所述计算机设备还包括CPU604(图中未示出),所述CPU604支持运行虚拟机6041;
[0300] 所述CPU604通过所述总线分别与所述CPU601和所述中间设备602连接;
[0301] 所述CPU604,用于通过枚举所述中间设备602,获取所述中间设备602中支持SR-IOV的第三代理单元的信息和支持Virtio的第四代理单元的信息,分别为所述第三代理单元和所述第四代理单元分配地址信息;其中,所述第三代理单元是所述网络适配器中的第三功能单元的代理,所述第四代理单元分别是所述网络适配器中第四功能单元的代理,,所述第三功能单元与所述第四功能单元是所述网络适配器中的同一功能单元或不同的功能单元;
[0302] 所述中间设备602,还用于为所述网络适配器603中的第二功能单元分配地址信息,
[0303] 建立所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系,以及建立所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系;
[0304] 当所述虚拟机6041采用SR-IOV技术时,所述中间设备602用于根据所述第三代理单元的地址信息与所述第三功能单元的地址信息之间的对应关系实现所述虚拟机6041与所述网络适配器603之间的报文转发;当所述虚拟机6041采用Virtio技术时,所述中间设备602用于根据所述第四代理单元的地址信息与所述第四功能单元的地址信息之间的对应关系实现所述虚拟机6041与所述网络适配器603之间的报文转发。
[0305] 在一种实现方式中,所述中间设备602还用于根据所述第一功能单元的信息,在所述子端点端口60212中配置所述第一代理单元的信息;根据所述第二功能单元的信息,在所述子端点端口60213中配置所述第二代理单元的信息。
[0306] 在一种实现方式中,所述第一功能单元的地址信息包括所述第一功能单元的BDF信息和所述第一功能单元的Bar空间地址信息;
[0307] 所述第二功能单元的地址信息包括所述第二功能单元的BDF信息和所述第二功能单元的Bar空间地址信息;
[0308] 所述第一代理单元的地址信息包括所述第一代理单元的BDF信息和所述第一代理单元的Bar空间地址信息;
[0309] 所述第二代理单元的地址信息包括所述第二代理单元的BDF信息和所述第二代理单元的Bar空间地址信息。
[0310] 在一种实现方式中,所述网络适配器603支持SR-IOV功能,所述第一功能单元包括第一物理功能或第一虚拟功能。
[0311] 上述图6A-图6D中所示的计算机设备600的具体实现方式,可以参考上述图2A至图2D中服务器200,以及图3中服务器300的实现方式来实现。例如,中间设备602可以参考图2A至图2D中中间设备204的实现方式来实现,也可以参考图3中中间设备304的实现方式来实现;端点端口6021可以参考图2A至图2D中端点端口2043或端点端口2044的实现方式来实现,也可以参考图3中端点端口3043或端点端口3044的实现方式来实现;通道控制模块6022可以参考图2A至图2D中通道控制模块20411或通道控制模块20412的实现方式来实现,也可以参考图3中通道控制模块30411或通道控制模块30412的实现方式来实现,转换模块6023可以参考图2A至图2D中转换模块2046的实现方式来实现,也可以参考图3中转换模块3046的实现方式来实现。CPU601可以参考图2A至图2D中CPU201的实现方式来实现,也可以参考图3中CPU301的实现方式来实现;CPU604可以参考图2A至图2D中CPU202的实现方式来实现,也可以参考图3中CPU302的实现方式来实现;网络适配器603可以参考图2A至图2D中网络适配器203的实现方式来实现,也可以参考图3中网络适配器303的实现方式来实现。并且,上述图6A-图6D所描述的实施例中的所述第一功能单元,可以参考上述2A至图2D中或图3中提到的PF和/或VF的实现方式来实现,所述第一代理单元可以参考上述2A至图2D中或图3中提到的PFA’和/或VFA’的实现方式来实现,所述第二代理单元可以参考上述2A至图2D中或图3中提到的PFB’和/或VFB’的实现方式来实现。不再赘述。
[0312] 可以理解,当上述中间设备602通过FPGA芯片实现时,该FPGA芯片可以包括控制器和存储器,还可以包括通道控制模块和转换模块。当上述中间设备602通过ASIC芯片实现时,所述控制器的功能可以通过ASIC芯片实现,所述存储器的功能,可以由与该ASIC芯片连接的存储器(例如RAM等存储器)实现。示例性的,当所述中间设备602通过ASIC实现时,可以由ASIC实现控制器的功能,与所述ASIC连接的存储器实现所述存储器的功能;当所述中间设备602通过FPGA+ASIC实现时,可以由ASIC实现控制器的功能,所述FPGA实现所述存储器的功能;或当所述中间设备602通过FPGA+ASIC实现时,可以由FPGA和ASIC共同实现控制器的功能,所述FPGA实现所述存储器的功能等,不再赘述。
[0313] 图7A为本申请实施例提供的一种中间设备700的结构示意图,所述中间设备700通过总线与计算机设备中的第一CPU和网络适配器连接,所述第一CPU支持运行第一虚拟机,所述中间设备700包括控制器701和存储器702;
[0314] 所述控制器701,用于获取所述网络适配器中第一功能单元的信息和第二功能单元的信息,分别为所述第一功能单元和所述第二功能单元分配地址,获取第一代理单元的地址信息和第二代理单元的地址信息,并建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;其中,所述第一功能单元和所述第二功能单元,为所述网络适配器中基于虚拟化技术产生的统一功能单元或不同的功能单元,所述第一代理单元支持SR-IOV技术且是所述第一功能单元的代理,所述第二代理单元支持Virtio技术且是所述第二功能单元的代理;
[0315] 所述存储器702,用于存储所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;
[0316] 所述控制器701,还用于当所述第一虚拟机采用SR-IOV技术时,根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发;当所述第一虚拟机采用Virtio技术时,根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述第一虚拟机与所述网络适配器之间的报文转发。
[0317] 上述中间设备700能够包括支持SR-IOV的第一代理单元和支持Virtio的第二代理单元,且所述第一代理单元是所述第一功能单元的代理,所述第二代理单元是所述第二功能单元的代理,所述第一功能单元和所述第二功能单元为所述网络适配器中的同一功能单元或不同的功能单元。这样,该中间设备700既可以对实现采用SR-IOV技术的虚拟机收发的报文的转发,也可以实现对采用Virtio技术的虚拟机收发的报文的转发,实现了资源池的归一。同时,中间设备700通过总线与计算机设备中的第一CPU和网络适配器连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0318] 可选的,所述中间设备700可以通过FPGA、ASIC或FPGA+ASIC等设备实现。
[0319] 如图7B所示,在一种可选的实现方式中,所述中间设备700还包括端点端口703,所述中间设备通过所述端点端口703与所述第一CPU连接,所述端点端口703包括交换设备7031,子端点端口7032和子端点端口7033,所述子端点端口7032和所述子端点端口7033分别与所述交换设备7031的下行端口连接;
[0320] 所述子端点端口7032包含所述第一代理单元的信息,所述子端点端口7033包含所述第二代理单元的信息。
[0321] 在一种可选的实现方式中,所述交换设备7031,用于接收所述第一虚拟机发送的第一报文,根据所述第一报文中的地址信息,从所述子端点端口7032和所述子端点端口7033中选择一个以转发所述第一报文。
[0322] 在一种可选的实现方式中,所述中间设备700还包括通道控制模块7011;
[0323] 所述通道控制模块7011,用于实现所述网络适配器向所述第一虚拟机发送第二报文时转发路径的控制;
[0324] 当所述第一虚拟机采用SR-IOV技术时,所述通道控制模块7011将包含所述第一子端点端口的路径确定为转发所述第二报文的路径;当所述第一虚拟机采用Virtio技术时,所述通道控制模块7011将包含所述第二子端点端口的路径确定为转发所述第二报文的路径。
[0325] 在一种可选的实现方式中,所述中间设备700还包括转换模块7012;
[0326] 所述转换模块7012,用于将采用Virtio技术的第一虚拟机发送的报文,转换为所述中间设备700与所述网络适配器之间转发协议的报文,或将所述网络适配器向采用Virtio技术的第一虚拟机发送的报文转换为Virtio的报文。
[0327] 上述中间设备700具体的实现方式,可以参考上述图2A至图2D中中间设备204,以及图3中中间设备304的实现方式来实现。端点端口703可以参考图2A至图2D中端点端口2043或端点端口2044的实现方式来实现,也可以参考图3中端点端口3043或端点端口3044的实现方式来实现;通道控制模块7011可以参考图2A至图2D中通道控制模块20411或通道控制模块20412的实现方式来实现,也可以参考图3中通道控制模块30411或通道控制模块
30412的实现方式来实现,转换模块7012可以参考图2A至图2D中转换模块2046的实现方式来实现,也可以参考图3中转换模块3046的实现方式来实现并且,中间设备700的实现方式中所描述的所述第一功能单元,可以参考上述2A至图2D中或图3中提到的PF和/或VF的实现方式来实现,所述第一代理单元可以参考上述2A至图2D中或图3中提到的PFA’和/或VFA’的实现方式来实现,所述第二代理单元可以参考上述2A至图2D中或图3中提到的PFB’和/或VFB’的实现方式来实现。不再赘述。
[0328] 可以理解,图7A或图7B是中间设备700通过FPGA芯片实现的结构示意图。当中间设备700通过ASIC芯片实现时,所述控制器701的功能可以通过ASIC芯片实现,所述存储器702的功能可以由与该ASIC芯片连接的存储器(例如RAM等存储器)实现。示例性的,当所述中间设备700通过ASIC实现时,可以由ASIC实现控制器701的功能,与所述ASIC连接的存储器实现所述存储器702的功能;当所述中间设备700通过FPGA+ASIC实现时,可以由ASIC实现控制器701的功能,所述FPGA实现所述存储器702的功能;或当所述中间设备700通过FPGA+ASIC实现时,可以由FPGA和ASIC共同实现控制器701的功能,所述FPGA实现所述存储器702的功能,不再赘述。
[0329] 图8为本申请实施例提供的另一种报文转发方法的流程示意图。如图8所示,所述方法包括:
[0330] 步骤800:获取网络适配器中第一功能单元和第二功能单元的信息,分别为所述第一功能单元和所述第二功能单元分配地址,获取第一代理单元的地址信息和第二代理单元的地址信息,并建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系以及所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系;其中,所述第一功能单元和所述第二功能单元,为所述网络适配器中基于虚拟化技术产生的同一功能单元或不同的功能单元,所述第一代理单元支持SR-IOV技术且是所述第一功能单元的代理,所述第二代理单元支持Virtio技术且是所述第二功能单元的代理,所述网络适配器是虚拟机与网络实现报文转发的设备;
[0331] 步骤802:当所述虚拟机采用SR-IOV技术时,根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系实现虚拟机与所述网络适配器之间的报文转发;当所述虚拟机采用Virtio技术时,根据所述第二代理单元的地址信息与所述第二功能单元的地址信息之间的对应关系实现所述虚拟机与所述网络适配器之间的报文转发。
[0332] 通过上述方法,虚拟机既可以采用SR-IOV技术,也可以采用Virtio技术,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一。同时,能够实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0333] 在一种实现方式中,所述获取网络适配器中第一功能单元的信息包括:
[0334] 通过枚举所述网络适配器,获取所述网络适配器中第一功能单元的信息。
[0335] 在一种实现方式中,所述获取网络适配器中第二功能单元的信息包括:
[0336] 通过枚举所述网络适配器,获取所述网络适配器中第二功能单元的信息。
[0337] 在一种实现方式中,所述方法还包括:
[0338] 根据所述功能单元的信息,在不同的子端点端口中分别配置所述第一代理单元的信息和所述第二代理单元的信息。
[0339] 在一种实现方式中,所述地址信息包括总线设备功能BDF信息和基地址寄存器Bar空间地址信息。
[0340] 上述方法具体可以由上述图2A至图2D中的中间设备204,或图3中的中间设备304实现。即可以参考上述图2A至图2D中的中间设备204,或图3中的中间设备304实现图8所示的方法流程。并且,图8所示实现方式中所描述的功能单元可以参考上述2A至图2D中或图3中提到的PF和/或VF的实现方式来实现,所述第一代理单元可以参考上述2A至图2D中或图3中提到的PFA’和/或VFA’的实现方式来实现,所述第二代理单元可以参考上述2A至图2D中或图3中提到的PFB’和/或VFB’的实现方式来实现。不再赘述。
[0341] 图9为本申请实施例提供的另一种计算机设备900的结构示意图。如图9所示,所述计算机设备900包括CPU901、中间设备902和网络适配器903,所述中间设备902通过所述总线分别与所述CPU901和所述网络适配器903连接,所述CPU901支持运行第一虚拟机,所述第一虚拟机支持SR-IOV技术或所述第一虚拟机支持Virtio技术;
[0342] 所述中间设备902,用于接收所述第一虚拟机发送的第一报文,并将所述第一报文转发给所述网络适配器903;或,
[0343] 所述中间设备902,用于接收所述网络适配器903发送的第二报文,并将所述第二报文转发给所述所述第一虚拟机。
[0344] 上述计算机设备900中第一虚拟机既可以采用SR-IOV技术,也可以采用Virtio技术,不需要配置两套独立的资源池以分别支持相应的虚拟化技术,实现了资源池的归一。同时,中间设备902分别与所述CPU901和网络适配器903通过总线连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对所述CPU901资源的占用,提升所述CPU901资源的利用率。
[0345] 可选的,所述中间设备902可以通过FPGA、ASIC或FPGA+ASIC等设备实现。
[0346] 可选的,所述报文包括数据报文或命令报文。所述数据报文包括但不限于需要读写的数据,所述命令报文包括但不限于需要发送的控制命令或控制消息。
[0347] 可选的,所述总线可以是PCIe总线或UPI总线。当所述总线是PCIe总线时,所述中间设备902作为PCIe的根节点,通过PCIe枚举发现所述网络适配器903。
[0348] 可选的,所述第一虚拟机可以被配置为采用SR-IOV技术,也可以被配置为采用Virtio技术。所述第一虚拟机具体被配置为哪种虚拟化技术,可以是所述计算机设备中的功能单元(例如虚拟机管理器)根据接收到的用户的配置指令配置的。可以理解,在同一时刻,所述第一虚拟机只支持一种虚拟化技术。
[0349] 可选的,所述计算机设备还包括CPU904(图中未示出),所述中间设备902通过所述总线分别与所述CPU904和所述网络适配器903连接,所述CPU904支持运行第二虚拟机,所述第二虚拟机支持单根输入输出虚拟化SR-IOV技术或所述第二虚拟机支持Virtio技术;
[0350] 所述中间设备902,用于接收所述第二虚拟机发送的第三报文,并将所述第三报文转发给所述网络适配器903;或,
[0351] 所述中间设备902,用于接收所述网络适配器903发送的第四报文,并将所述第四报文转发给所述所述第二虚拟机。
[0352] 可选的,所述CPU901和所述CPU904共享所述网络适配器。所述CPU901和所述CPU904共享所述网络适配器,是所述CPU901和CPU904分别通过所述网络适配器与网络通信连接。
[0353] 上述图9中所示的计算机设备900的具体实现方式,可以参考上述图2A至图2D中服务器200,以及图3中服务器300的实现方式来实现。例如,中间设备902可以参考图2A至图2D中中间设备204的实现方式来实现,也可以参考图3中中间设备304的实现方式来实现。CPU901可以参考图2A至图2D中CPU201的实现方式来实现,也可以参考图3中CPU301的实现方式来实现,网络适配器903可以参考图2A至图2D中网络适配器203的实现方式来实现,也可以参考图3中网络适配器303的实现方式来实现。不再赘述。
[0354] 可以理解,当上述中间设备902通过FPGA芯片实现时,该FPGA芯片可以包括控制器和存储器,还可以包括通道控制模块和转换模块。当上述中间设备902通过ASIC芯片实现时,所述控制器的功能可以通过ASIC芯片实现,所述存储器的功能,可以由与该ASIC芯片连接的存储器(例如RAM等存储器)实现。示例性的,当所述中间设备902通过ASIC实现时,可以由ASIC实现控制器的功能,与所述ASIC连接的存储器实现所述存储器的功能;当所述中间设备902通过FPGA+ASIC实现时,可以由ASIC实现控制器的功能,所述FPGA实现所述存储器的功能;或当所述中间设备902通过FPGA+ASIC实现时,可以由FPGA和ASIC共同实现控制器的功能,所述FPGA实现所述存储器的功能等,不再赘述。
[0355] 图10为本申请实施例提供的另一种中间设备1000的结构示意图。如图10所示,所述中间设备1000包括控制器1001和存储器1002。所述中间设备1000通过总线与计算机设备中的第一中央处理器CPU和网络适配器连接,所述第一CPU支持运行第一虚拟机,所述第一虚拟机支持SR-IOV技术或所述第一虚拟机支持Virtio技术;
[0356] 所述存储器1002,用于存储实现报文转发的地址对应关系;
[0357] 所述控制器1001,用于接收所述第一虚拟机发送的第一报文,并根据所述地址对应关系将所述第一报文转发给所述网络适配器;或用于接收所述网络适配器发送的第二报文,并根据所述地址对应关系将所述第二报文转发给所述所述第一虚拟机。
[0358] 上述中间设备1000既可以对实现采用SR-IOV技术的虚拟机收发的报文的转发,也可以实现对采用Virtio技术的虚拟机收发的报文的转发,实现了资源池的归一。同时,所述中间设备通过总线与计算机设备中的第一中央处理器CPU和网络适配器连接,实现了Virtio协议报文转发的硬卸载,不仅转发的性能优于软件实现的转发方式,还能够减少对CPU资源的占用,提升CPU资源的利用率。
[0359] 可选的,所述中间设备1000可以通过FPGA、ASIC或FPGA+ASIC等设备实现。
[0360] 上述中间设备1000具体的实现方式,可以参考上述图2A至图2D中中间设备204,以及图3中中间设备304的实现方式来实现。不再赘述。
[0361] 可以理解,图10是中间设备1000通过FPGA芯片实现的结构示意图。当中间设备1000通过ASIC芯片实现时,所述控制器1001的功能可以通过ASIC芯片实现,所述存储器
1002的功能可以由与该ASIC芯片连接的存储器(例如RAM等存储器)实现。示例性的,当所述中间设备1000通过ASIC实现时,可以由ASIC实现控制器1001的功能,与所述ASIC连接的存储器实现所述存储器1002的功能;当所述中间设备1000通过FPGA+ASIC实现时,可以由ASIC实现控制器1001的功能,所述FPGA实现所述存储器1002的功能;或当所述中间设备1000通过FPGA+ASIC实现时,可以由FPGA和ASIC共同实现控制器1001的功能,所述FPGA实现所述存储器1002的功能,不再赘述。
[0362] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0363] 在本申请所提供的几个实施例中,应该理解到,所揭露的计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
[0364] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
[0365] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0366] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0367] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈