Documentation

基于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.7
  • Memory: 32GB
  • Processor: Intel Core i9-9880H @ 2.3GHz * 16
  • Platform: VMware Fusion Pro 11.5.0

虚拟机环境:

  • OS: Ubuntu 20.04LTS
  • Memory: 16GB
  • Disk Capacity: 110GB
  • Processor: Intel Core i9-9880H @ 2.3GHz * 8

本实验的工作目录是: cc/lab1/


2. 配置环境

2.0 安装依赖

2.1 安装qemu

  • 检查kvm
  • 安装qemu

2.2. 安装CentOS

  • 创建虚拟磁盘
  • 创建虚拟机
  • qemu-setup-vm.sh
figure
  • 启动虚拟机,我们把虚拟机的22端口映射到localhost的10122端口
  • qemu-launch-vm.sh
figure
  • 我们开启了enable-kvm 来使用kvm对虚拟机进行加速,在开启该选项前,我们的虚拟机在6核+4GB内存的配置下依旧很卡顿,且CPU占用率很高

  • 开启kvm之后,host和VM的资源占用率如下图,虚拟机非常流畅

figure

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-inputvirtio2-output 的个数
  • 我们观察到virtio2-inputvirtio2-output 的个数也都为8

6. 虚拟机热迁移

热迁移,又叫动态迁移,即虚拟机保存/恢复,通常是将整个虚拟机的运行状态完整保存下来,同时可以快速地恢复到原有硬件平台甚至是不同硬件平台上。在热迁移过程中,虚拟机不需要关机,恢复以后,虚拟机依旧平滑运行,用户不会察觉到任何差异。

在本实验中,我们使用两台搭载CentOS 8操作系统的Linux虚拟机来实现在同一个磁盘映像上的热迁移。这种情况在现实世界很常见,通常是在上一个用户的虚拟机被刮起、当前用户的虚拟机被恢复的时候,为了提高磁盘资源利用率,我们可以通过热迁移技术来使两台虚拟机相继访问同一虚拟磁盘。我们将两台虚拟机记为VM1VM2,共享虚拟磁盘为./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并没有启动

figure

6.3 热迁移

  • 在启动VM1的终端中输入
  • 稍等之后,我们看到VM1被暂停,VM1的状态被完整迁移到了VM2
figure
  • 我们在VM1的monitor中输入info migrate 可以查看迁移的细节
  • 我们可以看到,总共的迁移时间是12950ms,CPU中断的时间是104ms.
返回首页