- kvm-migration-multifd-move-macros-to-multifd-header.patch [RHEL-59697] - kvm-migration-refactor-channel-discovery-mechanism.patch [RHEL-59697] - kvm-migration-Add-save_postcopy_prepare-savevm-handler.patch [RHEL-59697] - kvm-migration-ram-Implement-save_postcopy_prepare.patch [RHEL-59697] - kvm-tests-qtest-migration-consolidate-set-capabilities.patch [RHEL-59697] - kvm-migration-write-zero-pages-when-postcopy-enabled.patch [RHEL-59697] - kvm-migration-enable-multifd-and-postcopy-together.patch [RHEL-59697] - kvm-migration-Add-qtest-for-migration-over-RDMA.patch [RHEL-59697] - kvm-qtest-migration-rdma-Enforce-RLIMIT_MEMLOCK-128MB-re.patch [RHEL-59697] - kvm-qtest-migration-rdma-Add-test-for-rdma-migration-wit.patch [RHEL-59697] - kvm-tests-qtest-migration-add-postcopy-tests-with-multif.patch [RHEL-59697] - kvm-file-posix-Fix-aio-threads-performance-regression-af.patch [RHEL-96854] - kvm-block-remove-outdated-comments-about-AioContext-lock.patch [RHEL-88561] - kvm-block-move-drain-outside-of-read-locked-bdrv_reopen_.patch [RHEL-88561] - kvm-block-snapshot-move-drain-outside-of-read-locked-bdr.patch [RHEL-88561] - kvm-block-move-drain-outside-of-read-locked-bdrv_inactiv.patch [RHEL-88561] - kvm-block-mark-bdrv_parent_change_aio_context-GRAPH_RDLO.patch [RHEL-88561] - kvm-block-mark-change_aio_ctx-callback-and-instances-as-.patch [RHEL-88561] - kvm-block-mark-bdrv_child_change_aio_context-GRAPH_RDLOC.patch [RHEL-88561] - kvm-block-move-drain-outside-of-bdrv_change_aio_context-.patch [RHEL-88561] - kvm-block-move-drain-outside-of-bdrv_try_change_aio_cont.patch [RHEL-88561] - kvm-block-move-drain-outside-of-bdrv_attach_child_common.patch [RHEL-88561] - kvm-block-move-drain-outside-of-bdrv_set_backing_hd_drai.patch [RHEL-88561] - kvm-block-move-drain-outside-of-bdrv_root_attach_child.patch [RHEL-88561] - kvm-block-move-drain-outside-of-bdrv_attach_child.patch [RHEL-88561] - kvm-block-move-drain-outside-of-quorum_add_child.patch [RHEL-88561] - kvm-block-move-drain-outside-of-bdrv_root_unref_child.patch [RHEL-88561] - kvm-block-move-drain-outside-of-quorum_del_child.patch [RHEL-88561] - kvm-blockdev-drain-while-unlocked-in-internal_snapshot_a.patch [RHEL-88561] - kvm-blockdev-drain-while-unlocked-in-external_snapshot_a.patch [RHEL-88561] - kvm-block-mark-bdrv_drained_begin-and-friends-as-GRAPH_U.patch [RHEL-88561] - kvm-iotests-graph-changes-while-io-remove-image-file-aft.patch [RHEL-88561] - kvm-iotests-graph-changes-while-io-add-test-case-with-re.patch [RHEL-88561] - Resolves: RHEL-59697 (Allow multifd+postcopy features being enabled together, but only use multifd during precopy ) - Resolves: RHEL-96854 (Performance Degradation(aio=threads) between Upstream Commit b75c5f9 and 984a32f) - Resolves: RHEL-88561 (qemu graph deadlock during job-dismiss)
95 lines
3.2 KiB
Diff
95 lines
3.2 KiB
Diff
From f65658024595c8fa58c5f9a6a8892d230e68e4c7 Mon Sep 17 00:00:00 2001
|
|
From: Li Zhijian <lizhijian@fujitsu.com>
|
|
Date: Fri, 9 May 2025 09:42:10 +0800
|
|
Subject: [PATCH 09/33] qtest/migration/rdma: Enforce RLIMIT_MEMLOCK >= 128MB
|
|
requirement
|
|
|
|
RH-Author: Prasad Pandit <None>
|
|
RH-MergeRequest: 390: migration: allow to enable multifd+postcopy features together, but use multifd during precopy only
|
|
RH-Jira: RHEL-59697
|
|
RH-Acked-by: Juraj Marcin <None>
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Commit: [9/11] bc8b4e4e55e119d1ba1e5567dfe69fe675a5f52e (pjp/cs-qemu-kvm)
|
|
|
|
Ensure successful migration over RDMA by verifying that RLIMIT_MEMLOCK is
|
|
set to at least 128MB. This allocation is necessary due to the requirement
|
|
to pin significant portions of guest memory, typically exceeding 100MB
|
|
in this test, while the remainder is transmitted as compressed zero pages.
|
|
|
|
Otherwise, it will fail with:
|
|
stderr:
|
|
qemu-system-x86_64: cannot get rkey
|
|
qemu-system-x86_64: error while loading state section id 2(ram)
|
|
qemu-system-x86_64: load of migration failed: Operation not permitted
|
|
qemu-system-x86_64: rdma migration: recv polling control error!
|
|
qemu-system-x86_64: RDMA is in an error state waiting migration to abort!
|
|
qemu-system-x86_64: failed to save SaveStateEntry with id(name): 2(ram): -1
|
|
qemu-system-x86_64: Channel error: Operation not permitted
|
|
|
|
Jira: https://issues.redhat.com/browse/RHEL-59697
|
|
Reported-by: Peter Xu <peterx@redhat.com>
|
|
Signed-off-by: Li Zhijian <lizhijian@fujitsu.com>
|
|
Link: https://lore.kernel.org/r/20250509014211.1272640-1-lizhijian@fujitsu.com
|
|
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
(cherry picked from commit 7b2e4f788d60a8ec25efbf1e6bb6552ee0cef17c)
|
|
Signed-off-by: Prasad Pandit <ppandit@redhat.com>
|
|
---
|
|
tests/qtest/migration/precopy-tests.c | 34 +++++++++++++++++++++++++++
|
|
1 file changed, 34 insertions(+)
|
|
|
|
diff --git a/tests/qtest/migration/precopy-tests.c b/tests/qtest/migration/precopy-tests.c
|
|
index 87b0a7e8ef..5be1cd5742 100644
|
|
--- a/tests/qtest/migration/precopy-tests.c
|
|
+++ b/tests/qtest/migration/precopy-tests.c
|
|
@@ -101,6 +101,35 @@ static void test_precopy_unix_dirty_ring(void)
|
|
|
|
#ifdef CONFIG_RDMA
|
|
|
|
+#include <sys/resource.h>
|
|
+
|
|
+/*
|
|
+ * During migration over RDMA, it will try to pin portions of guest memory,
|
|
+ * typically exceeding 100MB in this test, while the remainder will be
|
|
+ * transmitted as compressed zero pages.
|
|
+ *
|
|
+ * REQUIRED_MEMLOCK_SZ indicates the minimal mlock size in the current context.
|
|
+ */
|
|
+#define REQUIRED_MEMLOCK_SZ (128 << 20) /* 128MB */
|
|
+
|
|
+/* check 'ulimit -l' */
|
|
+static bool mlock_check(void)
|
|
+{
|
|
+ uid_t uid;
|
|
+ struct rlimit rlim;
|
|
+
|
|
+ uid = getuid();
|
|
+ if (uid == 0) {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ if (getrlimit(RLIMIT_MEMLOCK, &rlim) != 0) {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ return rlim.rlim_cur >= REQUIRED_MEMLOCK_SZ;
|
|
+}
|
|
+
|
|
#define RDMA_MIGRATION_HELPER "scripts/rdma-migration-helper.sh"
|
|
static int new_rdma_link(char *buffer)
|
|
{
|
|
@@ -136,6 +165,11 @@ static void test_precopy_rdma_plain(void)
|
|
{
|
|
char buffer[128] = {};
|
|
|
|
+ if (!mlock_check()) {
|
|
+ g_test_skip("'ulimit -l' is too small, require >=128M");
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (new_rdma_link(buffer)) {
|
|
g_test_skip("No rdma link available\n"
|
|
"# To enable the test:\n"
|
|
--
|
|
2.39.3
|
|
|