mirror of
https://github.com/qemu/qemu.git
synced 2025-08-09 19:15:32 +00:00
qtest/migration/rdma: Enforce RLIMIT_MEMLOCK >= 128MB requirement
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 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>
This commit is contained in:
parent
c4f88b7136
commit
7b2e4f788d
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user