From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: [Qemu-devel] [PULL 42/47] tests: use memfd in vhost-user-test
Date: Mon, 5 Feb 2018 20:28:56 +0100 [thread overview]
Message-ID: <1517858941-5538-43-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1517858941-5538-1-git-send-email-pbonzini@redhat.com>
From: Marc-André Lureau <marcandre.lureau@redhat.com>
This will exercise the memfd memory backend and should generally be
better for testing than memory-backend-file (thanks to anonymous files
and sealing).
If memfd is available, it is preferred.
However, in order to check that file & memfd backends both work
correctly, the read-guest-mem test is checked explicitly for each.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20180201132757.23063-8-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
tests/vhost-user-test.c | 90 +++++++++++++++++++++++++++++++++++--------------
1 file changed, 64 insertions(+), 26 deletions(-)
diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
index a22075f..95eb449 100644
--- a/tests/vhost-user-test.c
+++ b/tests/vhost-user-test.c
@@ -17,6 +17,7 @@
#include "qemu/range.h"
#include "qemu/sockets.h"
#include "chardev/char-fe.h"
+#include "qemu/memfd.h"
#include "sysemu/sysemu.h"
#include "libqos/libqos.h"
#include "libqos/pci-pc.h"
@@ -39,23 +40,14 @@
#define HAVE_MONOTONIC_TIME
#endif
-#define QEMU_CMD_MEM " -m %d -object memory-backend-file,id=mem,size=%dM,"\
+#define QEMU_CMD_MEM " -m %d -object memory-backend-file,id=mem,size=%dM," \
"mem-path=%s,share=on -numa node,memdev=mem"
+#define QEMU_CMD_MEMFD " -m %d -object memory-backend-memfd,id=mem,size=%dM," \
+ " -numa node,memdev=mem"
#define QEMU_CMD_CHR " -chardev socket,id=%s,path=%s%s"
#define QEMU_CMD_NETDEV " -netdev vhost-user,id=net0,chardev=%s,vhostforce"
#define QEMU_CMD_NET " -device virtio-net-pci,netdev=net0"
-#define QEMU_CMD QEMU_CMD_MEM QEMU_CMD_CHR \
- QEMU_CMD_NETDEV QEMU_CMD_NET
-
-#define GET_QEMU_CMD(s) \
- g_strdup_printf(QEMU_CMD, 512, 512, (root), (s)->chr_name, \
- (s)->socket_path, "", (s)->chr_name)
-
-#define GET_QEMU_CMDE(s, mem, chr_opts, extra, ...) \
- g_strdup_printf(QEMU_CMD extra, (mem), (mem), (root), (s)->chr_name, \
- (s)->socket_path, (chr_opts), (s)->chr_name, ##__VA_ARGS__)
-
#define HUGETLBFS_MAGIC 0x958458f6
/*********** FROM hw/virtio/vhost-user.c *************************************/
@@ -174,6 +166,33 @@ static void test_server_listen(TestServer *server);
static const char *tmpfs;
static const char *root;
+enum test_memfd {
+ TEST_MEMFD_AUTO,
+ TEST_MEMFD_YES,
+ TEST_MEMFD_NO,
+};
+
+static char *get_qemu_cmd(TestServer *s,
+ int mem, enum test_memfd memfd, const char *mem_path,
+ const char *chr_opts, const char *extra)
+{
+ if (memfd == TEST_MEMFD_AUTO && qemu_memfd_check()) {
+ memfd = TEST_MEMFD_YES;
+ }
+
+ if (memfd == TEST_MEMFD_YES) {
+ return g_strdup_printf(QEMU_CMD_MEMFD QEMU_CMD_CHR
+ QEMU_CMD_NETDEV QEMU_CMD_NET "%s", mem, mem,
+ s->chr_name, s->socket_path,
+ chr_opts, s->chr_name, extra);
+ } else {
+ return g_strdup_printf(QEMU_CMD_MEM QEMU_CMD_CHR
+ QEMU_CMD_NETDEV QEMU_CMD_NET "%s", mem, mem,
+ mem_path, s->chr_name, s->socket_path,
+ chr_opts, s->chr_name, extra);
+ }
+}
+
static void init_virtio_dev(TestServer *s, uint32_t features_mask)
{
uint32_t features;
@@ -639,8 +658,9 @@ GSourceFuncs test_migrate_source_funcs = {
.check = test_migrate_source_check,
};
-static void test_read_guest_mem(void)
+static void test_read_guest_mem(const void *arg)
{
+ enum test_memfd memfd = GPOINTER_TO_INT(arg);
TestServer *server = NULL;
char *qemu_cmd = NULL;
QTestState *s = NULL;
@@ -648,7 +668,7 @@ static void test_read_guest_mem(void)
server = test_server_new("test");
test_server_listen(server);
- qemu_cmd = GET_QEMU_CMD(server);
+ qemu_cmd = get_qemu_cmd(server, 512, memfd, root, "", "");
s = qtest_start(qemu_cmd);
g_free(qemu_cmd);
@@ -670,7 +690,7 @@ static void test_migrate(void)
char *uri = g_strdup_printf("%s%s", "unix:", dest->mig_path);
QTestState *global = global_qtest, *from, *to;
GSource *source;
- gchar *cmd;
+ gchar *cmd, *tmp;
QDict *rsp;
guint8 *log;
guint64 size;
@@ -678,7 +698,7 @@ static void test_migrate(void)
test_server_listen(s);
test_server_listen(dest);
- cmd = GET_QEMU_CMDE(s, 2, "", "");
+ cmd = get_qemu_cmd(s, 2, TEST_MEMFD_AUTO, root, "", "");
from = qtest_start(cmd);
g_free(cmd);
@@ -687,7 +707,9 @@ static void test_migrate(void)
size = get_log_size(s);
g_assert_cmpint(size, ==, (2 * 1024 * 1024) / (VHOST_LOG_PAGE * 8));
- cmd = GET_QEMU_CMDE(dest, 2, "", " -incoming %s", uri);
+ tmp = g_strdup_printf(" -incoming %s", uri);
+ cmd = get_qemu_cmd(dest, 2, TEST_MEMFD_AUTO, root, "", tmp);
+ g_free(tmp);
to = qtest_init(cmd);
g_free(cmd);
@@ -800,7 +822,7 @@ static void test_reconnect_subprocess(void)
char *cmd;
g_thread_new("connect", connect_thread, s);
- cmd = GET_QEMU_CMDE(s, 2, ",server", "");
+ cmd = get_qemu_cmd(s, 2, TEST_MEMFD_AUTO, root, ",server", "");
qtest_start(cmd);
g_free(cmd);
@@ -838,7 +860,7 @@ static void test_connect_fail_subprocess(void)
s->test_fail = true;
g_thread_new("connect", connect_thread, s);
- cmd = GET_QEMU_CMDE(s, 2, ",server", "");
+ cmd = get_qemu_cmd(s, 2, TEST_MEMFD_AUTO, root, ",server", "");
qtest_start(cmd);
g_free(cmd);
@@ -868,7 +890,7 @@ static void test_flags_mismatch_subprocess(void)
s->test_flags = TEST_FLAGS_DISCONNECT;
g_thread_new("connect", connect_thread, s);
- cmd = GET_QEMU_CMDE(s, 2, ",server", "");
+ cmd = get_qemu_cmd(s, 2, TEST_MEMFD_AUTO, root, ",server", "");
qtest_start(cmd);
g_free(cmd);
@@ -903,11 +925,21 @@ static void test_multiqueue(void)
s->queues = 2;
test_server_listen(s);
- cmd = g_strdup_printf(QEMU_CMD_MEM QEMU_CMD_CHR QEMU_CMD_NETDEV ",queues=%d "
- "-device virtio-net-pci,netdev=net0,mq=on,vectors=%d",
- 512, 512, root, s->chr_name,
- s->socket_path, "", s->chr_name,
- s->queues, s->queues * 2 + 2);
+ if (qemu_memfd_check()) {
+ cmd = g_strdup_printf(
+ QEMU_CMD_MEMFD QEMU_CMD_CHR QEMU_CMD_NETDEV ",queues=%d "
+ "-device virtio-net-pci,netdev=net0,mq=on,vectors=%d",
+ 512, 512, s->chr_name,
+ s->socket_path, "", s->chr_name,
+ s->queues, s->queues * 2 + 2);
+ } else {
+ cmd = g_strdup_printf(
+ QEMU_CMD_MEM QEMU_CMD_CHR QEMU_CMD_NETDEV ",queues=%d "
+ "-device virtio-net-pci,netdev=net0,mq=on,vectors=%d",
+ 512, 512, root, s->chr_name,
+ s->socket_path, "", s->chr_name,
+ s->queues, s->queues * 2 + 2);
+ }
qtest_start(cmd);
g_free(cmd);
@@ -953,7 +985,13 @@ int main(int argc, char **argv)
/* run the main loop thread so the chardev may operate */
thread = g_thread_new(NULL, thread_function, loop);
- qtest_add_func("/vhost-user/read-guest-mem", test_read_guest_mem);
+ if (qemu_memfd_check()) {
+ qtest_add_data_func("/vhost-user/read-guest-mem/memfd",
+ GINT_TO_POINTER(TEST_MEMFD_YES),
+ test_read_guest_mem);
+ }
+ qtest_add_data_func("/vhost-user/read-guest-mem/memfile",
+ GINT_TO_POINTER(TEST_MEMFD_NO), test_read_guest_mem);
qtest_add_func("/vhost-user/migrate", test_migrate);
qtest_add_func("/vhost-user/multiqueue", test_multiqueue);
--
1.8.3.1
next prev parent reply other threads:[~2018-02-05 19:29 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-05 19:28 [Qemu-devel] [PULL 00/47] Misc patches for 2018-02-05 Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 01/47] memory: update comments and fix some typos Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 02/47] qdev: rename typedef qdev_resetfn() -> DeviceReset() Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 03/47] qdev: add helpers to be more explicit when using abstract QOM parent functions Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 04/47] qdev: use device_class_set_parent_realize/unrealize/reset() Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 05/47] kvm: Add kvm_set_user_memory tracepoint Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 06/47] qemu: improve hugepage allocation failure message Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 07/47] memory: set ioeventfd_update_pending after address_space_update_ioeventfds Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 08/47] scsi-generic: Simplify error handling code Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 09/47] chardev: fix incorrect unref of source Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 10/47] readline: don't free completions in readline_free() Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 11/47] scripts/qemu-gdb/timers.py: define encoding in header comment Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 12/47] memory-internal.h: Remove obsolete claim that header is obsolete Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 13/47] i2c: Add a CONFIG_I2C master switch to the configuration files Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 14/47] Add missing hvdos public domain attribution: Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 15/47] hvf: ept_emulation_fault() needs NetApp BSD attribution Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 16/47] Drop remaining bits of ia64 host support Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 17/47] sockets: fix parsing of ipv4/ipv6 opts in parse_socket_addr Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 18/47] exynos4210: workaround UBSAN compilation error Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 19/47] build-sys: add --enable-sanitizers Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 20/47] ucontext: annotate coroutine stack for ASAN Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 21/47] vhost: add traces for memory listeners Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 22/47] arm: postpone device listener unregister Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 23/47] vfio: listener unregister before unset container Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 24/47] memory: do explicit cleanup when remove listeners Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 25/47] chardev/char-socket: add POLLHUP handler Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 26/47] ivshmem: Don't update non-existent MSI routes Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 27/47] ivshmem: Always remove irqfd notifiers Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 28/47] ivshmem: Improve MSI irqfd error handling Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 29/47] ivshmem: Disable irqfd on device reset Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 30/47] cpus: hax: register/unregister thread with RCU, exit loop on unplug Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 31/47] cpus: kvm: unregister thread with RCU Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 32/47] cpus: dummy: unregister thread with RCU, exit loop on unplug Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 33/47] cpus: tcg: unregister thread with RCU, fix exiting of " Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 34/47] cpus: hvf: unregister thread with RCU Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 35/47] cpus: join thread when removing a vCPU Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 36/47] memfd: add error argument, instead of perror() Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 37/47] memfd: add hugetlb support Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 38/47] memfd: add hugetlbsize argument Paolo Bonzini
2018-04-27 12:42 ` Peter Maydell
2018-02-05 19:28 ` [Qemu-devel] [PULL 39/47] Add memfd based hostmem Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 40/47] tests: keep compiling failing vhost-user tests Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 41/47] vhost-user-test: make read-guest-mem setup its own qemu Paolo Bonzini
2018-02-05 19:28 ` Paolo Bonzini [this message]
2018-02-05 19:28 ` [Qemu-devel] [PULL 43/47] tests/test-filter-redirector: move close() Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 44/47] Add the Windows Hypervisor Platform accelerator Paolo Bonzini
2018-02-05 19:28 ` [Qemu-devel] [PULL 45/47] Add the WHPX vcpu API Paolo Bonzini
2018-02-05 19:29 ` [Qemu-devel] [PULL 46/47] Introduce the WHPX impl Paolo Bonzini
2018-02-05 19:29 ` [Qemu-devel] [PULL 47/47] Add the WHPX acceleration enlightenments Paolo Bonzini
2018-02-06 19:18 ` [Qemu-devel] [PULL 00/47] Misc patches for 2018-02-05 Peter Maydell
2018-02-06 20:37 ` Paolo Bonzini
2018-02-07 11:55 ` Peter Maydell
2018-02-07 12:05 ` Paolo Bonzini
2018-02-07 12:49 ` Marc-André Lureau
2018-02-07 12:53 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1517858941-5538-43-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).