xref: /openbmc/qemu/tests/qtest/migration/compression-tests.c (revision ffaf7f0376f8040ce9068d71ae9ae8722505c42e)
1932f74f3SFabiano Rosas /*
2932f74f3SFabiano Rosas  * QTest testcases for migration compression
3932f74f3SFabiano Rosas  *
4932f74f3SFabiano Rosas  * Copyright (c) 2016-2018 Red Hat, Inc. and/or its affiliates
5932f74f3SFabiano Rosas  *   based on the vhost-user-test.c that is:
6932f74f3SFabiano Rosas  *      Copyright (c) 2014 Virtual Open Systems Sarl.
7932f74f3SFabiano Rosas  *
8932f74f3SFabiano Rosas  * This work is licensed under the terms of the GNU GPL, version 2 or later.
9932f74f3SFabiano Rosas  * See the COPYING file in the top-level directory.
10932f74f3SFabiano Rosas  *
11932f74f3SFabiano Rosas  */
12932f74f3SFabiano Rosas 
13932f74f3SFabiano Rosas #include "qemu/osdep.h"
14932f74f3SFabiano Rosas #include "libqtest.h"
15932f74f3SFabiano Rosas #include "migration/framework.h"
16932f74f3SFabiano Rosas #include "migration/migration-qmp.h"
17932f74f3SFabiano Rosas #include "migration/migration-util.h"
18932f74f3SFabiano Rosas #include "qemu/module.h"
19932f74f3SFabiano Rosas 
20932f74f3SFabiano Rosas 
21932f74f3SFabiano Rosas static char *tmpfs;
22932f74f3SFabiano Rosas 
23932f74f3SFabiano Rosas #ifdef CONFIG_ZSTD
24932f74f3SFabiano Rosas static void *
migrate_hook_start_precopy_tcp_multifd_zstd(QTestState * from,QTestState * to)25932f74f3SFabiano Rosas migrate_hook_start_precopy_tcp_multifd_zstd(QTestState *from,
26932f74f3SFabiano Rosas                                             QTestState *to)
27932f74f3SFabiano Rosas {
28932f74f3SFabiano Rosas     migrate_set_parameter_int(from, "multifd-zstd-level", 2);
29932f74f3SFabiano Rosas     migrate_set_parameter_int(to, "multifd-zstd-level", 2);
30932f74f3SFabiano Rosas 
31932f74f3SFabiano Rosas     return migrate_hook_start_precopy_tcp_multifd_common(from, to, "zstd");
32932f74f3SFabiano Rosas }
33932f74f3SFabiano Rosas 
test_multifd_tcp_zstd(void)34932f74f3SFabiano Rosas static void test_multifd_tcp_zstd(void)
35932f74f3SFabiano Rosas {
36932f74f3SFabiano Rosas     MigrateCommon args = {
37932f74f3SFabiano Rosas         .listen_uri = "defer",
38932f74f3SFabiano Rosas         .start_hook = migrate_hook_start_precopy_tcp_multifd_zstd,
39932f74f3SFabiano Rosas     };
40932f74f3SFabiano Rosas     test_precopy_common(&args);
41932f74f3SFabiano Rosas }
42932f74f3SFabiano Rosas #endif /* CONFIG_ZSTD */
43932f74f3SFabiano Rosas 
44932f74f3SFabiano Rosas #ifdef CONFIG_QATZIP
45932f74f3SFabiano Rosas static void *
migrate_hook_start_precopy_tcp_multifd_qatzip(QTestState * from,QTestState * to)46932f74f3SFabiano Rosas migrate_hook_start_precopy_tcp_multifd_qatzip(QTestState *from,
47932f74f3SFabiano Rosas                                               QTestState *to)
48932f74f3SFabiano Rosas {
49932f74f3SFabiano Rosas     migrate_set_parameter_int(from, "multifd-qatzip-level", 2);
50932f74f3SFabiano Rosas     migrate_set_parameter_int(to, "multifd-qatzip-level", 2);
51932f74f3SFabiano Rosas 
52932f74f3SFabiano Rosas     return migrate_hook_start_precopy_tcp_multifd_common(from, to, "qatzip");
53932f74f3SFabiano Rosas }
54932f74f3SFabiano Rosas 
test_multifd_tcp_qatzip(void)55932f74f3SFabiano Rosas static void test_multifd_tcp_qatzip(void)
56932f74f3SFabiano Rosas {
57932f74f3SFabiano Rosas     MigrateCommon args = {
58932f74f3SFabiano Rosas         .listen_uri = "defer",
59932f74f3SFabiano Rosas         .start_hook = migrate_hook_start_precopy_tcp_multifd_qatzip,
60932f74f3SFabiano Rosas     };
61932f74f3SFabiano Rosas     test_precopy_common(&args);
62932f74f3SFabiano Rosas }
63932f74f3SFabiano Rosas #endif
64932f74f3SFabiano Rosas 
65932f74f3SFabiano Rosas #ifdef CONFIG_QPL
66932f74f3SFabiano Rosas static void *
migrate_hook_start_precopy_tcp_multifd_qpl(QTestState * from,QTestState * to)67932f74f3SFabiano Rosas migrate_hook_start_precopy_tcp_multifd_qpl(QTestState *from,
68932f74f3SFabiano Rosas                                            QTestState *to)
69932f74f3SFabiano Rosas {
70932f74f3SFabiano Rosas     return migrate_hook_start_precopy_tcp_multifd_common(from, to, "qpl");
71932f74f3SFabiano Rosas }
72932f74f3SFabiano Rosas 
test_multifd_tcp_qpl(void)73932f74f3SFabiano Rosas static void test_multifd_tcp_qpl(void)
74932f74f3SFabiano Rosas {
75932f74f3SFabiano Rosas     MigrateCommon args = {
76932f74f3SFabiano Rosas         .listen_uri = "defer",
77932f74f3SFabiano Rosas         .start_hook = migrate_hook_start_precopy_tcp_multifd_qpl,
78932f74f3SFabiano Rosas     };
79932f74f3SFabiano Rosas     test_precopy_common(&args);
80932f74f3SFabiano Rosas }
81932f74f3SFabiano Rosas #endif /* CONFIG_QPL */
82932f74f3SFabiano Rosas 
83932f74f3SFabiano Rosas #ifdef CONFIG_UADK
84932f74f3SFabiano Rosas static void *
migrate_hook_start_precopy_tcp_multifd_uadk(QTestState * from,QTestState * to)85932f74f3SFabiano Rosas migrate_hook_start_precopy_tcp_multifd_uadk(QTestState *from,
86932f74f3SFabiano Rosas                                             QTestState *to)
87932f74f3SFabiano Rosas {
88932f74f3SFabiano Rosas     return migrate_hook_start_precopy_tcp_multifd_common(from, to, "uadk");
89932f74f3SFabiano Rosas }
90932f74f3SFabiano Rosas 
test_multifd_tcp_uadk(void)91932f74f3SFabiano Rosas static void test_multifd_tcp_uadk(void)
92932f74f3SFabiano Rosas {
93932f74f3SFabiano Rosas     MigrateCommon args = {
94932f74f3SFabiano Rosas         .listen_uri = "defer",
95932f74f3SFabiano Rosas         .start_hook = migrate_hook_start_precopy_tcp_multifd_uadk,
96932f74f3SFabiano Rosas     };
97932f74f3SFabiano Rosas     test_precopy_common(&args);
98932f74f3SFabiano Rosas }
99932f74f3SFabiano Rosas #endif /* CONFIG_UADK */
100932f74f3SFabiano Rosas 
101932f74f3SFabiano Rosas static void *
migrate_hook_start_xbzrle(QTestState * from,QTestState * to)102932f74f3SFabiano Rosas migrate_hook_start_xbzrle(QTestState *from,
103932f74f3SFabiano Rosas                           QTestState *to)
104932f74f3SFabiano Rosas {
105932f74f3SFabiano Rosas     migrate_set_parameter_int(from, "xbzrle-cache-size", 33554432);
106932f74f3SFabiano Rosas 
107932f74f3SFabiano Rosas     migrate_set_capability(from, "xbzrle", true);
108932f74f3SFabiano Rosas     migrate_set_capability(to, "xbzrle", true);
109932f74f3SFabiano Rosas 
110932f74f3SFabiano Rosas     return NULL;
111932f74f3SFabiano Rosas }
112932f74f3SFabiano Rosas 
test_precopy_unix_xbzrle(void)113932f74f3SFabiano Rosas static void test_precopy_unix_xbzrle(void)
114932f74f3SFabiano Rosas {
115932f74f3SFabiano Rosas     g_autofree char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
116932f74f3SFabiano Rosas     MigrateCommon args = {
117932f74f3SFabiano Rosas         .connect_uri = uri,
118932f74f3SFabiano Rosas         .listen_uri = uri,
119932f74f3SFabiano Rosas         .start_hook = migrate_hook_start_xbzrle,
120932f74f3SFabiano Rosas         .iterations = 2,
121932f74f3SFabiano Rosas         /*
122932f74f3SFabiano Rosas          * XBZRLE needs pages to be modified when doing the 2nd+ round
123932f74f3SFabiano Rosas          * iteration to have real data pushed to the stream.
124932f74f3SFabiano Rosas          */
125932f74f3SFabiano Rosas         .live = true,
126932f74f3SFabiano Rosas     };
127932f74f3SFabiano Rosas 
128932f74f3SFabiano Rosas     test_precopy_common(&args);
129932f74f3SFabiano Rosas }
130932f74f3SFabiano Rosas 
131932f74f3SFabiano Rosas static void *
migrate_hook_start_precopy_tcp_multifd_zlib(QTestState * from,QTestState * to)132932f74f3SFabiano Rosas migrate_hook_start_precopy_tcp_multifd_zlib(QTestState *from,
133932f74f3SFabiano Rosas                                             QTestState *to)
134932f74f3SFabiano Rosas {
135932f74f3SFabiano Rosas     /*
136932f74f3SFabiano Rosas      * Overloading this test to also check that set_parameter does not error.
137932f74f3SFabiano Rosas      * This is also done in the tests for the other compression methods.
138932f74f3SFabiano Rosas      */
139932f74f3SFabiano Rosas     migrate_set_parameter_int(from, "multifd-zlib-level", 2);
140932f74f3SFabiano Rosas     migrate_set_parameter_int(to, "multifd-zlib-level", 2);
141932f74f3SFabiano Rosas 
142932f74f3SFabiano Rosas     return migrate_hook_start_precopy_tcp_multifd_common(from, to, "zlib");
143932f74f3SFabiano Rosas }
144932f74f3SFabiano Rosas 
test_multifd_tcp_zlib(void)145932f74f3SFabiano Rosas static void test_multifd_tcp_zlib(void)
146932f74f3SFabiano Rosas {
147932f74f3SFabiano Rosas     MigrateCommon args = {
148932f74f3SFabiano Rosas         .listen_uri = "defer",
149932f74f3SFabiano Rosas         .start_hook = migrate_hook_start_precopy_tcp_multifd_zlib,
150932f74f3SFabiano Rosas     };
151932f74f3SFabiano Rosas     test_precopy_common(&args);
152932f74f3SFabiano Rosas }
153932f74f3SFabiano Rosas 
migration_test_add_compression_smoke(MigrationTestEnv * env)154*43ab3fb3SFabiano Rosas static void migration_test_add_compression_smoke(MigrationTestEnv *env)
155*43ab3fb3SFabiano Rosas {
156*43ab3fb3SFabiano Rosas     migration_test_add("/migration/multifd/tcp/plain/zlib",
157*43ab3fb3SFabiano Rosas                        test_multifd_tcp_zlib);
158*43ab3fb3SFabiano Rosas }
159*43ab3fb3SFabiano Rosas 
migration_test_add_compression(MigrationTestEnv * env)160932f74f3SFabiano Rosas void migration_test_add_compression(MigrationTestEnv *env)
161932f74f3SFabiano Rosas {
162932f74f3SFabiano Rosas     tmpfs = env->tmpfs;
163932f74f3SFabiano Rosas 
164*43ab3fb3SFabiano Rosas     migration_test_add_compression_smoke(env);
165*43ab3fb3SFabiano Rosas 
166bc2a1f1aSFabiano Rosas     if (!env->full_set) {
167bc2a1f1aSFabiano Rosas         return;
168bc2a1f1aSFabiano Rosas     }
169bc2a1f1aSFabiano Rosas 
170932f74f3SFabiano Rosas #ifdef CONFIG_ZSTD
171932f74f3SFabiano Rosas     migration_test_add("/migration/multifd/tcp/plain/zstd",
172932f74f3SFabiano Rosas                        test_multifd_tcp_zstd);
173932f74f3SFabiano Rosas #endif
174932f74f3SFabiano Rosas 
175932f74f3SFabiano Rosas #ifdef CONFIG_QATZIP
176932f74f3SFabiano Rosas     migration_test_add("/migration/multifd/tcp/plain/qatzip",
177932f74f3SFabiano Rosas                        test_multifd_tcp_qatzip);
178932f74f3SFabiano Rosas #endif
179932f74f3SFabiano Rosas 
180932f74f3SFabiano Rosas #ifdef CONFIG_QPL
181932f74f3SFabiano Rosas     migration_test_add("/migration/multifd/tcp/plain/qpl",
182932f74f3SFabiano Rosas                        test_multifd_tcp_qpl);
183932f74f3SFabiano Rosas #endif
184932f74f3SFabiano Rosas 
185932f74f3SFabiano Rosas #ifdef CONFIG_UADK
186932f74f3SFabiano Rosas     migration_test_add("/migration/multifd/tcp/plain/uadk",
187932f74f3SFabiano Rosas                        test_multifd_tcp_uadk);
188932f74f3SFabiano Rosas #endif
189932f74f3SFabiano Rosas 
190932f74f3SFabiano Rosas     if (g_test_slow()) {
191932f74f3SFabiano Rosas         migration_test_add("/migration/precopy/unix/xbzrle",
192932f74f3SFabiano Rosas                            test_precopy_unix_xbzrle);
193932f74f3SFabiano Rosas     }
194932f74f3SFabiano Rosas }
195