基于KVM的网络虚拟化和虚拟机热迁移
作者:王金元
学号:121260910054
日期:2022.01.08
1. 任务介绍
在本任务中,我们需要完成以下要求:
1.基于QEMU/KVM创建一个使用virtio-net的虚拟机:
- 虚拟机安装CentOS操作系统;
 - 虚拟机可以通过
virtio-net设备访问外部网络; 
2.高性能的虚拟网络是云计算核心之一:
- 基于DPDK和OVS,部署
vhost-user方案; - 评测
vhost-user方案和virtio-net方案; 
3.向高性能+多功能的方向优化:
- 配置
vhost-user和QEMU启动参数,研究网络设备的多队列特性; - 在
vhost-user的基础上进行虚拟机热迁移; 
本实验的计算资源为:
计算平台:
OS: macOS Catalina 10.15.7Memory: 32GBProcessor: Intel Core i9-9880H @ 2.3GHz * 16Platform: VMware Fusion Pro 11.5.0
虚拟机环境:
OS: Ubuntu 20.04LTSMemory: 16GBDisk Capacity: 110GBProcessor: Intel Core i9-9880H @ 2.3GHz * 8
本实验的工作目录是: cc/lab1/
2. 配置环境
2.0 安装依赖
2.1 安装qemu
- 检查kvm
 
- 安装qemu
 
2.2. 安装CentOS
- 创建虚拟磁盘
 
- 创建虚拟机
 
qemu-setup-vm.sh

- 启动虚拟机,我们把虚拟机的22端口映射到
localhost的10122端口 
qemu-launch-vm.sh

- 
我们开启了
enable-kvm来使用kvm对虚拟机进行加速,在开启该选项前,我们的虚拟机在6核+4GB内存的配置下依旧很卡顿,且CPU占用率很高 - 
开启
kvm之后,host和VM的资源占用率如下图,虚拟机非常流畅 

2.3 SSH连接虚拟机
- 我们通过SSH来连接虚拟机
 
- 通过
wget交大主页www.sjtu.edu.cn来测试网络可用 
3. 部署DPDK和OVS
3.1 部署DPDK
- 我们使用厉宇桐同学的脚本
setup-dpdk.sh 
- 检查版本
 
3.2 部署OVS
- 安装
 
- 启动OpenVSwitch
 
- 创建OpenVSwitch端口和桥
 
4. 网络虚拟化方案
4.1 启动虚拟机
4.1.1 基于vhost-user方案的虚拟机 
- 运行脚本
qemu-launch-vhost-user1.sh 
4.1.2 基于virtio方案的虚拟机 
- 运行脚本
qemu-lauch-virtio.sh 
4.2 iperf3测试
4.2.1 命令
- 在host上,监听
1314端口,间隔为1秒 
- 在VM上,使用
30个客户端并行,持续时间为10秒 
4.2.2 结果
vhost方案
virtio方案
- 我们发现
vhost方案的带宽相较于virtio方案提升了将近13.8% 
4.3 ping测试
4.3.1 命令
- 在VM上,发送
10个包给host IP =192.168.36.193 
4.3.2 结果
vhost方案
virtio方案
- 整体看起来,网络延迟方面没有什么区别
 
5. 多队列技术
网卡多队列技术是指将各个队列通过中断绑定到不同的核上,从而解决网络I/O带宽升高时单核CPU的处理瓶颈,提升网络PPS和带宽性能。经过测试,在相同的网络PPS和网络带宽的条件下,与1个队列相比,2个队列最多可提升性能达50%到100%,4个队列的性能提升更大。
- 在host上运行脚本
qemu-launch-multiqueue.sh,我们将最大queue设为8 
- 在VM上查看网卡的信息
 
- 我们看到最大queue为8,目前是4,我们将其设置为8,然后观察
virtio2-input和virtio2-output的个数 
- 我们观察到
virtio2-input和virtio2-output的个数也都为8 
6. 虚拟机热迁移
热迁移,又叫动态迁移,即虚拟机保存/恢复,通常是将整个虚拟机的运行状态完整保存下来,同时可以快速地恢复到原有硬件平台甚至是不同硬件平台上。在热迁移过程中,虚拟机不需要关机,恢复以后,虚拟机依旧平滑运行,用户不会察觉到任何差异。
在本实验中,我们使用两台搭载CentOS 8操作系统的Linux虚拟机来实现在同一个磁盘映像上的热迁移。这种情况在现实世界很常见,通常是在上一个用户的虚拟机被刮起、当前用户的虚拟机被恢复的时候,为了提高磁盘资源利用率,我们可以通过热迁移技术来使两台虚拟机相继访问同一虚拟磁盘。我们将两台虚拟机记为VM1、VM2,共享虚拟磁盘为./centos_disk_0.img。
6.1 启动VM1 
- 运行脚本
qemu-launch-vhost-user1.sh 
6.2 启动VM2 
- 创建一个空的磁盘镜像
 
- 运行脚本
qemu-launch-vhost-user2.sh 
- 
VM2并不会启动,它在监听16666端口,等待迁移。 - 
在下图中,左边是
VM1,右边是VM2,我们看到此时VM2并没有启动 

6.3 热迁移
- 在启动
VM1的终端中输入 
- 稍等之后,我们看到
VM1被暂停,VM1的状态被完整迁移到了VM2中 

- 我们在
VM1的monitor中输入info migrate可以查看迁移的细节 
- 我们可以看到,总共的迁移时间是12950ms,CPU中断的时间是104ms.