我的虚拟机(Ubuntu 12.04)连接了 2 个网络接口,被识别为eth0
和eth1
。
现在我想把卡换成virtio来提高性能,所以我打开VM 设置并将两个适配器的类型更改为半虚拟化网络 (virtio-net)
但重新启动后,性能似乎是一样的,甚至慢得多,当我检查输出时,旁边ifconfig
还有另一个virbr0
界面。eth0
eth1
我以为在 VirtualBox 中更改类型会使其eth0
成为eth1
virtio 适配器。后来我在网上找到的几页证实了这一点。他们说只需更改适配器类型就足够了,速度会立即提高。但就我的情况而言并非如此。
如何配置适配器以使其工作?
配置如下。eth0
是通向外部网络的桥梁。eth1
是仅主机适配器
$ ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:62:0d:bd
inet addr:10.184.130.70 Bcast:10.184.130.255 Mask:255.255.240.0
inet6 addr: fe80::a00:27ff:fe64:dbd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:411321 errors:0 dropped:2 overruns:0 frame:0
TX packets:118875 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:298154310 (298.1 MB) TX bytes:65017532 (65.0 MB)
eth1 Link encap:Ethernet HWaddr 08:00:27:9d:6b:df
inet addr:172.17.0.6 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::a00:27ff:fe8d:6bdf/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12445 errors:0 dropped:0 overruns:0 frame:0
TX packets:13566 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1275663 (1.2 MB) TX bytes:8705940 (8.7 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8538 errors:0 dropped:0 overruns:0 frame:0
TX packets:8538 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2286738 (2.2 MB) TX bytes:2286738 (2.2 MB)
virbr0 Link encap:Ethernet HWaddr 76:ee:57:37:78:7c
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
我已经运行了lsmod | grep virt
,但没有显示结果。insmod
没有显示任何类似的virtio_net
东西
$ insmod virt<tab><tab>
virtio_balloon virtio_console virtio_mmio virtio-rng virtual
当前内核Linux vmdev 3.2.0-124-generic #167-Ubuntu SMP Fri Mar 3 15:26:21 UTC 2017 i686 i686 i386 GNU/Linux
。我需要什么选项来启用 virtio 驱动程序的加载吗?
该文件/etc/udev/rules.d/70-persistent-net.rules
也没有显示与 virtio 相关的任何内容,除了在我重新生成适配器的 MAC 地址时的评论中
我进行了很多测试iperf
,使用 Intel PRO/1000 适配器的结果在 250-350Mbps 左右,而使用 virtio-net 卡的结果始终在 100-150Mbps 之间,远远低于我的预期。所以我现在要换回 e1000 卡,直到找到解决方案。
我在网上看到一些可能的相关问题,但目前还没有办法解决
- https://getsatisfaction.cumulusnetworks.com/cumulus/topics/cumulus-vx-virtualbox-virtio-nic-slow
- https://bugs.launchpad.net/ubuntu/+source/qemu-kvm/+bug/1079212
- https://forums.virtualbox.org/viewtopic.php?f=7&t=26783
编辑:
我的项目已经更新到新的 64 位 Ubuntu 14.04 VM(3.13.0-86-generic #131-Ubuntu SMP Thu May 12 23:33:13 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
),但结果仍然相同。virtio 仍然比 Intel 1000 慢得多
答案1
手动的第 6 章 虚拟网络:
“半虚拟化网络适配器 (virtio-net)” 比较特殊。如果选择此选项,VirtualBox 不会虚拟化常见的网络硬件(即开箱即用的常见客户操作系统支持的硬件)。相反,VirtualBox 需要客户机提供用于虚拟化环境的特殊软件接口,从而避免模拟网络硬件的复杂性并提高网络性能。从 3.1 版开始,VirtualBox 提供对行业标准“virtio”网络驱动程序的支持,这些驱动程序是开源 KVM 项目的一部分。