From: "Michael R. Hines" <mrhines@linux.vnet.ibm.com>
To: Orit Wasserman <owasserm@redhat.com>
Cc: aliguori@us.ibm.com, mst@redhat.com, qemu-devel@nongnu.org,
abali@us.ibm.com, mrhines@us.ibm.com, gokul@us.ibm.com,
pbonzini@redhat.com
Subject: Re: [Qemu-devel] [RFC PATCH RDMA support v6: 4/7] Introduce two new capabilities
Date: Wed, 10 Apr 2013 09:13:59 -0400 [thread overview]
Message-ID: <51656597.1060601@linux.vnet.ibm.com> (raw)
In-Reply-To: <51655F78.5040500@redhat.com>
On 04/10/2013 08:47 AM, Orit Wasserman wrote:
> On 04/10/2013 07:29 AM, mrhines@linux.vnet.ibm.com wrote:
>> From: "Michael R. Hines" <mrhines@us.ibm.com>
>>
>> RDMA performs very slowly with zero-page checking.
>> Without the ability to disable it, RDMA throughput and
>> latency promises and high performance links cannot be
>> fully realized.
>>
>> On the other hand, dynamic page registration support is also
>> included in the RDMA protocol. This second capability also
>> cannot be fully realized without the ability to enable zero
>> page scanning.
>>
>> So, we have two new capabilities which work together:
>>
>> 1. migrate_set_capability check_for_zero on|off (default on)
> This is not a capability but a migration parameter, the command
> should be named migrate_check_for_zero (on|off) and you will need to add a flag
> to MigrationParams (and it should be in a separate patch as Paolo already requested)
I'm happy to convert to using a command, but is this not consistent with
XBZRLE the capability? The XBZRLE capability does not affect the destination
either - but it is implemented as a capability.
Am I misundertanding?
- Michael
>> 2. migrate_set_capability chunk_register_destination on|off (default off)
> This is indeed a capability as it effect both source and destination
Acknowledged.
void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, int size);
+void qemu_file_set_error(QEMUFile *f, int ret);
+
+void qemu_rdma_cleanup(void *opaque);
+int qemu_rdma_close(void *opaque);
+int qemu_rdma_get_fd(void *opaque);
+int qemu_rdma_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size);
+int qemu_rdma_put_buffer(void *opaque, const uint8_t *buf,
+ int64_t pos, int size);
+bool qemu_file_mode_is_not_valid(const char * mode);
+
+extern const QEMUFileOps rdma_read_ops;
+extern const QEMUFileOps rdma_write_ops;
static inline void qemu_put_ubyte(QEMUFile *f, unsigned int v)
{
diff --git a/migration.c b/migration.c
index 3b4b467..875cee3 100644
--- a/migration.c
+++ b/migration.c
@@ -66,6 +66,7 @@ MigrationState *migrate_get_current(void)
.state = MIG_STATE_SETUP,
.bandwidth_limit = MAX_THROTTLE,
.xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE,
+ .enabled_capabilities[MIGRATION_CAPABILITY_CHECK_FOR_ZERO] = true,
};
return ¤t_migration;
@@ -77,6 +78,10 @@ void qemu_start_incoming_migration(const char *uri, Error **errp)
if (strstart(uri, "tcp:", &p))
tcp_start_incoming_migration(p, errp);
+#ifdef CONFIG_RDMA
+ else if (strstart(uri, "rdma:", &p))
+ rdma_start_incoming_migration(p, errp);
+#endif
#if !defined(WIN32)
else if (strstart(uri, "exec:", &p))
exec_start_incoming_migration(p, errp);
@@ -120,8 +125,10 @@ void process_incoming_migration(QEMUFile *f)
Coroutine *co = qemu_coroutine_create(process_incoming_migration_co);
int fd = qemu_get_fd(f);
- assert(fd != -1);
- qemu_set_nonblock(fd);
+ if(fd != -2) { /* rdma returns -2 */
+ assert(fd != -1);
+ qemu_set_nonblock(fd);
+ }
qemu_coroutine_enter(co, f);
}
@@ -405,6 +412,10 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
if (strstart(uri, "tcp:", &p)) {
tcp_start_outgoing_migration(s, p, &local_err);
+#ifdef CONFIG_RDMA
+ } else if (strstart(uri, "rdma:", &p)) {
+ rdma_start_outgoing_migration(s, p, &local_err);
+#endif
#if !defined(WIN32)
} else if (strstart(uri, "exec:", &p)) {
exec_start_outgoing_migration(s, p, &local_err);
@@ -474,6 +485,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;
diff --git a/qapi-schema.json b/qapi-schema.json
index db542f6..7ebcf99 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -602,7 +602,7 @@
# Since: 1.2
##
{ 'enum': 'MigrationCapability',
- 'data': ['xbzrle'] }
+ 'data': ['xbzrle', 'check_for_zero', 'chunk_register_destination'] }
##
# @MigrationCapabilityStatus
next prev parent reply other threads:[~2013-04-10 13:14 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-10 4:29 [Qemu-devel] [RFC PATCH RDMA support v6: 0/7] additional cleanup and consolidation mrhines
2013-04-10 4:29 ` [Qemu-devel] [RFC PATCH RDMA support v6: 1/7] ./configure and Makefile mrhines
2013-04-10 7:52 ` Paolo Bonzini
2013-04-10 12:37 ` Michael R. Hines
2013-04-10 12:42 ` Paolo Bonzini
2013-04-10 13:11 ` Michael R. Hines
2013-04-10 4:29 ` [Qemu-devel] [RFC PATCH RDMA support v6: 2/7] documentation (docs/rdma.txt) mrhines
2013-04-10 5:35 ` Michael S. Tsirkin
2013-04-10 12:19 ` Michael R. Hines
2013-04-10 4:29 ` [Qemu-devel] [RFC PATCH RDMA support v6: 3/7] Introduce QEMURamControlOps mrhines
2013-04-10 7:52 ` Paolo Bonzini
2013-04-10 12:38 ` Michael R. Hines
2013-04-10 4:29 ` [Qemu-devel] [RFC PATCH RDMA support v6: 4/7] Introduce two new capabilities mrhines
2013-04-10 7:50 ` Paolo Bonzini
2013-04-10 12:34 ` Michael R. Hines
2013-04-10 12:40 ` Paolo Bonzini
2013-04-10 13:10 ` Michael R. Hines
2013-04-10 13:13 ` Paolo Bonzini
2013-04-10 14:03 ` Michael R. Hines
2013-04-10 12:47 ` Orit Wasserman
2013-04-10 13:13 ` Michael R. Hines [this message]
2013-04-10 13:20 ` Orit Wasserman
2013-04-10 15:52 ` Michael R. Hines
2013-04-10 4:29 ` [Qemu-devel] [RFC PATCH RDMA support v6: 5/7] core RDMA logic mrhines
2013-04-10 4:29 ` [Qemu-devel] [RFC PATCH RDMA support v6: 6/7] send pc.ram over RDMA mrhines
2013-04-10 7:57 ` Paolo Bonzini
2013-04-10 12:38 ` Michael R. Hines
2013-04-10 4:29 ` [Qemu-devel] [RFC PATCH RDMA support v6: 7/7] introduce qemu_ram_foreach_block() mrhines
2013-04-10 7:47 ` Paolo Bonzini
2013-04-10 12:36 ` Michael R. Hines
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=51656597.1060601@linux.vnet.ibm.com \
--to=mrhines@linux.vnet.ibm.com \
--cc=abali@us.ibm.com \
--cc=aliguori@us.ibm.com \
--cc=gokul@us.ibm.com \
--cc=mrhines@us.ibm.com \
--cc=mst@redhat.com \
--cc=owasserm@redhat.com \
--cc=pbonzini@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).