qemu live migration 优化 2(post-copy and x-multifd)

本文探讨QEMU live migration的优化技术,包括postcopy和x-multifd。postcopy提供更快的迁移速度,尤其适合内存读写操作频繁的场景,利用userfaultfd处理page-fault。x-multifd通过多通道并行传输提升迁移效率,显著提高带宽利用率。

今天来讨论讨论post-copy和x-multifd

Postcopy

postcopy 也是现在热门的动态迁移方法,对比起pre-copy,postcopy迁移的速度更快,几乎能达到迁移的源机(source)和目的机(distination)无缝衔接。尤其对于有大量的内存读写操作的虚拟机,迁移带宽又有限,postcopy是热迁移更为有效的方法。

我们先来说说postcopy的原理,从中我们可以看到postcopy的优劣势。

简单来说postcopy就是先把虚拟机现有的CPU state, registers and, optionally, non-pageable memory(内存中不会进行交换或者移动的内存)等信息传输到目的服务器,不管dirty page,并迅速把虚拟机在目的服务器启动起来。同时,源服务器也会动态的把剩余的memory推送到目的服务器上。但是当虚拟机运行调用到还没传输过来的memory时,会触发page-fault. (https://en.wikipedia.org/wiki/Live_migration#Post-copy_memory_migration

postcopy 基于 linux 'userfaultfd' kernel 机制处理这些page-fault的。userfaultfd可以让目的机,在用户空间(userspace)通过文件描述符fd获得page fault的信息(http://xiaogr.com/?p=96)。简单的说就是当虚拟机在目的服务器上调用到这些还未传输完成的内存时,userfaultfd可以到源服务器上把这些内存信息取出,并传输到目的服务器上,让虚拟机继续运行。具体流程可以参考下图:

Postcopyflow.png

虚拟机对于内存的读写压力并不会影响到postcopy是否成功,但是虚拟机迁移完成后,如果对于内存读写压力大的话,会频繁调用userfaultfd,这会对服务器带宽带来压力,也会造成虚拟机性能下降。

下面是对postcopy的简单测试。

源服务器

migrate_set_capability postcopy-ram on
migrate_set_capability postcopy-blocktime on
migrate -d tcp:192.168.4.161:4444
migrate_start_postcopy

目的服务器

migrate_set_capability postcopy-ram on
migrate_set_capability postcopy-blocktime on

postcopy-blocktime打开后可以看到postcopy上传后续ram需要的时间,如下图:

#########################################################################################
10g  |  postcopy on  |  postcopy-blocktime on  |  multifd off  
-----------------------------------------------------------------------------------------
Source:
Migration status: completed
total time: 7386 milliseconds
downtime: 13 milliseconds
setup: 5 milliseconds
transferred ram: 6496539 kbytes
throughput: 7210.48 mbps
remaining ram: 0 kbytes
total ram: 5374400 kbytes
duplicate: 43804 pages
skipped: 0 pages
normal: 101490 pages
normal bytes: 6495360 kbytes
dirty sync count: 4
page size: 64 kbytes
multifd bytes: 0 kbytes
postcopy request count: 2630

Distination:
Migration status: completed
total time: 0 milliseconds
postcopy blocktime: 202
postcopy vcpu blocktime: 202

 

x-multifd

官网上对于x-multifd介绍很简单:Use more than one fd for migration。使用多个fd进行迁移。

下面是对于x-multifd的配置

  migrate_set_capability x-multifd on
  migrate_set_parameter x-multifd-channels 4
  migrate_set_parameter x-multifd-page-count 20

x-multifd-channels:在迁移时,使用多少个channels进行并行传输,也是用于迁移的sockets的数量,默认为2.

x-multifd-page-count:会将多少张pages一并发给一个thread,默认值为16.

实际使用以后发现对于无论postcopy还是precopy的效率提升都非常明显。尤其是能提高对于带宽的利用。下面是一组对比结果

 defaultx-multifd
total time(msec):59803903(34.7%↓)
downtime(msec):501287(42.7%↓)
transfered ram(kB):76652576505620 (15.1%↓)
throughput(mbps):10513.1013689.96 (30.2%↑)
total ram(kB):5374400

5374400

multifd bytes(kB): 6505235

当提高multifd-channels和multifd-page-count后,throughput能够上升到17703mbps,total time下降到2168ms。对于cpu有空闲负载的时候,使用这个方法做热迁移还是不错的。

 

### 安装步骤 #### 安装QEMU 使用命令“sudo apt-get update”更新源,之后使用命令“sudo apt-get install qemu”安装QEMU。安装成功后,可按两次Tab键给出以qemu - 开头的命令查看qemu提供的工具,也可以使用which命令查看安装的QEMU所存放的目录。由于QEMU是用户空间的程序,安装之后不用重启系统,直接用qemu-systemx86_64、qemu-img这样的命令行工具即可使用QEMU [^1]。 #### 安装qemu - user 一般在QEMU User环境中,若使用GNU EABI版本,可通过“sudo apt install gcc - arm - linux - gnueabi”和“sudo ln -s /usr/arm - linux - gnueabi /etc/qemu - binfmt/arm”进行相关操作,但未明确提及“sudo apt - get install”安装qemu - user的特定步骤,推测可直接使用“sudo apt - get install qemu - user”进行安装 [^2]。 #### 安装qemu - user - static 同样未在给定引用中找到特定步骤,推测可使用“sudo apt - get install qemu - user - static”进行安装。 ### 注意事项 - 安装前需使用“sudo apt - get update”更新源,以确保获取到最新的软件包信息 [^1]。 - 由于QEMU是用户空间的程序,安装之后不用重启系统,可直接使用相关命令行工具 [^1]。 ### 可能遇到的问题及解决办法 - **软件包无法找到**:可能是源未正确更新,需再次执行“sudo apt - get update”。 - **依赖问题**:若安装过程中提示缺少依赖,可参考RISC - V Linux QEMU编译安装的依赖安装命令,根据自己机器实际情况进行安装,如“sudo apt - get install build - essential pkg - config libboost - all - dev autoconf libtool libssl - dev flex bison ninja - build libglib2.0 - dev libpixman - 1 - dev libslirp - dev libncurses5 - dev libncursesw5 - dev” [^3]。 ### 代码示例 ```bash # 更新源 sudo apt-get update # 安装QEMU sudo apt-get install qemu # 推测安装qemu-user sudo apt-get install qemu-user # 推测安装qemu-user-static sudo apt-get install qemu-user-static ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值