假设Linux主机的KVM运行带有virtio接口的Linux来宾VM,那么对于virtio接口可以实现的吞吐量的限制因素是什么?
即使带宽可能是1 Gbps,因为它的虚拟接口我假设数据吞吐量可能更多。吞吐量是否受访客VM的CPU限制,或者在此之前是否存在virtio驱动程序限制?
答案 0 :(得分:4)
virtio驱动程序是一个半虚拟化驱动程序,这意味着驱动程序的一些内部,环形缓冲区和寄存器暴露给guest虚拟机,并且可以由guest虚拟机访问,就好像它写入guest虚拟机内存一样少。击中。
暴露的环形缓冲区的大小是一个限制,并且硬编码为256个元素。我已经看到一些qemu补丁增加了这个大小,但是它不在主线中,因此我猜测额外内存使用的缺点太高而不允许这样做。
更好的方法是让您的客户操作系统使用多个virtio队列。对于tx,默认值为1,对于rx,默认值为1。因此,您有多个tx队列,然后在其上进行负载均衡流量。这样可以提高吞吐量,但不能用于单个会话。
vhost-net也许是一个更好的方法。我自己没试过,但据我所知,这是暴露给guest的同一个virtio接口,但后端是作为内核模块而不是用户空间qemu实现的;这可以让我想象出更低的中断延迟。哦,是的,中断延迟是另一个限制因素,我发现客户端驱动程序可以在每次中断时从环中拉出尽可能多的数据包,以最大限度地提高速度。 vhost-net详细信息在http://www.linux-kvm.com/content/how-maximize-virtio-net-performance-vhost-net