如何在 Virtualbox 中启用 virtio?

如何在 Virtualbox 中启用 virtio?

我的虚拟机(Ubuntu 12.04)连接了 2 个网络接口,被识别为eth0eth1

现在我想把卡换成virtio来提高性能,所以我打开VM 设置并将两个适配器的类型更改为半虚拟化网络 (virtio-net)

但重新启动后,性能似乎是一样的,甚至慢得多,当我检查输出时,旁边ifconfig还有另一个virbr0界面。eth0eth1

我以为在 VirtualBox 中更改类型会使其eth0成为eth1virtio 适配器。后来我在网上找到的几页证实了这一点。他们说只需更改适配器类型就足够了,速度会立即提高。但就我的情况而言并非如此。

如何配置适配器以使其工作?

配置如下。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 卡,直到找到解决方案。

我在网上看到一些可能的相关问题,但目前还没有办法解决


编辑:

我的项目已经更新到新的 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 项目的一部分。

相关内容