QATzip Compression

In scenarios with limited network bandwidth, the QATzip solution can help users save a lot of host CPU resources by accelerating compression and decompression through the Intel QuickAssist Technology(QAT) hardware.

The following test was conducted using 8 multifd channels and 10Gbps network bandwidth. The results show that, compared to zstd, QATzip significantly saves CPU resources on the sender and reduces migration time. Compared to the uncompressed solution, QATzip greatly improves the dirty page processing capability, indicated by the Pages per Second metric, and also reduces the total migration time.

VM Configuration: 16 vCPU and 64G memory
VM Workload: all vCPUs are idle and 54G memory is filled with Silesia data.
QAT Devices: 4
|-----------|--------|---------|----------|----------|------|------|
|8 Channels |Total   |down     |throughput|pages per | send | recv |
|           |time(ms)|time(ms) |(mbps)    |second    | cpu %| cpu% |
|-----------|--------|---------|----------|----------|------|------|
|qatzip     |   16630|       28|     10467|   2940235|   160|   360|
|-----------|--------|---------|----------|----------|------|------|
|zstd       |   20165|       24|      8579|   2391465|   810|   340|
|-----------|--------|---------|----------|----------|------|------|
|none       |   46063|       40|     10848|    330240|    45|    85|
|-----------|--------|---------|----------|----------|------|------|

QATzip Compression Framework

QATzip is a user space library which builds on top of the Intel QuickAssist Technology to provide extended accelerated compression and decompression services.

For more QATzip introduction, please refer to QATzip Introduction

+----------------+
| MultiFd Thread |
+-------+--------+
        |
        | compress/decompress
+-------+--------+
| QATzip library |
+-------+--------+
        |
+-------+--------+
|  QAT library   |
+-------+--------+
        |         user space
--------+---------------------
        |         kernel space
 +------+-------+
 |  QAT  Driver |
 +------+-------+
        |
 +------+-------+
 | QAT Devices  |
 +--------------+

QATzip Installation

The QATzip installation package has been integrated into some Linux distributions and can be installed directly. For example, the Ubuntu Server 24.04 LTS system can be installed using below command

#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

If your system does not support the QATzip installation package, you can use the source code to build and install, please refer to QATzip source code installation

QAT Hardware Deployment

QAT supports physical functions(PFs) and virtual functions(VFs) for deployment, and users can configure QAT resources for migration according to actual needs. For more details about QAT deployment, please refer to Intel QuickAssist Technology Documentation

For more QAT hardware introduction, please refer to intel-quick-assist-technology-overview

How To Use QATzip Compression

1 - Install QATzip library

2 - Build QEMU with --enable-qatzip parameter

E.g. configure –target-list=x86_64-softmmu –enable-kvm --enable-qatzip

3 - Set migrate_set_parameter multifd-compression qatzip

4 - Set migrate_set_parameter multifd-qatzip-level comp_level, the default comp_level value is 1, and it supports levels from 1 to 9

QAT Memory Requirements

The user needs to reserve system memory for the QAT memory management to allocate DMA memory. The size of the reserved system memory depends on the number of devices used for migration and the number of multifd channels.

Because memory usage depends on QAT configuration, please refer to QAT Memory Driver Queries for memory usage calculation.

An example of a PF used for migration

Number of channels

Sender memory usage

Receiver memory usage

2

10M

10M

4

12M

14M

8

16M

20M

How To Choose Between QATzip and QPL

Starting from 4th Gen Intel Xeon Scalable processors, codenamed Sapphire Rapids processor(SPR), multiple built-in accelerators are supported including QAT and IAA. The former can accelerate QATzip and the latter is used to accelerate QPL.

Here are some suggestions:

1 - If the live migration scenario is limited by network bandwidth and QAT hardware resources exceed IAA, use the QATzip method, which can save a lot of host CPU resources for compression.

2 - If the system cannot support shared virtual memory (SVM) technology, use the QATzip method because QPL performance is not good without SVM support.

3 - For other scenarios, use the QPL method first.