KVM虚拟化网络优化技术总结
发布日期:2025-04-03 23:35:32 浏览次数:27 分类:精选文章

本文共 3649 字,大约阅读时间需要 12 分钟。

KVM网络优化方案

一个完整的数据包从虚拟机到物理机的路径是: 虚拟机 - QEMU虚拟网卡 - 虚拟化层 - 内核网桥 - 物理网卡

KVM的网络优化方案,总的来说,就是让虚拟机访问物理网卡的层数更少,直至对物理网卡的单独占领,和物理机一样的使用物理网卡,达到和物理机一样的网络性能。

方案一 全虚拟化网卡和virtio

Virtio与全虚拟化网卡区别 全虚拟化网卡是虚拟化层完全模拟出来的网卡,半虚拟化网卡通过驱动对操作系统做了改造; virtio简单的说,就是告诉虚拟机,hi 你就是在一个虚拟化平台上跑,咱们一起做一些改动,让你在虚拟化平台上获得更好的性能;

关于virtio的使用场景 因 为windows虚拟机使用virtio有网络闪断的情况发生,windows虚拟机如果网络压力不高,建议使用e1000这样的全虚拟化网卡,如果网络压力比较高,建议使用SRIVO或者PCI Device Assignment这样的技术;virtio也在不断的演进,希望windows的闪断问题越来越少。 KVM天生就是为linux系统设计的,linux系统请放心大胆的使用virtio驱动;

方案二 vhost_net macvtap技术 vhost_net使虚拟机的网络通讯直接绕过用户空间的虚拟化层,直接可以和内核通讯,从而提供虚拟机的网络性能; macvtap则是跳过内核的网桥; 使用vhost_net,必须使用virtio半虚拟化网卡; vhost_net虚拟机xml文件配置

    <interface type='bridge'>
     
<mac address='' />     
<source bridge='br0' />     
<model type='virtio' />     
<driver name="vhost" />     
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' />     
</interface type='bridge'>

如果不使用vhost_net,则为

    <driver name="qemu" />>

macvtap虚拟机xml配置

    <interface type='direct'>
      
<mac address='00:16:3e:d5:d6:77' />      
<source dev='lo' mode='bridge' />      
<model type='e1000' />      
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' />     
</interface type='direct'>

注意:macvtap在windows虚拟机上性能很差,不建议使用

vhost_net macvtap比较 macvlan的功能是给同一个物理网卡配置多个MAC地址,这样可以在软件商配置多个以太网口,属于物理层的功能; macvtap是用来替代TUN/TAP和Bridge内核模块,macvtap是基于macvlan这个模块,提供TUN/TAP中tap设备使用的接口; 使用macvtap以太网口的虚拟机能够通过tap设备接口,直接将数据传递到内核中对应的macvtap以太网口; vhost_net是为了优化virtio性能的修改,通过减少根模式切换次数,提升网络性能。

方案三 网卡passthrough

网卡passthrough在虚拟机的配置方法 1 Using lcpci 设备查看pci设备信息 可使用以下命令查看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

2 使用virsh nodedev-dumxml pci_0000_04_00_0获取xml配置信息 示例命令:

[root@]# virsh nodedev-dumpxml pci_0000_04_00_0

生成的XML配置信息如下:

pci_0000_04_00_0
pci_0000_00_07_0
e1000e
0
4
0
0
82571EB Gigabit Network Connection
Intel Corporation

3 编辑虚拟机xml文件,加入pci设备信息 示例配置:

    <hostdev mode='subsystem' type='pci' managed='yes'>
     
<source>
<address domain='0x0000' bus='0x04' slot='0x00' function='0x0' />>
</hostdev mode='subsystem' type='pci' managed='yes'>

domain、bus、slot、function信息从dumpxml出的xml文件获取,定义虚拟机,然后启动虚拟机即可注意_physical_device已连接系统中并安装相应驱动。

方案四 SR-IVO技术

SRIOV的原理 SR-IVO 是单根I/O虚拟化的简写,是一种将PCIe共享给虚拟机使用的标准,目前用在网络设备上比较多,理论上也可以支持其他PCI设备,SRIOV需要硬件的支持。

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

SRIOV的使用 启动SRIVO内核模块:

# modprobe igb

激活虚拟功能VF:

# modprobe igb max_vfs=7

千兆网卡最多支持8个vf,Intel的I350适合SRIOV配置,82576S仅支持虚拟机是linux的情况,windows系统不支持。 万兆网卡最多支持64个vg,Intel的新一代万兆网卡(如x520、x540)支持SRIOV。

方案五 网卡多队列

CentOS 7开始支持virtio网卡多队列,可以显著提升虚拟机网络性能 virt拟回到xml网卡配置:

    <interface type='network'>
     
<source network='default' />        
<model type='virtio' />         
<driver name='vhost' queues='n' />    
</interface type='network'>

1-8队列最多支持8个队列 在虚拟机上执行以下命令开启多队列网卡:

# ethtool -L eth0 combined M

M表示将多个队列合并为一个eth0交换机

KVM网络优化方案个人认为以硬件为主,硬件上万兆+SRIOV的方案会越来越普及,但是在线迁移的问题有待解决。

欢迎加我的微信(ID:xiaolikvm)一起交流。 欢迎加入云技术社区KVM/QEMU技术交流QQ,注明姓名,城市,及要加入KVM群。

上一篇:KVM虚拟化(一)—— 介绍与简单使用
下一篇:[Zookeeper版本3.6.2源码系列]-5-Zookeeper的树形节点的基础数据模型

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月22日 08时07分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章