在选择KVM中的网络设备时,一般来说优先选择半虚拟化的网络设备而不是纯软件模拟的设备,使用virtio_net半虚拟化驱动,可以提高网络吞吐量(throughput)和降低网络延迟(latency),从而让客户机中网络达到几乎和原生网卡差不多的性能。
virtio_net的使用,需要两部分的支持,一部分是宿主机中的QEMU工具的支持,另一部分是客户机中virtio_net驱动的支持。较新的QEMU都有对virtio网卡设备的支持,且较新的流行Linux发行版中都已经将virtio_net作为模块编译到系统之中了,所以使用起来还是比较方便的。
可以通过如下几个步骤来使用virtio_net:
(1)查看宿主机对virtio_net的支持
使用命令“grep Virtio_NET/boot/config-4.12.0-rc5+”查看宿主机对virtio_net的支持。“CONFIG_Virtio_NET=m”表示当前使用的Ubuntu系统已经将virtio_net作为模块编译到系统之中。
(2)查看QEMU是否支持virtio类型的网卡
检查QEMU是否支持virtio类型的网卡,从“qemu-system-x86_64-net nic,model=?”命令的输出信息中支持网卡的类型可知,当前QEMU支持virtio网卡。
(3)QEMU的TAP网络设置
因为虚拟机网络需要以TAP的方式进行启动,所以首先需要在宿主机上配置QEMU的TAP网络设置。在基于Debian和Ubuntu的系统上,首先要安装含有建立虚拟网络设备(TAP interfaces)的工具uml-utilities和桥接工具bridge-utils。
1)安装uml-utilities和bridge-utils
在宿主机上使用命令“apt-get install uml-utilities”和“apt-get install bridgeutils”安装建网和桥接工具。
2)将虚拟机用户名添加至uml-net组
为了使虚拟机能够访问网络接口,必须将运行虚拟主机的用户名(通常是你的虚拟机ubuntu的登录用户名)添加到uml-net用户组(请用你的用户名替换其中的“steven”),在宿主机执行命令如下:
接下来为了使改动生效,重新启动电脑。
3)修改宿主机网络
为保证虚拟机和宿主机的连通,需要在宿主机上建立tap0虚拟机网络设备和br0网桥。使用命令“sudo vim/etc/network/interfaces”打开网络配置文件。
在打开的interfaces文件后面添加下面的内容,将虚拟网络接口命名为“tap0”,指定该接口IP配置为手动方法,并指定使用该接口的用户,这里使用的用户名是“steven”。
继续在/etc/network/interfaces中添加内容,建立一个名叫“br0”的桥,该桥的IP配置可以配置为通过DHCP分配,也可以使用静态IP,IP地址等需要根据自己的网络状况做相应的更改,enp2s0为宿主机的物理网络设备。宿主机中的所有网络接口,也包括tap0这个虚拟网络接口,都将建立在这个桥之上,添加内容如下:
4)创建TAP网络脚本
接下来在宿主机上需要为tap网络创建启动和关闭脚本。使用命令“sudo vi/etc/qemu-ifup”在“/etc”目录下创建“qemu-ifup”脚本,写入以下内容:(www.xing528.com)
接下来再创建一个空的tap网络关闭脚本,以避免关闭虚拟机时的警告。使用命令“sudo vi/etc/qemu-ifdown”在“/etc”目录下创建“/qemu-ifdown”文件,写入以下内容:
5)修改TAP网络脚本执行权限
默认情况下,“/etc/qemu-ifup”和“/etc/qemu-ifdown”两个脚本文件没有执行权限,需要使用命令“chmod+x/etc/qemu*”修改其执行权限。修改完毕后使用命令“Is-1/etc/qemu-if*”查看,显示如下:
6)启动新建的tap0虚拟网络接口和网桥br0
首次使用需要激活刚才建立的虚拟网络接口和网络桥,使用命令“sudo/sbin/ifup tap0”和“sudo/sbin/ifup br0”即可。
接下来使用命令“/etc/init.d/networking restart”重启网络,重启后使用“ifconfig”查看宿主机网络接口,内容如下:
以上配置中,br0为新建的网桥,使用静态IP。enp2s0为宿主机物理网络接口,lo为回环网络,tap0为新建的宿主机虚拟网络接口,enp2s0和tap0都通过br0进行桥接。
(4)启动虚拟机Ubuntu14.04
接下来使用以下命令启动虚拟机Ubuntu14.04:
“model=virtio”表明使用virto_net启动虚拟机网络。在虚拟机中使用命令“grep Virtio/boot/config-3.13.0-24-generic”查看虚拟机virtio网卡的使用情况。如图4-37所示。
图4-37 虚拟机Ubuntu14.04的virtio使用情况
在图4-37中可以看到“CONFIG_Virtio_NET=y”表明虚拟机内核中配置了virtio_net模块。使用命令“lspci”可以看到如图4-38所示的“Red Hat,Inc Virtio network device”的虚拟virtio网络设备。
图4-38 虚拟机的virtio网络设备
使用“ifconfig eth0”和“ethtool-i eth0”命令查看虚拟机网络,从图4-39输出信息可知,网络接口eth0使用了virtio_net驱动,并且通过“ping 192.168.10.225”(IP为宿主机IP)命令可知当前网络连接工作正常。
图4-39 虚拟机网络查看
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。