KVM虚拟化网络优化技术总结

蓮花仙者
发布: 2025-09-16 09:14:01
原创
560人浏览过

一个完整的数据包从虚拟机到物理机的路径是:

虚拟机--QEMU虚拟网卡--虚拟化层--内核网桥--物理网卡

KVM虚拟化网络优化技术总结总的来说,KVM的网络优化方案旨在减少虚拟机访问物理网卡的层数,直至虚拟机能够独占物理网卡,达到与物理机相同的网络性能。

方案一:全虚拟化网卡和virtio

KVM虚拟化网络优化技术总结全虚拟化网卡是由虚拟化层完全模拟的网卡,而半虚拟化网卡通过驱动对操作系统进行了改造。virtio的基本理念是告知虚拟机它运行在虚拟化平台上,并通过双方协作提升在虚拟化环境中的性能。

KVM虚拟化网络优化技术总结关于virtio的使用场景,由于Windows虚拟机在使用virtio时可能出现网络闪断问题,建议在网络压力较低的情况下使用e1000这样的全虚拟化网卡,而在网络压力较高时,建议使用SR-IOV或PCI设备分配技术。virtio也在不断演进,期望能减少Windows的闪断问题。

KVM天生为Linux系统设计,Linux系统可以放心大胆地使用virtio驱动。

方案二:vhost_net和macvtap技术

KVM虚拟化网络优化技术总结vhost_net使虚拟机的网络通信直接绕过用户空间的虚拟化层,与内核直接通信,从而提升虚拟机的网络性能。macvtap则跳过了内核的网桥。

使用vhost_net必须使用virtio半虚拟化网卡。

vhost_net虚拟机的XML文件配置如下:

<interface>
    <mac></mac>
    <model></model>
    <driver></driver>
    <address></address>
</interface>
登录后复制

如果不使用vhost_net,则配置为:

<driver></driver>
登录后复制

macvtap虚拟机的XML配置如下:

<interface>
    <mac></mac>
    <model></model>
    <address></address>
</interface>
登录后复制

注意:macvtap在Windows虚拟机上的性能较差,不建议使用。

vhost_net和macvtap的比较:

macvlan的功能是为同一个物理网卡配置多个MAC地址,从而在软件层面上配置多个以太网口,属于物理层的功能。macvtap是用来替代TUN/TAP和Bridge内核模块的,基于macvlan模块,提供TUN/TAP中tap设备使用的接口。使用macvtap的虚拟机可以通过tap设备接口,直接将数据传递到内核中对应的macvtap以太网口。vhost-net是对virtio的优化,virtio原本设计用于客户系统的前端与VMM的后端通信,减少硬件虚拟化方式下根模式与非根模式的切换。使用vhost-net后,可以进一步减少进入CPU的根模式后,需要进入用户态将数据发送到tap设备后再次切入内核态的开销,而是进入内核态后不需要进行内核态与用户态的切换,进一步减少这种特权级的切换。vhost-net属于进行二层网络数据传递的优化。

方案三:虚拟机网卡独占

KVM虚拟化网络优化技术总结网卡passthrough在虚拟机的配置方法:

  1. 使用lspci命令查看PCI设备信息:
04:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
04:00.1 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
登录后复制

也可以使用virsh nodedev-list –tree命令获取信息:

+- pci_0000_00_07_0
|  |
|  +- pci_0000_04_00_0
|  |  |
|  |  +- net_p1p1_00_1b_21_88_69_dc
|  |
|  +- pci_0000_04_00_1
|      |
|      +- net_p1p2_00_1b_21_88_69_dd
登录后复制
  1. 使用virsh nodedev-dumxml pci_0000_04_00_0命令获取XML配置信息:
[root@]# virsh nodedev-dumpxml pci_0000_04_00_0
登录后复制
<device>
    <name>pci_0000_04_00_0</name>
    <parent>pci_0000_00_07_0</parent>
    <driver>
        <name>e1000e</name>
    </driver>
    <capability>
        <domain>0</domain>
        <bus>4</bus>
        <slot>0</slot>
        <function>0</function>
        <product>82571EB Gigabit Ethernet Controller</product>
        <vendor>Intel Corporation</vendor>
    </capability>
</device>
登录后复制
  1. 编辑虚拟机的XML文件,加入PCI设备信息:
<hostdev>
    <address></address>
</hostdev>
登录后复制

Domain、bus、slot、function信息从dumpxml输出的XML文件中获取,定义虚拟机后,启动虚拟机即可。注意,因为附加的是物理设备,需要在系统中安装相应的驱动。

方案四:SR-IOV技术

SR-IOV的原理:SR-IOV是单根I/O虚拟化的简称,是一个将PCIe共享给虚拟机使用的标准,目前主要用于网络设备,理论上也可以支持其他PCI设备,SR-IOV需要硬件支持。

KVM虚拟化网络优化技术总结以下内容来自Oracle网站,链接为http://docs.oracle.com/cd/E38902_01/html/E38873/glbzi.html

百度虚拟主播
百度虚拟主播

百度智能云平台的一站式、灵活化的虚拟主播直播解决方案

百度虚拟主播36
查看详情 百度虚拟主播

KVM虚拟化网络优化技术总结物理功能(Physical Function, PF)用于支持SR-IOV功能的PCI功能,如SR-IOV规范中定义。PF包含SR-IOV功能结构,用于管理SR-IOV功能。PF是全功能的PCIe功能,可以像其他任何PCIe设备一样进行发现、管理和处理。PF拥有完全配置资源,可以用于配置或控制PCIe设备。虚拟功能(Virtual Function, VF)与物理功能关联的一种功能。VF是一种轻量级PCIe功能,可以与物理功能以及与同一物理功能关联的其他VF共享一个或多个物理资源。VF仅允许拥有用于其自身行为的配置资源。

每个SR-IOV设备都可有一个物理功能(Physical Function, PF),并且每个PF最多可有64,000个与其关联的虚拟功能(Virtual Function, VF)。PF可以通过寄存器创建VF,这些寄存器设计有专用于此目的的属性。

一旦在PF中启用了SR-IOV,就可以通过PF的总线、设备和功能编号(路由ID)访问各个VF的PCI配置空间。每个VF都具有一个PCI内存空间,用于映射其寄存器集。VF设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的PCI设备。创建VF后,可以直接将其指定给IO来宾域或各个应用程序(如裸机平台上的Oracle Solaris Zones)。此功能使得虚拟功能可以共享物理设备,并在没有CPU和虚拟机管理程序软件开销的情况下执行I/O。

SR-IOV的优点:SR-IOV标准允许在IO来宾域之间高效共享PCIe设备。SR-IOV设备可以具有数百个与某个物理功能(Physical Function, PF)关联的虚拟功能(Virtual Function, VF)。VF的创建可由PF通过设计用来开启SR-IOV功能的寄存器以动态方式进行控制。缺省情况下,SR-IOV功能处于禁用状态,PF充当传统PCIe设备。

具有SR-IOV功能的设备可以利用以下优点:

  • 性能——从虚拟机环境直接访问硬件。
  • 成本降低——节省的资本和运营开销包括:
    • 节能
    • 减少了适配器数量
    • 简化了布线
    • 减少了交换机端口

SR-IOV的使用:

启动SR-IOV内核模块:

modprobe igb
登录后复制

激活虚拟功能(VF):

modprobe igb max_vfs=7
登录后复制

千兆网卡最多支持8个VF(0-7),目前支持较好的千兆网卡是INTEL I350,82576S虽然也支持SR-IOV,但仅支持Linux虚拟机,Windows系统不支持。万兆网卡最多支持64个VF(0-63),Intel的新一代万兆网卡如x520、x540等都支持SR-IOV。

如果需要重新设置VF,可以删除模块后重新加载:

modprobe -r igb
登录后复制

将配置永久写入配置文件:

echo "options igb max_vfs=7" >> /etc/modprobe.d/igb.conf
登录后复制

通过lspci命令可以查看主网卡和子网卡:

# lspci | grep 82576
0b:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
0b:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
0b:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:10.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:10.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:10.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:10.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:10.6 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:10.7 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:11.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:11.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:11.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:11.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:11.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
0b:11.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
登录后复制

虚拟机可以通过PCI网卡独占的方式使用子网卡。

虚拟机网卡的XML文件配置如下:

<interface>
    <address></address>
</interface>
登录后复制

方案五:网卡多队列

从CentOS 7开始支持virtio网卡多队列,可以大大提高虚拟机的网络性能,配置方法如下:

虚拟机的XML网卡配置:

<interface>
    <model></model>
    <driver></driver>
</interface>
登录后复制

N 1 - 8,最多支持8个队列。

在虚拟机上执行以下命令开启多队列网卡:

# ethtool -L eth0 combined M
登录后复制

M 1 - N,M小于等于N。

个人认为,KVM网络优化方案应以硬件为主,硬件上万兆+SR-IOV的方案会越来越普及,但线上迁移的问题仍需解决。

以上就是KVM虚拟化网络优化技术总结的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号