From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44503) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPjZW-0004wZ-Gp for qemu-devel@nongnu.org; Tue, 09 Apr 2013 21:11:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UPjZT-0002Kr-S3 for qemu-devel@nongnu.org; Tue, 09 Apr 2013 21:11:34 -0400 Received: from e31.co.us.ibm.com ([32.97.110.149]:52728) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPjZT-0002KW-Kw for qemu-devel@nongnu.org; Tue, 09 Apr 2013 21:11:31 -0400 Received: from /spool/local by e31.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 9 Apr 2013 19:11:28 -0600 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by d03dlp01.boulder.ibm.com (Postfix) with ESMTP id 1F0D21FF0026 for ; Tue, 9 Apr 2013 19:06:26 -0600 (MDT) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r3A1BPZe129942 for ; Tue, 9 Apr 2013 19:11:26 -0600 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r3A1BP57011941 for ; Tue, 9 Apr 2013 19:11:25 -0600 Message-ID: <5164BC3C.6090400@linux.vnet.ibm.com> Date: Tue, 09 Apr 2013 21:11:24 -0400 From: "Michael R. Hines" MIME-Version: 1.0 References: <1365476681-31593-1-git-send-email-mrhines@linux.vnet.ibm.com> <1365476681-31593-9-git-send-email-mrhines@linux.vnet.ibm.com> <5164494F.1080705@redhat.com> In-Reply-To: <5164494F.1080705@redhat.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH RDMA support v5: 08/12] new capabilities added and check for QMP string 'rdma' List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: aliguori@us.ibm.com, mst@redhat.com, qemu-devel@nongnu.org, owasserm@redhat.com, abali@us.ibm.com, mrhines@us.ibm.com, gokul@us.ibm.com Actually, this capability needs to be a part of the same patch. RDMA must have the ability to turn this off or performance will die. Similarly dynamic chunk registration on the server depends on having the ability to turn this on, or you cannot get the advantages of dynamic registration. - Michael On 04/09/2013 01:01 PM, Paolo Bonzini wrote: > Il 09/04/2013 05:04, mrhines@linux.vnet.ibm.com ha scritto: >> From: "Michael R. Hines" >> >> 1. capability for zero pages (enabled by default) >> 2. capability for dynamic server chunk registration (disabled by default) > The "zero" capability should be a separate patch. > > The hunk adding mbps should also be a separate patch. > > Otherwise, please merge this with patch 6. > >> Signed-off-by: Michael R. Hines >> --- >> migration.c | 41 ++++++++++++++++++++++++++++++++++++++--- >> 1 file changed, 38 insertions(+), 3 deletions(-) >> >> diff --git a/migration.c b/migration.c >> index 3b4b467..f01efa9 100644 >> --- a/migration.c >> +++ b/migration.c >> @@ -15,6 +15,7 @@ >> >> #include "qemu-common.h" >> #include "migration/migration.h" >> +#include "migration/rdma.h" >> #include "monitor/monitor.h" >> #include "migration/qemu-file.h" >> #include "sysemu/sysemu.h" >> @@ -68,6 +69,18 @@ MigrationState *migrate_get_current(void) >> .xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE, >> }; >> >> + static bool first_time = 1; >> + >> + /* >> + * Historically, checking for zeros is enabled >> + * by default. Require the user to disable it >> + * (for example RDMA), if they really want to. >> + */ >> + if(first_time) { >> + current_migration.enabled_capabilities[MIGRATION_CAPABILITY_CHECK_FOR_ZERO] = true; >> + first_time = 0; >> + } > Just add > > .enabled_capabilities[MIGRATION_CAPABILITY_CHECK_FOR_ZERO] = true, > > to the initializer above. > >> + >> return ¤t_migration; >> } >> >> @@ -77,6 +90,8 @@ void qemu_start_incoming_migration(const char *uri, Error **errp) >> >> if (strstart(uri, "tcp:", &p)) >> tcp_start_incoming_migration(p, errp); >> + else if (strstart(uri, "rdma:", &p)) >> + rdma_start_incoming_migration(p, errp); >> #if !defined(WIN32) >> else if (strstart(uri, "exec:", &p)) >> exec_start_incoming_migration(p, errp); >> @@ -120,7 +135,6 @@ void process_incoming_migration(QEMUFile *f) >> Coroutine *co = qemu_coroutine_create(process_incoming_migration_co); >> int fd = qemu_get_fd(f); >> >> - assert(fd != -1); > Oh, missed it. Here it is. :) > > Please make this an if() instead. > >> qemu_set_nonblock(fd); >> qemu_coroutine_enter(co, f); >> } >> @@ -405,6 +419,8 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk, >> >> if (strstart(uri, "tcp:", &p)) { >> tcp_start_outgoing_migration(s, p, &local_err); >> + } else if (strstart(uri, "rdma:", &p)) { >> + rdma_start_outgoing_migration(s, p, &local_err); >> #if !defined(WIN32) >> } else if (strstart(uri, "exec:", &p)) { >> exec_start_outgoing_migration(s, p, &local_err); >> @@ -474,6 +490,24 @@ void qmp_migrate_set_downtime(double value, Error **errp) >> max_downtime = (uint64_t)value; >> } >> >> +bool migrate_chunk_register_destination(void) >> +{ >> + MigrationState *s; >> + >> + s = migrate_get_current(); >> + >> + return s->enabled_capabilities[MIGRATION_CAPABILITY_CHUNK_REGISTER_DESTINATION]; >> +} >> + >> +bool migrate_check_for_zero(void) >> +{ >> + MigrationState *s; >> + >> + s = migrate_get_current(); >> + >> + return s->enabled_capabilities[MIGRATION_CAPABILITY_CHECK_FOR_ZERO]; >> +} >> + >> int migrate_use_xbzrle(void) >> { >> MigrationState *s; >> @@ -546,8 +580,9 @@ static void *migration_thread(void *opaque) >> max_size = bandwidth * migrate_max_downtime() / 1000000; >> >> DPRINTF("transferred %" PRIu64 " time_spent %" PRIu64 >> - " bandwidth %g max_size %" PRId64 "\n", >> - transferred_bytes, time_spent, bandwidth, max_size); >> + " bandwidth %g (%0.2f mbps) max_size %" PRId64 "\n", >> + transferred_bytes, time_spent, >> + bandwidth, Mbps(transferred_bytes, time_spent), max_size); >> /* if we haven't sent anything, we don't want to recalculate >> 10000 is a small enough number for our purposes */ >> if (s->dirty_bytes_rate && transferred_bytes > 10000) { >> >