传奇私发布1.85,泰安市区号,衍生七星茶
一个完整的数据包从虚拟机到物理机的路径是:
虚拟机--qemu虚拟网卡--虚拟化层--内核网桥--物理网卡
kvm的网络优化方案,总的来说,就是让虚拟机访问物理网卡的层数更少,直至对物理网卡的单独占领,和物理机一样的使用物理网卡,达到和物理机一样的网络性能。
方案一 全虚拟化网卡和virtio
virtio与全虚拟化网卡区别
全虚拟化网卡是虚拟化层完全模拟出来的网卡,半虚拟化网卡通过驱动对操作系统做了改造;
viritio简单的说,就是告诉虚拟机,hi 你就是在一个虚拟化平台上跑,咱们一起做一些改动,让你在虚拟化平台上获得更好的性能;
关于virtio的使用场景
因 为windows虚拟机使用viritio有网络闪断的情况发生,windows 虚拟机如果网络压力不高,建议使用e1000这样的全虚拟化网卡,如果网络压力比较高,建议使用srivo或者pci device assignment这样的技术;viritio也在不断的演进,希望windows的闪断的问题越来越少。
kvm天生就是为linux系统设计的,linux系统请放心大胆的使用viritio驱动;
方案二 vhost_net macvtap技术
vhost_net使虚拟机的网络通讯直接绕过用户空间的虚拟化层,直接可以和内核通讯,从而提供虚拟机的网络性能;
macvtap则是跳过内核的网桥;
使用vhost_net,必须使用virtio半虚拟化网卡;
vhost_net虚拟机xml文件配置,
如果不使用vhost_net,则为
<driver name="qemu"/>
macvtap 虚拟机xml配置
注意: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属于哪个层不准确,而是属于进行二层网络数据传递的优化。
方案三 虚拟机网卡独占
网卡passthrough在虚拟机的配置方法
1 使用lcpci 设备查看pci设备信息
也可以使用virsh nodedev-list –tree得到信息
2 使用virsh nodedev-dumxml pci_0000_04_00_0得到xml配置信息
3 编辑虚拟机xml文件,加入pci设备信息
domain bus slot function信息从dumpxml出的xml文件获取,define虚拟机,然后开启虚拟机就可以,注意以为附件上去的是物理设备,需要在系统里面安装相应的驱动。
方案四 sr-ivo技术
sriov的原理
sr-ivo 是the single root i/o virtualization 的简写,是一个将pcie共享给虚拟机使用的标准,目前用在网络设备上比较多,理论上也可以支持其他的pci设备,sriov需要硬件的支持。
以下内容来自oracle网站,链接为
http://docs.oracle.com/cd/e38902_01/html/e38873/glbzi.html
物理功能 (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命令可以看多主网卡和子网卡
虚拟机可以听过pci网卡独占的方式使用子网卡;
虚拟机网卡xml文件
方案五 网卡多队列
centos 7开始支持virtio网卡多队列,可以大大提高虚拟机网络性能,配置方法如下:
虚拟机的xml网卡配置
n 1 - 8 最多支持8个队列
在虚拟机上执行以下命令开启多队列网卡
m 1 - n m小于等于n
kvm网络优化方案个人认为以硬件为主,硬件上万兆+sriov的方案会越来越普及,但是在线迁移的问题有待解决。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新补丁让Windows 10出现死机、卡顿等 微软坐不住称正解决
Ubuntu 20.04 LTS进驻Windows子系统:只能用3年
ThinkPad正式加入:预装Linux发行版而非Win10的PC越来越多了
最新版Android 11推送!谷歌Pixel 5被曝光:支持反向充电
高度致敬Windows!开源优麒麟20.04 LTS发布:支持5年
电脑小知识:Windows 10是用什么语言写的?到底有多少行代码?
Win10 5月更新准正式版:微软引入大量新功能 系统响应速度快
Windows 10新预览版19613推送:修复任务栏图标显示异常BUG
Windows AD 报错解决:UAC File Virtualization服务启动失败 此驱动程序被阻止加载
网友评论