From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: dgilbert@redhat.com, lvivier@redhat.com, peterx@redhat.com
Subject: [Qemu-devel] [PATCH v10 14/14] all works
Date: Wed, 10 Jan 2018 13:47:23 +0100 [thread overview]
Message-ID: <20180110124723.11879-15-quintela@redhat.com> (raw)
In-Reply-To: <20180110124723.11879-1-quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/ram.c | 69 ++++++++++++++++++++++++++++-----------------------------
1 file changed, 34 insertions(+), 35 deletions(-)
diff --git a/migration/ram.c b/migration/ram.c
index 6e45f668d1..a689d4a218 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -671,22 +671,25 @@ static uint16_t multifd_send_page(RAMBlock *block, ram_addr_t offset,
int i;
MultiFDSendParams *p = NULL; /* make happy gcc */
multifd_pages_t *pages = multifd_send_state->pages;
+ bool same_block;
if (!pages->block) {
pages->block = block;
}
- pages->packet->offset[pages->used] = offset;
- pages->iov[pages->used].iov_base = block->host + offset;
- pages->iov[pages->used].iov_len = TARGET_PAGE_SIZE;
- pages->used++;
+ same_block = pages->block == block;
+ if (same_block) {
+ pages->packet->offset[pages->used] = offset;
+ pages->iov[pages->used].iov_base = block->host + offset;
+ pages->iov[pages->used].iov_len = TARGET_PAGE_SIZE;
+ pages->used++;
- if (!last_page) {
- if (pages->used < pages->allocated) {
- return MULTIFD_CONTINUE;
+ if (!last_page) {
+ if (pages->used < pages->allocated) {
+ return MULTIFD_CONTINUE;
+ }
}
}
-
qemu_sem_wait(&multifd_send_state->sem);
qemu_mutex_lock(&multifd_send_state->mutex);
for (i = 0; i < multifd_send_state->count; i++) {
@@ -709,7 +712,10 @@ static uint16_t multifd_send_page(RAMBlock *block, ram_addr_t offset,
p->pages->used, last_page);
qemu_sem_post(&p->sem);
- return i;
+ if (!same_block) {
+ multifd_send_page(block, offset, last_page);
+ }
+ return 0;
}
struct MultiFDRecvParams {
@@ -809,14 +815,13 @@ static void *multifd_recv_thread(void *opaque)
qemu_mutex_unlock(&p->mutex);
break;
}
- if (p->pages->used) {
+ if (true) {
MultiFDPacket_t *packet = p->pages->packet;
RAMBlock *block;
Error *local_err = NULL;
size_t ret;
int i;
- p->pages->used = 0;
qemu_mutex_unlock(&p->mutex);
ret = qio_channel_read_all(p->c, (void *)packet,
@@ -828,13 +833,8 @@ static void *multifd_recv_thread(void *opaque)
block = qemu_ram_block_by_name(packet->ramblock);
p->pages->seq = packet->seq;
for (i = 0; i < packet->used; i++) {
- if (block->host + packet->offset[i]
- != p->pages->iov[i].iov_base) {
- printf("page offset %d packet %p pages %p\n", i,
- block->host + packet->offset[i],
- p->pages->iov[i].iov_base);
- break;
- }
+ p->pages->iov[i].iov_base = block->host + packet->offset[i];
+ p->pages->iov[i].iov_len = TARGET_PAGE_SIZE;
}
trace_multifd_recv(p->id, p->pages->seq, packet->used);
ret = qio_channel_readv_all(p->c, p->pages->iov,
@@ -851,11 +851,11 @@ static void *multifd_recv_thread(void *opaque)
p->sync = false;
}
qemu_mutex_unlock(&p->mutex);
- qemu_sem_post(&p->ready);
+// qemu_sem_post(&p->ready);
continue;
}
qemu_mutex_unlock(&p->mutex);
- qemu_sem_wait(&p->sem);
+// qemu_sem_wait(&p->sem);
}
trace_multifd_recv_thread(p->id, p->packets_recv);
@@ -953,7 +953,7 @@ static void multifd_recv_page(RAMBlock *block, ram_addr_t offset,
assert(fd_num < thread_count);
p = &multifd_recv_state->params[fd_num];
- qemu_sem_wait(&p->ready);
+// qemu_sem_wait(&p->ready);
qemu_mutex_lock(&p->mutex);
p->done = false;
@@ -961,7 +961,7 @@ static void multifd_recv_page(RAMBlock *block, ram_addr_t offset,
multifd_recv_state->pages = p->pages;
p->pages = pages;
qemu_mutex_unlock(&p->mutex);
- qemu_sem_post(&p->sem);
+// qemu_sem_post(&p->sem);
}
static int multifd_flush(void)
@@ -1430,24 +1430,23 @@ static int ram_multifd_page(RAMState *rs, PageSearchStatus *pss,
bool last_stage)
{
int pages;
- uint16_t fd_num;
+// uint16_t fd_num;
RAMBlock *block = pss->block;
ram_addr_t offset = pss->page << TARGET_PAGE_BITS;
pages = save_zero_page(rs, block, offset);
if (pages == -1) {
- ram_counters.transferred +=
- save_page_header(rs, rs->f, block,
- offset | RAM_SAVE_FLAG_MULTIFD_PAGE);
- fd_num = multifd_send_page(block, offset,
- rs->migration_dirty_pages == 1);
- qemu_put_be16(rs->f, fd_num);
- if (fd_num != MULTIFD_CONTINUE) {
- /* We start with a different channel.
- Flush pending work */
- qemu_fflush(rs->f);
- }
- ram_counters.transferred += 2; /* size of fd_num */
+// ram_counters.transferred +=
+// save_page_header(rs, rs->f, block,
+// offset | RAM_SAVE_FLAG_MULTIFD_PAGE);
+ multifd_send_page(block, offset, rs->migration_dirty_pages == 1);
+// qemu_put_be16(rs->f, fd_num);
+// if (fd_num != MULTIFD_CONTINUE) {
+// /* We start with a different channel.
+// Flush pending work */
+// qemu_fflush(rs->f);
+// }
+// ram_counters.transferred += 2; /* size of fd_num */
ram_counters.transferred += TARGET_PAGE_SIZE;
pages = 1;
ram_counters.normal++;
--
2.14.3
next prev parent reply other threads:[~2018-01-10 12:48 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 12:47 [Qemu-devel] [RFC 00/14] Multifd Juan Quintela
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 01/14] migration: Make migrate_fd_error() the owner of the Error Juan Quintela
2018-01-12 18:50 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 02/14] migration: Rename initial_bytes Juan Quintela
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 03/14] migration: Drop current address parameter from save_zero_page() Juan Quintela
2018-01-12 18:56 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 04/14] migration: Start of multiple fd work Juan Quintela
2018-01-22 7:00 ` Peter Xu
2018-01-23 19:52 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 05/14] migration: Create ram_multifd_page Juan Quintela
2018-01-23 20:16 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 06/14] migration: Send the fd number which we are going to use for this page Juan Quintela
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 07/14] migration: Create thread infrastructure for multifd recv side Juan Quintela
2018-01-24 13:34 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 08/14] migration: Transfer pages over new channels Juan Quintela
2018-01-24 13:46 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 09/14] migration: Flush receive queue Juan Quintela
2018-01-24 14:12 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 10/14] migration: Add multifd test Juan Quintela
2018-01-24 14:23 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 11/14] LOCAL: use trace events for migration-test Juan Quintela
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 12/14] migration: Sent the page list over the normal thread Juan Quintela
2018-01-24 14:29 ` Dr. David Alan Gilbert
2018-01-10 12:47 ` [Qemu-devel] [PATCH v10 13/14] migration: Add multifd_send_packet trace Juan Quintela
2018-01-10 12:47 ` Juan Quintela [this message]
2018-01-10 15:01 ` [Qemu-devel] [RFC 00/14] Multifd Juan Quintela
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=20180110124723.11879-15-quintela@redhat.com \
--to=quintela@redhat.com \
--cc=dgilbert@redhat.com \
--cc=lvivier@redhat.com \
--cc=peterx@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).