From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: "Michael R. Hines" <mrhines@linux.vnet.ibm.com>
Cc: amit.shah@redhat.com, quintela@redhat.com,
arei.gonglei@huawei.com, qemu-devel@nongnu.org,
mrhines@us.ibm.com
Subject: Re: [Qemu-devel] [PATCH 08/10] Rework ram block hash
Date: Tue, 19 May 2015 19:55:04 +0100 [thread overview]
Message-ID: <20150519185503.GI2127@work-vm> (raw)
In-Reply-To: <555B85B4.6070903@linux.vnet.ibm.com>
* Michael R. Hines (mrhines@linux.vnet.ibm.com) wrote:
> On 04/20/2015 10:57 AM, Dr. David Alan Gilbert (git) wrote:
> >From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >
> >RDMA uses a hash from block offset->RAM Block; this isn't needed
> >on the destination, and now that the destination sorts the ramblock
> >list, is harder to maintain.
>
> Destination sorts the ramblock list? Is the patchset out-of-order?
> I didn't see that yet..... Why is it sorted?
It's the next patch in the list - please see that one.
Since I use an index into the list it made it the easiest thing to index
on.
> I would like to keep the ramblock list directly addressable by hash
> on both sides, because, as I mentioned earlier, we want as much
> flexibility in registering RAMBlock memory as possible by being
> able to add or delete arbitrary blocks int the list at anytime during
> a migration.
>
> I will try to get the patchset that allows anyone to register memory
> for transfer out as soon as I can.
Hmm OK, I think I can rework that to regenerate the hash; it's a little
difficult without knowing how you're intending to use it.
Dave
>
> >
> >Split the hash so that it's only generated on the source.
> >
> >Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> >---
> > migration/rdma.c | 32 ++++++++++++++++++++------------
> > 1 file changed, 20 insertions(+), 12 deletions(-)
> >
> >diff --git a/migration/rdma.c b/migration/rdma.c
> >index fe3b76e..185817e 100644
> >--- a/migration/rdma.c
> >+++ b/migration/rdma.c
> >@@ -533,23 +533,22 @@ static int rdma_add_block(RDMAContext *rdma, const char *block_name,
> > ram_addr_t block_offset, uint64_t length)
> > {
> > RDMALocalBlocks *local = &rdma->local_ram_blocks;
> >- RDMALocalBlock *block = g_hash_table_lookup(rdma->blockmap,
> >- (void *)(uintptr_t)block_offset);
> >+ RDMALocalBlock *block;
> > RDMALocalBlock *old = local->block;
> >
> >- assert(block == NULL);
> >-
> > local->block = g_malloc0(sizeof(RDMALocalBlock) * (local->nb_blocks + 1));
> >
> > if (local->nb_blocks) {
> > int x;
> >
> >- for (x = 0; x < local->nb_blocks; x++) {
> >- g_hash_table_remove(rdma->blockmap,
> >- (void *)(uintptr_t)old[x].offset);
> >- g_hash_table_insert(rdma->blockmap,
> >- (void *)(uintptr_t)old[x].offset,
> >- &local->block[x]);
> >+ if (rdma->blockmap) {
> >+ for (x = 0; x < local->nb_blocks; x++) {
> >+ g_hash_table_remove(rdma->blockmap,
> >+ (void *)(uintptr_t)old[x].offset);
> >+ g_hash_table_insert(rdma->blockmap,
> >+ (void *)(uintptr_t)old[x].offset,
> >+ &local->block[x]);
> >+ }
> > }
> > memcpy(local->block, old, sizeof(RDMALocalBlock) * local->nb_blocks);
> > g_free(old);
> >@@ -571,7 +570,9 @@ static int rdma_add_block(RDMAContext *rdma, const char *block_name,
> >
> > block->is_ram_block = local->init ? false : true;
> >
> >- g_hash_table_insert(rdma->blockmap, (void *) block_offset, block);
> >+ if (rdma->blockmap) {
> >+ g_hash_table_insert(rdma->blockmap, (void *) block_offset, block);
> >+ }
> >
> > trace_rdma_add_block(block_name, local->nb_blocks,
> > (uintptr_t) block->local_host_addr,
> >@@ -607,7 +608,6 @@ static int qemu_rdma_init_ram_blocks(RDMAContext *rdma)
> > RDMALocalBlocks *local = &rdma->local_ram_blocks;
> >
> > assert(rdma->blockmap == NULL);
> >- rdma->blockmap = g_hash_table_new(g_direct_hash, g_direct_equal);
> > memset(local, 0, sizeof *local);
> > qemu_ram_foreach_block(qemu_rdma_init_one_block, rdma);
> > trace_qemu_rdma_init_ram_blocks(local->nb_blocks);
> >@@ -2248,6 +2248,14 @@ static int qemu_rdma_source_init(RDMAContext *rdma, Error **errp, bool pin_all)
> > goto err_rdma_source_init;
> > }
> >
> >+ /* Build the hash that maps from offset to RAMBlock */
> >+ rdma->blockmap = g_hash_table_new(g_direct_hash, g_direct_equal);
> >+ for (idx = 0; idx < rdma->local_ram_blocks.nb_blocks; idx++) {
> >+ g_hash_table_insert(rdma->blockmap,
> >+ (void *)(uintptr_t)rdma->local_ram_blocks.block[idx].offset,
> >+ &rdma->local_ram_blocks.block[idx]);
> >+ }
> >+
> > for (idx = 0; idx < RDMA_WRID_MAX; idx++) {
> > ret = qemu_rdma_reg_control(rdma, idx);
> > if (ret) {
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2015-05-19 18:55 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-20 15:57 [Qemu-devel] [PATCH 00/10] Remove RDMA migration dependence on RAMBlock offset Dr. David Alan Gilbert (git)
2015-04-20 15:57 ` [Qemu-devel] [PATCH 01/10] Rename RDMA structures to make destination clear Dr. David Alan Gilbert (git)
2015-05-19 17:52 ` Michael R. Hines
2015-04-20 15:57 ` [Qemu-devel] [PATCH 02/10] qemu_ram_foreach_block: pass up error value, and down the ramblock name Dr. David Alan Gilbert (git)
2015-05-19 17:56 ` Michael R. Hines
2015-04-20 15:57 ` [Qemu-devel] [PATCH 03/10] Store block name in local blocks structure Dr. David Alan Gilbert (git)
2015-05-19 18:00 ` Michael R. Hines
2015-05-19 18:46 ` Dr. David Alan Gilbert
2015-04-20 15:57 ` [Qemu-devel] [PATCH 04/10] Translate offsets to destination address space Dr. David Alan Gilbert (git)
2015-05-19 18:28 ` Michael R. Hines
2015-05-19 18:44 ` Dr. David Alan Gilbert
2015-05-19 18:57 ` Michael R. Hines
2015-05-19 19:02 ` Dr. David Alan Gilbert
2015-04-20 15:57 ` [Qemu-devel] [PATCH 05/10] Rework ram_control_load_hook to hook during block load Dr. David Alan Gilbert (git)
2015-05-19 18:35 ` Michael R. Hines
2015-05-19 18:49 ` Dr. David Alan Gilbert
2015-04-20 15:57 ` [Qemu-devel] [PATCH 06/10] Remove unneeded memset Dr. David Alan Gilbert (git)
2015-05-19 18:35 ` Michael R. Hines
2015-04-20 15:57 ` [Qemu-devel] [PATCH 07/10] Simplify rdma_delete_block and remove it's dependence on the hash Dr. David Alan Gilbert (git)
2015-05-19 18:44 ` Michael R. Hines
2015-04-20 15:57 ` [Qemu-devel] [PATCH 08/10] Rework ram block hash Dr. David Alan Gilbert (git)
2015-05-19 18:49 ` Michael R. Hines
2015-05-19 18:55 ` Dr. David Alan Gilbert [this message]
2015-05-19 19:02 ` Michael R. Hines
2015-05-19 19:07 ` Dr. David Alan Gilbert
2015-04-20 15:57 ` [Qemu-devel] [PATCH 09/10] Sort destination RAMBlocks to be the same as the source Dr. David Alan Gilbert (git)
2015-05-19 18:51 ` Michael R. Hines
2015-06-01 11:53 ` Dr. David Alan Gilbert
2015-04-20 15:57 ` [Qemu-devel] [PATCH 10/10] Sanity check RDMA remote data Dr. David Alan Gilbert (git)
2015-05-19 18:52 ` Michael R. Hines
2015-05-18 22:01 ` [Qemu-devel] [PATCH 00/10] Remove RDMA migration dependence on RAMBlock offset 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=20150519185503.GI2127@work-vm \
--to=dgilbert@redhat.com \
--cc=amit.shah@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=mrhines@linux.vnet.ibm.com \
--cc=mrhines@us.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/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.