From patchwork Wed Oct 7 06:20:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Denis V. Lunev" X-Patchwork-Id: 527152 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id DF68E140D95 for ; Wed, 7 Oct 2015 17:23:21 +1100 (AEDT) Received: from localhost ([::1]:55448 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zji8F-00070Z-VB for incoming@patchwork.ozlabs.org; Wed, 07 Oct 2015 02:23:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48938) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zji5y-0002WZ-HZ for qemu-devel@nongnu.org; Wed, 07 Oct 2015 02:20:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zji5x-0000Pv-Kd for qemu-devel@nongnu.org; Wed, 07 Oct 2015 02:20:58 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:31100 helo=relay.sw.ru) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zji5x-0000Pb-8m for qemu-devel@nongnu.org; Wed, 07 Oct 2015 02:20:57 -0400 Received: from irbis.sw.ru ([10.30.2.139]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id t976KkkU031932; Wed, 7 Oct 2015 09:20:55 +0300 (MSK) From: "Denis V. Lunev" To: Date: Wed, 7 Oct 2015 09:20:43 +0300 Message-Id: <1444198846-5383-6-git-send-email-den@openvz.org> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1444198846-5383-1-git-send-email-den@openvz.org> References: <5614531B.5080107@redhat.com> <1444198846-5383-1-git-send-email-den@openvz.org> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x X-Received-From: 195.214.232.25 Cc: "Denis V. Lunev" , Igor Redko , jsnow@redhat.com, qemu-devel@nongnu.org, annam@virtuozzo.com Subject: [Qemu-devel] [PATCH 5/8] migration: add draft of new transport X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Igor Redko In this patch transport test is added. It can be used to estimate the possibility of live migration given downtime and bandwidth. In this patch basic functionality is implemented to meet the QEMUFile interface requirements. This transport is write-only. Moreover, it saves only the size of the transferred data and drops the data itself. Also, the Makefile modification to link this file included. Signed-off-by: Igor Redko Reviewed-by: Anna Melekhova Signed-off-by: Denis V. Lunev --- include/migration/migration.h | 2 ++ migration/Makefile.objs | 2 +- migration/test.c | 66 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 migration/test.c diff --git a/include/migration/migration.h b/include/migration/migration.h index 8611750..555267b 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -108,6 +108,8 @@ void rdma_start_outgoing_migration(void *opaque, const char *host_port, Error ** void rdma_start_incoming_migration(const char *host_port, Error **errp); +void test_start_migration(void *opaque, const char *host_port, Error **errp); + void migrate_fd_error(MigrationState *s); void migrate_fd_connect(MigrationState *s); diff --git a/migration/Makefile.objs b/migration/Makefile.objs index d929e96..2da590b 100644 --- a/migration/Makefile.objs +++ b/migration/Makefile.objs @@ -1,4 +1,4 @@ -common-obj-y += migration.o tcp.o +common-obj-y += migration.o tcp.o test.o common-obj-y += vmstate.o common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o common-obj-y += xbzrle.o diff --git a/migration/test.c b/migration/test.c new file mode 100644 index 0000000..8d06988 --- /dev/null +++ b/migration/test.c @@ -0,0 +1,66 @@ +#include "qemu-common.h" +#include "migration/migration.h" +#include "migration/qemu-file.h" +#include "exec/cpu-common.h" +#include "qemu/error-report.h" +#include "qemu/main-loop.h" +#include "qemu/sockets.h" +#include "qemu/bitmap.h" +#include +#include +#include "qmp-commands.h" + +typedef struct QEMUFileTest { + MigrationState *s; + size_t len; + QEMUFile *file; +} QEMUFileTest; + +static uint64_t transfered_bytes; +static uint64_t initial_bytes; + +static ssize_t qemu_test_put_buffer(void *opaque, const uint8_t *buf, + int64_t pos, size_t size) +{ + transfered_bytes += size; + return size; +} + +static int qemu_test_close(void *opaque) +{ + return 0; +} + +static const QEMUFileOps test_write_ops = { + .put_buffer = qemu_test_put_buffer, + .close = qemu_test_close, +}; + +static void *qemu_fopen_test(MigrationState *s, const char *mode) +{ + QEMUFileTest *t; + transfered_bytes = 0; + initial_bytes = 0; + if (qemu_file_mode_is_not_valid(mode)) { + return NULL; + } + + t = g_malloc0(sizeof(QEMUFileTest)); + t->s = s; + + if (mode[0] == 'w') { + t->file = qemu_fopen_ops(s, &test_write_ops); + } else { + return NULL; + } + qemu_file_set_rate_limit(t->file, -1); + return t->file; +} + +void test_start_migration(void *opaque, const char *host_port, Error **errp) +{ + MigrationState *s = opaque; + s->file = qemu_fopen_test(s, "wb"); + migrate_fd_connect(s); + return; +}