Merge tag 'pull-loongarch-20241016' of https://gitlab.com/gaosong/qemu into staging
[qemu/armbru.git] / docs / devel / migration / uadk-compression.rst
blob64cadebd219332c85230801b25c7d4d2fbb0bd9e
1 =========================================================
2 User Space Accelerator Development Kit (UADK) Compression
3 =========================================================
4 UADK is a general-purpose user space accelerator framework that uses shared
5 virtual addressing (SVA) to provide a unified programming interface for
6 hardware acceleration of cryptographic and compression algorithms.
8 UADK includes Unified/User-space-access-intended Accelerator Framework (UACCE),
9 which enables hardware accelerators from different vendors that support SVA to
10 adapt to UADK.
12 Currently, HiSilicon Kunpeng hardware accelerators have been registered with
13 UACCE. Through the UADK framework, users can run cryptographic and compression
14 algorithms using hardware accelerators instead of CPUs, freeing up CPU
15 computing power and improving computing performance.
17 https://github.com/Linaro/uadk/tree/master/docs
19 UADK Framework
20 ==============
21 UADK consists of UACCE, vendors' drivers, and an algorithm layer. UADK requires
22 the hardware accelerator to support SVA, and the operating system to support
23 IOMMU and SVA. Hardware accelerators from different vendors are registered as
24 different character devices with UACCE by using kernel-mode drivers of the
25 vendors. A user can access the hardware accelerators by performing user-mode
26 operations on the character devices.
30           +----------------------------------+
31           |                apps              |
32           +----+------------------------+----+
33                |                        |
34                |                        |
35        +-------+--------+       +-------+-------+
36        |   scheduler    |       | alg libraries |
37        +-------+--------+       +-------+-------+
38                |                         |
39                |                         |
40                |                         |
41                |                +--------+------+
42                |                | vendor drivers|
43                |                +-+-------------+
44                |                  |
45                |                  |
46             +--+------------------+--+
47             |         libwd          |
48     User    +----+-------------+-----+
49     --------------------------------------------------
50     Kernel    +--+-----+   +------+
51               | uacce  |   | smmu |
52               +---+----+   +------+
53                   |
54               +---+------------------+
55               | vendor kernel driver |
56               +----------------------+
57     --------------------------------------------------
58              +----------------------+
59              |   HW Accelerators    |
60              +----------------------+
62 UADK Installation
63 -----------------
64 Build UADK
65 ^^^^^^^^^^
67 .. code-block:: shell
69     git clone https://github.com/Linaro/uadk.git
70     cd uadk
71     mkdir build
72     ./autogen.sh
73     ./configure --prefix=$PWD/build
74     make
75     make install
77 Without --prefix, UADK will be installed to /usr/local/lib by default.
78 If get error:"cannot find -lnuma", please install the libnuma-dev
80 Run pkg-config libwd to ensure env is setup correctly
81 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
83 * export PKG_CONFIG_PATH=$PWD/build/lib/pkgconfig
84 * pkg-config libwd --cflags --libs
85   -I/usr/local/include -L/usr/local/lib -lwd
87 * export PKG_CONFIG_PATH is required on demand.
88   Not required if UADK is installed to /usr/local/lib
90 UADK Host Kernel Requirements
91 -----------------------------
92 User needs to make sure that ``UACCE`` is already supported in Linux kernel.
93 The kernel version should be at least v5.9 with SVA (Shared Virtual
94 Addressing) enabled.
96 Kernel Configuration
97 ^^^^^^^^^^^^^^^^^^^^
99 ``UACCE`` could be built as module or built-in.
101 Here's an example to enable UACCE with hardware accelerator in HiSilicon
102 Kunpeng platform.
104 *    CONFIG_IOMMU_SVA_LIB=y
105 *    CONFIG_ARM_SMMU=y
106 *    CONFIG_ARM_SMMU_V3=y
107 *    CONFIG_ARM_SMMU_V3_SVA=y
108 *    CONFIG_PCI_PASID=y
109 *    CONFIG_UACCE=y
110 *    CONFIG_CRYPTO_DEV_HISI_QM=y
111 *    CONFIG_CRYPTO_DEV_HISI_ZIP=y
113 Make sure all these above kernel configurations are selected.
115 Accelerator dev node permissions
116 --------------------------------
117 Hardware accelerators (eg: HiSilicon Kunpeng Zip accelerator) gets registered to
118 UADK and char devices are created in dev directory. In order to access resources
119 on hardware accelerator devices, write permission should be provided to user.
121 .. code-block:: shell
123     $ sudo chmod 777 /dev/hisi_zip-*
125 How To Use UADK Compression In QEMU Migration
126 ---------------------------------------------
127 * Make sure UADK is installed as above
128 * Build ``QEMU`` with ``--enable-uadk`` parameter
130   E.g. configure --target-list=aarch64-softmmu --enable-kvm ``--enable-uadk``
132 * Enable ``UADK`` compression during migration
134   Set ``migrate_set_parameter multifd-compression uadk``
136 Since UADK uses Shared Virtual Addressing(SVA) and device access virtual memory
137 directly it is possible that SMMUv3 may encounter page faults while walking the
138 IO page tables. This may impact the performance. In order to mitigate this,
139 please make sure to specify ``-mem-prealloc`` parameter to the destination VM
140 boot parameters.
142 Though both UADK and ZLIB are based on the deflate compression algorithm, UADK
143 is not fully compatible with ZLIB. Hence, please make sure to use ``uadk`` on
144 both source and destination during migration.