假设带有KVM的Linux主机运行带有virtio接口的Linux guest虚拟机,那么对virtio接口可以实现的吞吐量的限制因素是什么?

即使带宽由于其虚拟接口而可能为1 Gbps,但我仍假定数据吞吐量可以更高。 吞吐量受客户机VM的CPU约束还是在此之前存在virtio驱动程序限制?

===============>>#1 票数:4 已采纳

virtio驱动程序是半虚拟化驱动程序,这意味着该驱动程序的某些内部功能,环形缓冲区和寄存器都对guest虚拟机开放,并且guest虚拟机可以像访问guest虚拟机一样轻松地访问guest虚拟机。

这样,暴露的环形缓冲区的大小为一个限制,并被硬编码为256个元素。 我已经看到一些qemu补丁来增加该大小,但是它不在主线中,因此我猜测额外的内存使用的缺点太高而无法允许这样做。

更好的方法是让您的客户机OS使用多个virtio队列。 默认值是tx的一个,rx一个。 因此,您有多个发送队列,然后在该队列上进行负载均衡。 这将提供更高的吞吐量,但不会提供单个会话。

vhost-net也许是更好的方法。 我自己没有尝试过,但是据我了解,这是向来宾公开的相同的virtio接口,但是后端是作为内核模块实现的,而不是在用户空间qemu中实现的; 我可以想象这可以降低中断延迟。 噢,是的,中断等待时间是另一个限制因素,我发现它是来宾驱动程序最好的方法,它可以使每个中断从环中拉出尽可能多的数据包,以最大程度地提高速度。 vhost-net详细信息在这里http://www.linux-kvm.com/content/how-maximize-virtio-net-performance-vhost-net

  ask by Manohar translate from so

未解决问题?本站智能推荐: