盈彩体育注册(中国)有限公司
盈彩体育注册(中国)有限公司 您所在的位置:网站首页 盈彩体育注册(中国)有限公司 KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full

KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full

2024-05-06 15:57:17| 来源: 网络整理

  前面提到 virtio 在宿主机中的后端处理程序(backend)一般是由用户空间的QEMU提供的,然而如果对于网络 I/O 请求的后端处理能够在在内核空间来完成,则效率会更高,会提高网络吞吐量和减少网络延迟。在比较新的内核中有一个叫做 “vhost-net” 的驱动模块,它是作为一个内核级别的后端处理程序,将virtio-net的后端处理任务放到内核空间中执行,减少内核空间到用户空间的切换,从而提高效率。

根据 KVM 官网的这篇文章,vhost-net 能提供更低的延迟(latency)(比 e1000 虚拟网卡低 10%),和更高的吞吐量(throughput)(8倍于普通 virtio,大概  7~8 Gigabits/sec )。

vhost-net 与 virtio-net 的比较:

vhost-net 的要求:

qemu-kvm-0.13.0 或者以上 主机内核中设置 CONFIG_VHOST_NET=y 和在虚机操作系统内核中设置 CONFIG_PCI_MSI=y (Red Hat Enterprise Linux 6.1 开始支持该特性) 在客户机内使用 virtion-net 前段驱动 在主机内使用网桥模式,并且启动 vhost_net

qemu-kvm 命令的 -net tap 有几个选项和 vhost-net 相关的: -net tap,[,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]

vnet_hdr =on|off:设置是否打开TAP设备的“IFF_VNET_HDR”标识。“vnet_hdr=off”表示关闭这个标识;“vnet_hdr=on”则强制开启这个标识,如果没有这个标识的支持,则会触发错误。IFF_VNET_HDR是tun/tap的一个标识,打开它则允许发送或接受大数据包时仅仅做部分的校验和检查。打开这个标识,可以提高virtio_net驱动的吞吐量。 vhost=on|off:设置是否开启vhost-net这个内核空间的后端处理驱动,它只对使用MIS-X中断方式的virtio客户机有效。 vhostforce=on|off:设置是否强制使用 vhost 作为非MSI-X中断方式的Virtio客户机的后端处理程序。 vhostfs=h:设置为去连接一个已经打开的vhost网络设备。

vhost-net 的使用实例:

(1)确保主机上 vhost-net 内核模块被加载了

(2)启动一个虚拟机,在客户机中使用 -net 定义一个 virtio-net 网卡,在主机端使用 -netdev 启动 vhost

(3)在虚拟机端,看到 virtio 网卡使用的 TAP 设备为 tap0。

(4)在宿主机中看 vhost-net 被加载和使用了,以及 Linux 桥 br0,它连接物理网卡 eth1 和 客户机使用的 TAP 设备 tap0

 

一般来说,使用 vhost-net 作为后端处理驱动可以提高网络的性能。不过,对于一些网络负载类型使用 vhost-net 作为后端,却可能使其性能不升反降。特别是从宿主机到其中的客户机之间的UDP流量,如果客户机处理接受数据的速度比宿主机发送的速度要慢,这时就容易出现性能下降。在这种情况下,使用vhost-net将会是UDP socket的接受缓冲区更快地溢出,从而导致更多的数据包丢失。故这种情况下,不使用vhost-net,让传输速度稍微慢一点,反而会提高整体的性能。

使用 qemu-kvm 命令行,加上“vhost=off”(或没有vhost选项)就会不使用vhost-net,而在使用libvirt时,需要对客户机的配置的XML文件中的网络配置部分进行如下的配置,指定后端驱动的名称为“qemu”(而不是“vhost”)。

   

   

2.6 virtio-balloon

另一个比较特殊的 virtio 设备是 virtio-balloon。通常来说,要改变客户机所占用的宿主机内存,要先关闭客户机,修改启动时的内存配置,然后重启客户机才可以实现。而 内存的 ballooning (气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。该技术能够:

当宿主机内存紧张时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放部分空闲内存。若其内存空间不足,可能还会回收部分使用中的内存,可能会将部分内存换到交换分区中。 当客户机内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。 目前很多的VMM,包括 KVM, Xen,VMware 等都对 ballooning 技术提供支持。其中,KVM 中的 Ballooning 是通过宿主机和客户机协同来实现的,在宿主机中应该使用 2.6.27 及以上版本的 Linux内核(包括KVM模块),使用较新的 qemu-kvm(如0.13版本以上),在客户机中也使用 2.6.27 及以上内核且将“CONFIG_VIRTIO_BALLOON”配置为模块或编译到内核。在很多Linux发行版中都已经配置有“CONFIG_VIRTIO_BALLOON=m”,所以用较新的Linux作为客户机系统,一般不需要额外配置virtio_balloon驱动,使用默认内核配置即可。   原理: KVM 发送请求给 VM 让其归还一定数量的内存给KVM。 VM 的 virtio_balloon 驱动接到该请求。 VM 的驱动是客户机的内存气球膨胀,气球中的内存就不能被客户机使用。 VM 的操作系统归还气球中的内存给VMM KVM 可以将得到的内存分配到任何需要的地方。 KM 也可以将内存返还到客户机中。

优势和不足:

  优势 不足 ballooning 可以被控制和监控 对内存的调节很灵活,可多可少。 KVM 可以归还内存给客户机,从而缓解其内存压力。 需要客户机安装驱动 大量内存被回收时,会降低客户机的性能。 目前没有方便的自动化的机制来管理 ballooning,一般都在 QEMU 的 monitor 中执行命令来实现。 内存的动态增加或者减少,可能是内存被过度碎片化,从而降低内存使用性能。

在QEMU monitor中,提供了两个命令查看和设置客户机内存的大小。

(qemu) info balloon    #查看客户机内存占用量(Balloon信息) (qemu) balloon num   #设置客户机内存占用量为numMB 使用实例:

 (1)启动一个虚机,内存为 2048M,启用 virtio-balloon

(2)通过 vncviewer 进入虚机,查看 pci 设备

(3)看看内存情况,共 2G 内存

(4)进入 QEMU Monitor,调整 balloon 内存为 500M

(5)回到虚机,查看内存,变为 500 M

 2.7 RedHat 的 多队列 Virtio (multi-queue)


【本文地址】 转载请注明 

最新文章

推荐文章

CopyRight 2018-2019 盈彩体育注册(中国)有限公司 版权所有 豫ICP备16040606号-1