From: "Michael R. Hines" <mrhines@linux.vnet.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>
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
Subject: Re: [Qemu-devel] [RFC PATCH RDMA support v6: 4/7] Introduce two new capabilities
Date: Wed, 10 Apr 2013 08:34:42 -0400 [thread overview]
Message-ID: <51655C62.2030508@linux.vnet.ibm.com> (raw)
In-Reply-To: <516519CA.4090809@redhat.com>
On 04/10/2013 03:50 AM, Paolo Bonzini wrote:
> Il 10/04/2013 06:29, mrhines@linux.vnet.ibm.com ha scritto:
>> 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)
>> 2. migrate_set_capability chunk_register_destination on|off (default off)
>>
>> Signed-off-by: Michael R. Hines <mrhines@us.ibm.com>
> Michael, please listen to _all_ review comments.
>
> 1) I asked you to place check_for_zero in a separate patch.
>
> 2) Again, patch 3 cannot compile without this one. The code should
> compile after each patch, with and without --enable-rdma.
My apologies - I misunderstood the request. I am indeed addressing every
comment.
When you said separate, I thought you meant a different patch series
altpgether.
This is my first time, so the meaning of "separate" was not clear =)
And yes, patch 3 does in fact compile both with and without --enable-rdma.
>> ---
>> include/migration/qemu-file.h | 15 +++++++++++++++
>> migration.c | 33 +++++++++++++++++++++++++++++++--
>> qapi-schema.json | 2 +-
>> 3 files changed, 47 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h
>> index 623c434..b6f3256 100644
>> --- a/include/migration/qemu-file.h
>> +++ b/include/migration/qemu-file.h
>> @@ -57,12 +57,15 @@ typedef int (QEMUFileGetFD)(void *opaque);
>> typedef ssize_t (QEMUFileWritevBufferFunc)(void *opaque, struct iovec *iov,
>> int iovcnt);
>>
>> +typedef struct QEMURamControlOps QEMURamControlOps;
>> +
>> typedef struct QEMUFileOps {
>> QEMUFilePutBufferFunc *put_buffer;
>> QEMUFileGetBufferFunc *get_buffer;
>> QEMUFileCloseFunc *close;
>> QEMUFileGetFD *get_fd;
>> QEMUFileWritevBufferFunc *writev_buffer;
>> + const QEMURamControlOps *ram_control;
> Why a separate member? You can put them directly here.
Acknowledged.
>> } QEMUFileOps;
>>
>> QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops);
>> @@ -80,6 +83,18 @@ void qemu_put_byte(QEMUFile *f, int v);
>> * The buffer should be available till it is sent asynchronously.
>> */
>> 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;
> Please put these in migration-rdma.c. You do not need them here.
>
Acknowledged.
>> 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 */
> Please do not invent a special return value, this will not be maintainable.
>
> Just sacrifice the assert for now, as we had agreed in the past.
You flip-flopped on me =)
You said conditionalize it, then make a separate patch, then delete it
altogether =)
But I'm fine with delete =)
next prev parent reply other threads:[~2013-04-10 12:35 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 [this message]
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
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=51655C62.2030508@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.