KVM虚拟网络优化方案整理

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

虚拟机--QEMU虚拟网卡--虚拟化层--内核网桥--物理网卡
KVM虚拟网络优化方案整理

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

方案一 全虚拟化网卡和virtio
KVM虚拟网络优化方案整理

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

关于virtio的使用场景
因 为windows虚拟机使用viritio有网络闪断的情况发生,windows 虚拟机如果网络压力不高,建议使用e1000这样的全虚拟化网卡,如果网络压力比较高,建议使用SRIVO或者PCI Device Assignment这样的技术;viritio也在不断的演进,希望windows的闪断的问题越来越少。

KVM天生就是为linux系统设计的,linux系统请放心大胆的使用viritio驱动;

方案二 vhost_net macvtap技术
KVM虚拟网络优化方案整理

vhost_net使虚拟机的网络通讯直接绕过用户空间的虚拟化层,直接可以和内核通讯,从而提供虚拟机的网络性能;

macvtap则是跳过内核的网桥;

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

vhost_net虚拟机xml文件配置,

XML/HTML Code复制内容到剪贴板

  1. <interface type='bridge'>
  2. <mac address=''/>
  3. <source bridge='br0'/>
  4. <model type='virtio'/>
  5. <driver name="vhost"/>
  6. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  7. </interface>

如果不使用vhost_net,则为

<driver name="qemu"/>

macvtap 虚拟机xml配置

XML/HTML Code复制内容到剪贴板

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

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

vhost_net macvtap比较

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

方案三 虚拟机网卡独占
KVM虚拟网络优化方案整理

网卡passthrough在虚拟机的配置方法

1 使用lcpci 设备查看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配置信息

复制代码

代码如下:

[[email protected]]# 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 type='pci'>
<domain>0</domain>
<bus>4</bus>
<slot>0</slot>
<function>0</function>
<product id='0x105e'>82571EB Gigabit Ethernet Controller</product>
<vendor id='0x8086'>Intel Corporation</vendor>
</capability>
</device>

3 编辑虚拟机xml文件,加入pci设备信息

复制代码

代码如下:

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

Domain bus slot function信息从dumpxml出的xml文件获取,define虚拟机,然后开启虚拟机就可以,注意以为附件上去的是物理设备,需要在系统里面安装相应的驱动。

方案四 SR-IVO技术

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

以下内容来自oracle网站,链接为
http://docs.oracle.com/cd/E38902_01/html/E38873/glbzi.html
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 功能的设备可以利用以下优点:
性能-从虚拟机环境直接访问硬件。
成本降低-节省的资本和运营开销包括:
节能
减少了适配器数量
简化了布线
减少了交换机端口
SRIOV的使用
启动SRIVO内核模块
modprobe igb
激活虚拟功能VF
modprobe igb max_vfs=7
千兆网卡最多支持8个vf0-7,千兆网卡目前支持比较好的是INTEL I350, 82576S虽然也支持SRIOV但是只支持虚拟机是linux的情况,windows系统不支持;
万兆网卡最多支持64个vg0-63,intel的新新一代万兆网卡都支持SRIOV x520 x540等;
如果需要重新设置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网卡独占的方式使用子网卡;

复制代码

代码如下:

# virsh nodedev-list | grep 0b
pci_0000_0b_00_0
pci_0000_0b_00_1
pci_0000_0b_10_0
pci_0000_0b_10_1
pci_0000_0b_10_2
pci_0000_0b_10_3
pci_0000_0b_10_4
pci_0000_0b_10_5
pci_0000_0b_10_6
pci_0000_0b_11_7
pci_0000_0b_11_1
pci_0000_0b_11_2
pci_0000_0b_11_3
pci_0000_0b_11_4
pci_0000_0b_11_5

虚拟机网卡xml文件

XML/HTML Code复制内容到剪贴板

  1. <interface type='hostdev' managed='yes'>
  2. <source>
  3. <address type='pci' domain='0' bus='11' slot='16' function='0'/>
  4. </source>
  5. </interface>

方案五 网卡多队列

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

虚拟机的xml网卡配置

XML/HTML Code复制内容到剪贴板

  1. <interface type='network'>
  2. <source network='default'/> <model type='virtio'/> <driver name='vhost' queues='N'/> </interface>

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

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

复制代码

代码如下:

#ethtool -L eth0 combined M

M 1 - N M小于等于N

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

分类:其它系统 时间:2012-01-02 人气:8
本文关键词: KVM 网络
分享到:

相关文章

  • linux vps新手入门教程:kvm架构通过vnc安装Debian系统 2012-02-11

      kvm 架构还是比较流行的,期性能比OpenVZ要好,和xen架构一样属于全硬件虚拟化,使用起来稍微复杂一些,下单默认开通是没有安装系统的,默认情况需要自己安装系统,我都知道kvm 架构的vps 价格要稍高点,性能又不错,所以很多朋友可能会选择低配套餐,如128M 内存的套餐 就不适宜我们常用的CentOS 系统,256M内存及以下,CentOS 6X 系统也是无法安装的,所以我们需要安装暂用内存资源更小的 Debian系统,一样是款非常优秀的系统,使用率也挺高,而且也支持中文。   下面就

  • linux虚拟化KVM(一) 2012-02-20

    1系统一定要是64bit的 2检查硬件是否能虚拟化 查看内核版本 yum install libvirt 安装api支持 yum groupinstall Virtualization 'Virtualization Client' yum -y install qemu-kvm* yum -y install kvm yum -y install python-virtinst yum -y install bridge-utils yum -y install virt-viewer yum

  • KVM虚拟机上关于宿主机的USB设备使用问题探究 2012-04-08

    KVM usb passthrough就是将宿主机的usb接口直接给虚拟机使用,usb接口上的设备也就直接可以在虚拟机上使用。 测试环境 宿主机1 centos 6.6 64位 内核版本 2.6.32-431.1.2.0.1.el6.x86_64 宿主机2 fedora 21 内核版本 3.17.2-300.fc21.x86_64 虚拟机 windows 7 64位 配置方法 第一步 通过lsub或者virt-manager看看有那些usb口可供使用 复制代码 代码如下: lsusb Bus 0

  • debian下openvz和kvm同机部署安装方法 2012-07-31

    最近搞了个机器。想搞成同时支持openvz和kvm虚拟化技术的host。从原理上讲认为问题不大,因为两者分别是不同层面的虚拟化技术,一个是硬件级别虚拟化,一个是cgroup水平的进程级虚拟化(对这块了解不深,说错勿怪)。所以还是可能同时安装的。 搜了下方案,果然有个proxmox的发行版是解决这个需求的。看了下文档,集成了一堆面板啥的,东西越多bug就越多。还是自己diy一个。 由于openvz是需要打过patch的内核运行,而kvm则需要kvm和kvm_intel内核模块的加载(amd的就是k

  • Centos 5.8安装KVM虚拟机学习笔记 2012-09-02

    KVM虚拟机简介 KVM(Kernel-based Virtual Machine)的简称,是一个开源的全虚拟化的解决方案。自从Linux2.6.20之后集成在Linux的各个发行版中,KVM虚拟化运行在x86架构且需要硬件(Intel VT or AMD-V)的支持,它使用Linux自身的调度器进行管理,下面是在centos5.8上面详细安装Kvm虚拟机的详细步骤。 www.2cto.com 1.查看宿主机的cpu是否支持KVM,vmx表示CPU支持Intel VT技术,svm代表CPU支持A

  • kvm bridget配置 2012-09-16

    kvm bridget配置 以前用qemu-kvm来运行虚拟机基本上就是使用的nat方式,虚拟机可以访问外部网络,基本上达到了自己的要求,但是无法在外部访问虚拟机。现在因为要openstack的虚拟化网络管理先在虚拟机上部署环境,所以需要虚拟机之间能够正确的访问并且需要提供外部访问的ip。 www.2cto.com 环境配置 硬件:cpu 双核四线程,内存8G OS:ArchLinux 64 注意:NetworkManager服务可能会使网桥不能正常运行。配置前需要关闭NetworkManage

  • KVM客户机怎么来的使用主机USB设备 2012-11-11

      KVM命令行参数   -usb 打开usb驱动程序,启动客户机usb支持   -usbdevice devname 为客户机增加usb设备,devname有多种形式,详见man kvm,这里只涉及一种形式host:vendor_id:product_id,也就是-usbdevce vendor_id:product_id   获取USB设备参数   将usb设备插入主机之前   $lsusb > usb.old   usb设备插入主机之后   $lsusb > usb.new  

  • KVM或XEN虚拟机应对毒液漏洞的方法 2013-01-22

    爆毒液漏洞,是虚拟化上一个非常严重的漏洞,影响全线的基于KVM/XEN的虚拟化产品。 为什么影响如此严重 因为KVM/XEN的虚拟硬件采用QEMU模拟。CrowdStrike的Jason Geffner发现开源计算机仿真器QEMU中存在一个和虚拟软盘控制器相关的安全漏洞,代号VENOM,CVE编号为CVE-2015-3456。利用此漏洞攻击者可以在有问题的虚拟机中进行逃逸,并且可以在宿主机中获得代码执行的权限,实际上是一个溢出漏洞。 虚拟机有没有软驱都会受影响 这个漏洞属于首次发现,还没有见到被

  • VPS的三种虚拟技术OpenVZ.Xen.KVM优缺点比较 2013-02-15

      本文就VPS采用的几种常见技术OpenVZ、Xen、KVM做简单介绍和对比,以备你选购自己合适的VPS   很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ、Xen、KVM、Xen和HVM与PV。在+XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用于linux内核的系统,效率更高,hvm可以虚拟所有常见操作系统(可以使用 windows),+理论效率比pv略低,另外,hvm需要cpu虚拟化指令支持,pv无此要求。KVM是新兴的虚拟化项

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.041 (s). 10 q(s)