QATzip 压缩
网络带宽有限时,QATzip 可借助 Intel QuickAssist Technology(QAT)硬件 加速压缩和解压,节省大量主机 CPU 资源。
以下测试使用 8 个 multifd 通道和 10 Gbps 网络。 结果表明,相比 zstd,QATzip 显著节省发送端 CPU,并缩短迁移时间。 相比不压缩,它大幅提高以每秒页面数衡量的脏页处理能力,同时缩短总迁移时间。
虚拟机配置:16 vCPU,64G 内存
虚拟机负载:所有 vCPU 空闲,54G 内存填充 Silesia 数据。
QAT 设备:4
|-----------|--------|---------|----------|----------|------|------|
|8 通道 |总 |停机 |吞吐量 |每秒 | 发送 | 接收 |
| |时间(ms)|时间(ms) |(mbps) |页数 | cpu %| cpu% |
|-----------|--------|---------|----------|----------|------|------|
|qatzip | 16630| 28| 10467| 2940235| 160| 360|
|-----------|--------|---------|----------|----------|------|------|
|zstd | 20165| 24| 8579| 2391465| 810| 340|
|-----------|--------|---------|----------|----------|------|------|
|none | 46063| 40| 10848| 330240| 45| 85|
|-----------|--------|---------|----------|----------|------|------|
QATzip 压缩框架
QATzip 是基于 Intel QuickAssist Technology 的用户空间库, 提供扩展的加速压缩和解压服务。
更多介绍见 QATzip 简介。
+----------------+
| MultiFd 线程 |
+-------+--------+
|
| 压缩/解压
+-------+--------+
| QATzip 库 |
+-------+--------+
|
+-------+--------+
| QAT 库 |
+-------+--------+
| 用户空间
--------+---------------------
| 内核空间
+------+-------+
| QAT 驱动 |
+------+-------+
|
+------+-------+
| QAT 设备 |
+--------------+
安装 QATzip
部分 Linux 发行版已集成 QATzip 软件包,可直接安装。 例如 Ubuntu Server 24.04 LTS 可使用以下命令:
#apt search qatzip
libqatzip-dev/noble 1.2.0-0ubuntu3 amd64
Intel QuickAssist user space library development files
libqatzip3/noble 1.2.0-0ubuntu3 amd64
Intel QuickAssist user space library
qatzip/noble,now 1.2.0-0ubuntu3 amd64 [installed]
Compression user-space tool for Intel QuickAssist Technology
#sudo apt install libqatzip-dev libqatzip3 qatzip
如果系统没有相应软件包,可以从源码构建安装,见 QATzip 源码安装。
部署 QAT 硬件
QAT 支持通过物理功能(PF)或虚拟功能(VF)部署, 可以按实际需求配置迁移所用资源。详情见 Intel QuickAssist Technology 文档。
如何使用 QATzip 压缩
1 - 安装 QATzip 库。
2 - 构建 QEMU 时使用 --enable-qatzip。
例如 configure --target-list=x86_64-softmmu --enable-kvm
--enable-qatzip
3 - 设置 migrate_set_parameter multifd-compression qatzip。
4 - 设置 migrate_set_parameter multifd-qatzip-level comp_level。
comp_level 默认为 1,支持 1~9。
QAT 内存需求
需要为 QAT 内存管理预留系统内存,以便分配 DMA 内存。 预留量取决于迁移使用的设备数量和 multifd 通道数。
内存用量与 QAT 配置有关,计算方法见 QAT 内存驱动查询。
通道数 |
发送端内存用量 |
接收端内存用量 |
|---|---|---|
2 |
10M |
10M |
4 |
12M |
14M |
8 |
16M |
20M |
如何选择 QATzip 与 QPL
从第四代 Intel Xeon 可扩展处理器 Sapphire Rapids(SPR)开始, 支持 QAT、IAA 等多种内置加速器。 QAT 用于加速 QATzip,IAA 用于加速 QPL。
建议如下:
1 - 如果热迁移受网络带宽限制,且 QAT 硬件资源多于 IAA, 使用 QATzip 可节省大量压缩所需的主机 CPU 资源。
2 - 如果系统不支持共享虚拟内存(SVM),使用 QATzip, 因为缺少 SVM 支持时 QPL 性能不佳。
3 - 其他场景优先使用 QPL。