5
debian
virtualbox
virtio
我目前正在使用 Debian 为主机和客户端安装 VirtualBox 服务器。我在网络性能和 CPU 负载方面遇到了一些麻烦,尤其是在使用仅主机网络时,我不知道如何进一步跟踪。
主机和客户端都没有可用的 GUI。
我进行了几次测试iperf以了解出了什么问题。
主机 = Virtualbox 主机(运行iperf -s)、Core i7(4x2 内核 @ 1,6 GHz)、16 GiB RAM
- 192.168.0.13、eth0(板载 Broadcom 千兆)、Gigabit Cat.6 通过 SoHo 千兆交换机
- 192.168.0.20, eth1 (Broadcom Gigabit onboard), Gigabit Cat.6 via SoHo Gigabit Switch
- 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
- VirtualBox:4.1.18_Debianr78361
客户端 = VirtualBox 客户端(运行iperf -s),2 个内核,2 GiB RAM
- 192.168.0.14, eth0, 使用 virtio 桥接到主机的 eth1
- 192.168.14.100、eth1、vboxnet0、VirtualBox 使用 virtio 的仅主机网络
- 虚拟机上的 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 Gigabit)-> 其他物理有线机器通过交换机
- 命令:
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 Gigabit Server 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 的 Host-only 网络受到客户端 CPU 的瓶颈,仅达到主机本机速度的 8%!
- 场景:Virtualbox vboxnet0 host-only 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 = 测试 5 使用 Intel 82543GC,开始良好,然后减少到一小部分!?
- 场景: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%
Q1:为什么虚拟机内的Loopback测试(4)比主机上的同一个测试慢三倍?它不应该接近原生速度吗?
Q2:为什么普通的使用virtio的桥接网络在主机端造成如此大的负载,并没有达到1Gbps?测试 (5)
Q3:为什么虚拟机内的桥接测试(6)比主机上的环回测试慢八倍(比虚拟机上的环回慢三倍)?
Q4:为什么虚拟机内的host-only测试(7)比主机上的loopback测试慢12倍(比虚拟机上的loopback慢4倍)?
我预计一些虚拟化方面会影响 Q1-Q4。virtio 似乎导致 Q2-Q4 - 但我不知道在哪里调查或调整。
这一切听起来还不错。但问题源于对 iSCSI 使用仅主机网络。它导致 HDD 传输速度低至 10 MB/s,CPU 使用率高 - HDD 能够达到 147 MB/s。肯定有什么不对...