一种虚拟网卡性能提升方法及装置
文献发布时间:2024-04-18 19:58:26
技术领域
本申请涉及虚拟网卡技术领域,具体涉及一种虚拟网卡性能提升方法及装置。
背景技术
Intel的E1000系列是一款以太网适配器,广泛用于个人电脑和服务器。它由Intel公司开发,以提供高速、稳定和可靠的网络连接。E1000网卡系列使用PCI接口,它采用了高度集成的设计,结合了Intel的先进技术和创新的电路设计,以提供卓越的性能和可靠性。
Intel的E1000网卡可以与QEMU虚拟化软件一起使用。QEMU是一款开源的虚拟化软件,可用于模拟多种硬件设备,包括网卡。在使用QEMU进行虚拟化时,可以选择将E1000网卡分配给虚拟机。这样,虚拟机就可以使用E1000网卡来进行网络通信。
QEMU中虚拟网卡E1000收发每个数据包,都要进行中断注入操作和多次mmio操作,而mmio操作会导致VM EXIT,即虚拟机运行时会在根模式与非根模式之间频繁来回切换,非常消耗性能。
因此,为满足技术需求,提高虚拟网卡性能,现提供一种新的虚拟网卡性能提升技术。
发明内容
本申请提供一种虚拟网卡性能提升方法及装置,通过配置内存区域以及向特定寄存器建立映射关系,从而提高虚拟网卡的工作稳定性以及数据处理性能。
为实现上述目的,本申请提供以下方案。
第一方面,本申请提供了一种虚拟网卡性能提升方法,所述方法包括以下步骤:
创建一自定义内存区域;
在所述自定义内存区域与目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址之间建立自定义映射关系;
响应发包指令,基于所述自定义内存区域以及所述自定义映射关系,提取对应的各所述寄存器的数据,执行发包操作;
响应收包指令,基于所述自定义内存区域以及所述自定义映射关系,获得对应的各所述寄存器的地址,执行收包操作。
本申请通过映射mmio内存的方式,可以极大减少mmio操作导致的VM EXIT,大幅提升虚拟网卡E1000及虚拟机的整体性能;通过批量处理数据包,可以提高网络吞吐量;通过独立线程轮询发包,可以达到最大的发包速率。
进一步的,在所述自定义内存区域与目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址之间建立自定义映射关系中,包括以下步骤:
将所述自定义内存区域映射至目标虚拟网卡的PCI BAR1对应的地址,并配置一映射偏移地址,以覆盖所述目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址。
具体的,所述目标虚拟网卡中符合预设寄存器种类要求的寄存器包括:
RDBAH、RDBAL、RDH、RDLEN、RDT、TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述发包指令时,对应的所述寄存器包括TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述收包指令时,对应的所述寄存器包括RDBAH、RDBAL、RDH、RDLEN以及RDT。
第二方面,本申请提供了一种虚拟网卡性能提升装置,所述装置包括:
内存创建模块,其用于创建一自定义内存区域;
内存映射模块,其用于在所述自定义内存区域与目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址之间建立自定义映射关系;
发包响应模块,其用于响应发包指令,基于所述自定义内存区域以及所述自定义映射关系,提取对应的各所述寄存器的数据,执行发包操作;
收包响应模块,其用于响应收包指令,基于所述自定义内存区域以及所述自定义映射关系,获得对应的各所述寄存器的地址,执行收包操作。
进一步的,所述内存映射模块还用于将所述自定义内存区域映射至目标虚拟网卡的PCI BAR1对应的地址,并配置一映射偏移地址,以覆盖所述目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址。
具体的,所述目标虚拟网卡中符合预设寄存器种类要求的寄存器包括:
RDBAH、RDBAL、RDH、RDLEN、RDT、TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述发包指令时,对应的所述寄存器包括TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述收包指令时,对应的所述寄存器包括RDBAH、RDBAL、RDH、RDLEN以及RDT。
本申请提供的技术方案带来的有益效果包括:
本申请通过配置内存区域以及向特定寄存器建立映射关系,从而提高虚拟网卡的工作稳定性以及数据处理性能。
附图说明
术语解释:
PCI:Peripheral Component Interconnect,定义局部总线的标准;
QEMU:Quick EMUlator,虚拟操作系统模拟器;
CPU:Central Processing Unit,中央处理器。
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中提供的虚拟网卡性能提升方法的步骤流程图;
图2为本申请实施例中提供的虚拟网卡性能提升方法中虚拟网卡E1000的工作原理图;
图3为本申请实施例中提供的虚拟网卡性能提升方法中虚拟网卡E1000的工作示意图;
图4为本申请实施例中提供的虚拟网卡性能提升方法的原理流程图;
图5为本申请实施例中提供的虚拟网卡性能提升装置的结构框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图对本申请的实施例作进一步详细说明。
本申请实施例提供一种虚拟网卡性能提升方法及装置,通过配置内存区域以及向特定寄存器建立映射关系,从而提高虚拟网卡的工作稳定性以及数据处理性能。
为达到上述技术效果,本申请的总体思路如下:
一种虚拟网卡性能提升方法,该方法包括以下步骤:
S1、创建一自定义内存区域;
S2、在自定义内存区域与目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址之间建立自定义映射关系;
S3、响应发包指令,基于自定义内存区域以及自定义映射关系,提取对应的各寄存器的数据,执行发包操作;
S4、响应收包指令,基于自定义内存区域以及自定义映射关系,获得对应的各寄存器的地址,执行收包操作。
以下结合附图对本申请的实施例作进一步详细说明。
第一方面,参见图1~4所示,本申请实施例提供一种虚拟网卡性能提升方法,该方法包括以下步骤:
S1、创建一自定义内存区域;
S2、在自定义内存区域与目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址之间建立自定义映射关系;
S3、响应发包指令,基于自定义内存区域以及自定义映射关系,提取对应的各寄存器的数据,执行发包操作;
S4、响应收包指令,基于自定义内存区域以及自定义映射关系,获得对应的各寄存器的地址,执行收包操作。
本申请实施例中,通过配置内存区域以及向特定寄存器建立映射关系,从而提高虚拟网卡的工作稳定性以及数据处理性能。
进一步的,在所述自定义内存区域与目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址之间建立自定义映射关系中,包括以下步骤:
将所述自定义内存区域映射至目标虚拟网卡的PCI BAR1对应的地址,并配置一映射偏移地址,以覆盖所述目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址。
具体的,所述目标虚拟网卡中符合预设寄存器种类要求的寄存器包括:
RDBAH、RDBAL、RDH、RDLEN、RDT、TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述发包指令时,对应的所述寄存器包括TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述收包指令时,对应的所述寄存器包括RDBAH、RDBAL、RDH、RDLEN以及RDT。
本申请实施例中的虚拟网卡具体的可以是虚拟网卡E1000,其可以在虚拟化环境中被分配给虚拟机使用。Intel的E1000系列是一款以太网适配器(网卡),广泛用于个人电脑和服务器。它由Intel公司开发,以提供高速、稳定和可靠的网络连接。E1000网卡系列使用PCI接口,它采用了高度集成的设计,结合了Intel的先进技术和创新的电路设计,以提供卓越的性能和可靠性。
Intel的E1000网卡可以与QEMU虚拟化软件一起使用。QEMU是一款开源的虚拟化软件,可用于模拟多种硬件设备,包括网卡。在使用QEMU进行虚拟化时,可以选择将E1000网卡分配给虚拟机。这样,虚拟机就可以使用E1000网卡来进行网络通信。
QEMU中虚拟网卡E1000收发每个数据包,都要进行中断注入操作和多次mmio操作,而mmio操作会导致VM EXIT,即虚拟机运行时会在根模式(主机运行的用户模式、内核模式)与非根模式(虚拟机运行的客户模式)之间频繁来回切换,非常消耗性能,具体情况如说明书的图2所示。
Virtio-net半虚拟化方案也是通过减少mmio操作,来提高性能。具体来说通过eventfd用于在虚拟机和宿主机之间传递事件,实现了低延迟的事件通知;将多个网络包进行批量处理,减少了虚拟机与宿主机之间的上下文切换次数。Virtio-net设计用于在虚拟化环境中提供高性能的网络连接。它通过与宿主机之间的高效通信和优化的数据传输机制,实现更低的延迟和更高的带宽利用率。
另外,Virtio-net还可以使用Vhost模块,通过零拷贝来进一步提高性能。然而,E1000是一款经过广泛和测试的模拟网卡设备,支持多种操作系统和虚拟化平台。它的驱动程序在大多数操作系统中都已经内置,相对于Virtio-net或Vhost-net,使用E1000网卡可以更轻松地确保与不同平台和操作系统的兼容性。
具体的,虚拟机可以将E1000虚拟网卡视为实际的物理网卡,并使用它进行网络通信。一旦将E1000虚拟网卡分配给虚拟机,它将在虚拟机中作为物理网卡的替代品进行操作。虚拟机可以使用E1000虚拟网卡来连接到网络,并与其他虚拟机或物理网络设备进行通信,具体情况如说明书附图的图3所示。
基于本申请的技术方案,提升虚拟网卡E1000性能从减少mmio操作入手,减少了虚拟网卡E1000收发数据包时大量的mmio操作导致的VM EXIT(根模式与非根模式之间的频繁切换),从而提高虚拟网卡E1000收发数据包的性能及虚拟机整体性能。需要说明的是,在虚拟机网卡E1000的中断处理函数中,TDT和TDH的差值总是1,网络包是一个个处理的即每到来一个中断处理一个数据包,将TDT和TDH的差值控制在一个合理的范围内,多个包进行批量处理,可以大大提高网络包吞吐量。
具体的,基于本申请实施例的技术方案,如说明书附图的图4所示,操作流程如下:
第一步,创建一个两页8k的内存区域。
第二步,映射到虚拟网卡E1000对应的PCI bar1对应地址,映射偏移地址:0x2000,覆盖寄存器主要涉及如下放表1:
表1
另外,其他寄存器,如配置寄存器、控制寄存器及统计寄存器,不进行映射。
第三步,发包优化:为每个虚拟网卡E1000创建发包线程,绑定CPU,轮询读取映射偏移地址对应TDT等寄存器的值;
第四步,根据TDH、TDT、TDBAH、TDBAL等寄存器的值,寻找到DMA中相应的数据包,发送出去。
另外,进行收包优化,并且收包优化与发包优化类似。
本申请实施例的技术方案,通过映射mmio内存的方式,可以极大减少mmio操作导致的VM EXIT,大幅提升虚拟网卡E1000及虚拟机的整体性能;通过批量处理数据包,可以提高网络吞吐量;通过独立线程轮询发包,可以达到最大的发包速率。
优化前,当发送数据包速度为3W pps时,每秒要产生12.5w次的VM EXIT,而VMEXIT导致的Qemu、Kvm、Guest OS之间的切换是非常消耗CPU性能的。
优化后,发送数据包速度为48W pps时,每秒要产生8000多次的VM EXIT,极大的提升虚拟机整体性能。
第二方面,参见图5所示,基于与方法实施例相同的发明构思,本申请实施例提供一种虚拟网卡性能提升装置,该装置包括:
内存创建模块,其用于创建一自定义内存区域;
内存映射模块,其用于在所述自定义内存区域与目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址之间建立自定义映射关系;
发包响应模块,其用于响应发包指令,基于所述自定义内存区域以及所述自定义映射关系,提取对应的各所述寄存器的数据,执行发包操作;
收包响应模块,其用于响应收包指令,基于所述自定义内存区域以及所述自定义映射关系,获得对应的各所述寄存器的地址,执行收包操作。
本申请实施例中,通过配置内存区域以及向特定寄存器建立映射关系,从而提高虚拟网卡的工作稳定性以及数据处理性能。
进一步的,所述内存映射模块还用于将所述自定义内存区域映射至目标虚拟网卡的PCI BAR1对应的地址,并配置一映射偏移地址,以覆盖所述目标虚拟网卡中符合预设寄存器种类要求的寄存器的地址。
具体的,所述目标虚拟网卡中符合预设寄存器种类要求的寄存器包括:
RDBAH、RDBAL、RDH、RDLEN、RDT、TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述发包指令时,对应的所述寄存器包括TDBAH、TDBAL、TDH、TDLEN以及TDT。
具体的,响应所述收包指令时,对应的所述寄存器包括RDBAH、RDBAL、RDH、RDLEN以及RDT。
本申请实施例中的虚拟网卡具体的可以是虚拟网卡E1000,其可以在虚拟化环境中被分配给虚拟机使用。Intel的E1000系列是一款以太网适配器(网卡),广泛用于个人电脑和服务器。它由Intel公司开发,以提供高速、稳定和可靠的网络连接。E1000网卡系列使用PCI接口,它采用了高度集成的设计,结合了Intel的先进技术和创新的电路设计,以提供卓越的性能和可靠性。
Intel的E1000网卡可以与QEMU虚拟化软件一起使用。QEMU是一款开源的虚拟化软件,可用于模拟多种硬件设备,包括网卡。在使用QEMU进行虚拟化时,可以选择将E1000网卡分配给虚拟机。这样,虚拟机就可以使用E1000网卡来进行网络通信。
QEMU中虚拟网卡E1000收发每个数据包,都要进行中断注入操作和多次mmio操作,而mmio操作会导致VM EXIT,即虚拟机运行时会在根模式(主机运行的用户模式、内核模式)与非根模式(虚拟机运行的客户模式)之间频繁来回切换,非常消耗性能。
Virtio-net半虚拟化方案也是通过减少mmio操作,来提高性能。具体来说通过eventfd用于在虚拟机和宿主机之间传递事件,实现了低延迟的事件通知;将多个网络包进行批量处理,减少了虚拟机与宿主机之间的上下文切换次数。Virtio-net设计用于在虚拟化环境中提供高性能的网络连接。它通过与宿主机之间的高效通信和优化的数据传输机制,实现更低的延迟和更高的带宽利用率。
另外,Virtio-net还可以使用Vhost模块,通过零拷贝来进一步提高性能。然而,E1000是一款经过广泛和测试的模拟网卡设备,支持多种操作系统和虚拟化平台。它的驱动程序在大多数操作系统中都已经内置,相对于Virtio-net或Vhost-net,使用E1000网卡可以更轻松地确保与不同平台和操作系统的兼容性。
具体的,虚拟机可以将E1000虚拟网卡视为实际的物理网卡,并使用它进行网络通信。一旦将E1000虚拟网卡分配给虚拟机,它将在虚拟机中作为物理网卡的替代品进行操作。虚拟机可以使用E1000虚拟网卡来连接到网络,并与其他虚拟机或物理网络设备进行通信。
基于本申请的技术方案,提升虚拟网卡E1000性能从减少mmio操作入手,减少了虚拟网卡E1000收发数据包时大量的mmio操作导致的VM EXIT(根模式与非根模式之间的频繁切换),从而提高虚拟网卡E1000收发数据包的性能及虚拟机整体性能。需要说明的是,在虚拟机网卡E1000的中断处理函数中,TDT和TDH的差值总是1,网络包是一个个处理的即每到来一个中断处理一个数据包,将TDT和TDH的差值控制在一个合理的范围内,多个包进行批量处理,可以大大提高网络包吞吐量。
具体的,基于本申请实施例的技术方案,操作流程如下:
第一步,创建一个两页8k的内存区域。
第二步,映射到虚拟网卡E1000对应的PCI bar1对应地址,映射偏移地址:0x2000,覆盖寄存器主要涉及如下放表1:
表1
另外,其他寄存器,如配置寄存器、控制寄存器及统计寄存器,不进行映射。
第三步,发包优化:为每个虚拟网卡E1000创建发包线程,绑定CPU,轮询读取映射偏移地址对应TDT等寄存器的值;
第四步,根据TDH、TDT、TDBAH、TDBAL等寄存器的值,寻找到DMA中相应的数据包,发送出去。
另外,进行收包优化,并且收包优化与发包优化类似。
本申请实施例的技术方案,通过映射mmio内存的方式,可以极大减少mmio操作导致的VM EXIT,大幅提升虚拟网卡E1000及虚拟机的整体性能;通过批量处理数据包,可以提高网络吞吐量;通过独立线程轮询发包,可以达到最大的发包速率。
优化前,当发送数据包速度为3W pps时,每秒要产生12.5w次的VM EXIT,而VMEXIT导致的Qemu、Kvm、Guest OS之间的切换是非常消耗CPU性能的。
优化后,发送数据包速度为48W pps时,每秒要产生8000多次的VM EXIT,极大的提升虚拟机整体性能。
需要说明的是,本申请实施例提供的虚拟网卡性能提升装置,其对应的技术问题、技术手段以及技术效果,从原理层面与虚拟网卡性能提升方法的原理类似。
需要说明的是,在本申请中,诸如“对比”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
- 一种虚拟主机上行链路网卡配置的方法及系统
- 一种JLAN91C111网卡测试装置及其测试方法
- 一种实现存储集群中网卡设备名称一致的方法及装置
- 一种探测裸机网卡信息的方法和装置
- 一种物理网卡虚拟成多个虚拟网卡的方法及系统
- 一种内核网桥下物理网卡和虚拟网卡快速收发包传递方法