为什么使用 virtio 的 VirtualBox 网络很慢(桥接和仅主机,Debian)

为什么使用 virtio 的 VirtualBox 网络很慢(桥接和仅主机,Debian)

我目前正在使用 Debian 为主机和客户端安装 VirtualBox 服务器。我遇到了一些与网络性能和 CPU 负载有关的问题,尤其是在使用仅主机网络时,我不知道如何进一步追踪这个问题。

主机和客户端都没有可用的 GUI。

我进行了几项测试来iperf了解出了什么问题。


主机 = Virtualbox 主机(正在运行iperf -s),Core i7(4x2 核 @ 1,6 GHz),16 GiB RAM

  • 192.168.0.13,eth0(板载 Broadcom 千兆),通过 SoHo 千兆交换机连接千兆 Cat.6
  • 192.168.0.20,eth1(板载 Broadcom 千兆),通过 SoHo 千兆交换机连接千兆 Cat.6
  • 192.168.14.1,vboxnet0,VirtualBox 仅主机网络
  • 操作系统:Debian 7.2.0 amd64(Wheezy),内核 3.2.0-4-amd64,SMP Debian 3.2.51-1 x86_64
  • 虚拟盒:4.1.18_Debianr78361

客户端 = VirtualBox 客户端(正在运行iperf -s),2 个核心,2 GiB RAM

  • 192.168.0.14,eth0,使用 virtio 桥接至主机的 eth1
  • 192.168.14.100,eth1,vboxnet0,使用 virtio 的 VirtualBox 仅主机网络
  • 虚拟机上的 lsmod 列出了“virtio_net”、“virtio_PCI”、“virtio_ring”和“virtio”
  • 安装了 virtualbox-guest-(dkms|utils|x11) 和 virtualbox-ose-guest-x11
  • 操作系统:Debian 7.2.0 amd64(Wheezy),内核 3.2.0-4-amd64,SMP Debian 3.2.51-1 x86_64

其他物理机(正在运行iperf -s

  • 192.168.0.2,通过 SoHo 千兆交换机进行千兆 Cat.6 连接
  • 操作系统:Ubuntu 服务器

测试 1:物理机上的环回性能很好(>60 Gbit/s),但 iperf-client 会造成瓶颈,导致一个核心饱和:

  • 场景:物理机上的环回
  • 命令:iperf -c 127.0.0.1 -B 127.0.0.1 -i 60 -t 600
  • 带宽(Mb/s): 62100 61900 61800 61900 61800 61900 61900 61900 61800 ->61900
  • CPU:主机(iperf -s)70%,主机(iperf -c)100%

测试 2:通过 eth0 的传统连接按预期工作:

  • 场景:主机 eth0(板载 Broadcom 千兆)-> 通过交换机连接其他物理连接的机器
  • 命令:iperf -c 192.168.0.2 -B 192.168.0.13 -i 60 -t 600
  • 带宽(Mb/s): 942 941 941 941 941 941 941 941 941 ->941
  • CPU:主机(iperf -c)3.5%

测试 3:通过 eth1 的传统连接按预期工作:

  • 场景:主机 eth1(Intel 千兆服务器 4xNIC PCIe)-> 通过交换机连接其他物理连接的机器
  • 命令:iperf -c 192.168.0.2 -B 192.168.0.20 -i 60 -t 600
  • 带宽(Mb/s): 942 941 941 941 941 941 941 941 941 ->941
  • CPU:主机(iperf -c)3.5%

测试 4:虚拟机内的环回几乎如预期般饱和了两个虚拟核心;达到了主机本机速度的 30%:

  • 场景:完全在虚拟机内环回
  • 命令:iperf -c 192.168.14.1 -B 192.168.14.100 -i 60 -t 600
  • 带宽(Mb/s): 19600 19500 19600 19500 19500 19600 19600 19500 19500 ->19500
  • CPU:主机(VBoxHeadless)200%,客户端(iperf -s)75%,客户端(iperf -c)100%

测试 5:桥接至外界的 virtio 驱动程序性能为 50%(40 - 70%),并且在客户端空闲时占用主机 CPU:

  • 场景:Virtualbox eth0 virtio 桥接至主机 eth1 -> 通过交换机连接其他物理连接的机器
  • 命令:iperf -c 192.168.0.2 -B 192.168.0.14 -i 60 -t 600
  • 带宽(Mb/s): 401 458 480 367 582 720 431 388 696 553 ->508
  • CPU:主机(VBoxHeadless)30-60%,客户端(iperf -c)3%

测试 6:桥接的 virtio 驱动程序到主机的瓶颈在于客户端的 CPU,只能达到主机本机速度的 12%!

  • 场景:Virtualbox eth0 virtio 桥接至主机 eth1 -> 主机的 eth1
  • 命令:iperf -c 192.168.0.20 -B 192.168.0.14 -i 60 -t 600
  • 带宽(Mb/s): 7420 7660 7310 7620 7690 7580 7570 7580 7700 7710 ->7580
  • CPU:主机(VBoxHeadless)160%,主机(iperf -s)11%,客户端(iperf -c)100%

测试 7:使用 virtio 的仅主机网络受到客户端 CPU 的瓶颈,只能达到主机本机速度的 8%!

  • 场景:Virtualbox vboxnet0 仅主机 virtio
  • 命令:iperf -c 192.168.14.1 -B 192.168.14.100 -i 60 -t 600
  • 带宽(Mb/s): 4760 4740 4980 5300 4890 4560 5270 4850 5450 5070 ->4990
  • CPU:主机(VBoxHeadless)170%,主机(iperf -s)13%,客户端(iperf -c)100%

我又进行了一些测试,结果却更加令人困惑——肯定是有些东西坏了。

测试 8= 使用 Intel 82545EM 的测试 6 比 virtio 慢

  • 场景:Virtualbox eth0 Intel 82545EM 桥接至主机 eth1 -> 主机的 eth1
  • 命令:iperf -c 192.168.0.20 -B 192.168.0.14 -i 60 -t 600
  • 带宽(Mb/s): 3250 3300 3270 3290 3320 3380 3330 3330 3300 3300 ->3310
  • CPU:主机(VBoxHeadless)110%,主机(iperf -s)5%,客户端(iperf -c)100%

测试 9= 使用Intel 82543GC的测试6非常慢!

  • 场景:Virtualbox eth0 Intel 82543GC 桥接至主机 eth1 -> 主机的 eth1
  • 命令:iperf -c 192.168.0.20 -B 192.168.0.14 -i 60 -t 600
  • 带宽(Mb/s): 667 627 717 743 633 653 621 677 701 623 ->666
  • CPU:主机(VBoxHeadless)35 - 117%,主机(iperf -s)5 - 17%,客户端(iperf -c)50 - 100%

测试 10= 使用 Intel 82545EM 进行测试 5 ->失败建立连接

  • 场景:Virtualbox eth0 Intel 82545EM 桥接至主机 eth1 -> 通过交换机连接其他物理连接的机器
  • 命令:iperf -c 192.168.0.2 -B 192.168.0.14 -i 60 -t 600
  • 带宽(Mb/s):
  • CPU:主机(VBoxHeadless)30-60%,客户端(iperf -c)3%

测试 11= 使用 Intel 82543GC 进行测试 5,开始良好,然后减少为小数!?

  • 场景:Virtualbox eth0 Intel 82543GC 桥接至主机 eth1 -> 通过交换机连接其他物理连接的机器
  • 命令:iperf -c 192.168.0.2 -B 192.168.0.14 -i 60 -t 600
  • 带宽(Mb/s): 935 941 909 936 941 940 941 339 219 216 ->732
  • CPU:主机(VBoxHeadless)100%,客户端(iperf -c)60%

问题 1:为什么虚拟机中的环回测试 (4) 比主机上的相同测试慢三倍?它不应该接近本机速度吗?

Q2:为什么使用 virtio 的普通桥接网络会导致主机端负载过大,达不到 1Gbps? 测试(5)

Q3:为什么虚拟机内的桥接测试(6)比主机上的环回测试慢八倍(比虚拟机上的环回慢三倍)?

Q4:为什么虚拟机中的仅主机测试(7)比主机上的环回测试慢十二倍(比虚拟机上的环回慢四倍)?

我预计一些虚拟化方面会影响 Q1-Q4。virtio 似乎导致了 Q2-Q4 - 但我不知道在哪里调查或调整。

这一切听起来都不算太糟。但问题源于使用主机专用网络进行 iSCSI。这导致 HDD 传输速度低至 10 MB/s 且 CPU 使用率高 - HDD 能够达到 147 MB​​/s。肯定出了问题...

相关内容