[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 2/8] multifd: Count the number of sent bytes correctly
From: |
Juan Quintela |
Subject: |
[PATCH v5 2/8] multifd: Count the number of sent bytes correctly |
Date: |
Thu, 10 Mar 2022 16:34:48 +0100 |
Current code asumes that all pages are whole. That is not true for
example for compression already. Fix it for creating a new field
->sent_bytes that includes it.
All ram_counters are used only from the migration thread, so we have
two options:
- put a mutex and fill everything when we sent it (not only
ram_counters, also qemu_file->xfer_bytes).
- Create a local variable that implements how much has been sent
through each channel. And when we push another packet, we "add" the
previous stats.
I choose two due to less changes overall. On the previous code we
increase transferred and then we sent. Current code goes the other
way around. It sents the data, and after the fact, it updates the
counters. Notice that each channel can have a maximum of half a
megabyte of data without counting, so it is not very important.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/multifd.h | 2 ++
migration/multifd.c | 15 ++++++---------
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/migration/multifd.h b/migration/multifd.h
index 4dda900a0b..3afba8a198 100644
--- a/migration/multifd.h
+++ b/migration/multifd.h
@@ -119,6 +119,8 @@ typedef struct {
uint32_t normal_num;
/* used for compression methods */
void *data;
+ /* How many bytes have we sent on the last packet */
+ uint64_t sent_bytes;
} MultiFDSendParams;
typedef struct {
diff --git a/migration/multifd.c b/migration/multifd.c
index 76b57a7177..ab87879471 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -398,7 +398,6 @@ static int multifd_send_pages(QEMUFile *f)
static int next_channel;
MultiFDSendParams *p = NULL; /* make happy gcc */
MultiFDPages_t *pages = multifd_send_state->pages;
- uint64_t transferred;
if (qatomic_read(&multifd_send_state->exiting)) {
return -1;
@@ -433,11 +432,10 @@ static int multifd_send_pages(QEMUFile *f)
p->packet_num = multifd_send_state->packet_num++;
multifd_send_state->pages = p->pages;
p->pages = pages;
- transferred = ((uint64_t) pages->num) * qemu_target_page_size()
- + p->packet_len;
- qemu_file_update_transfer(f, transferred);
- ram_counters.multifd_bytes += transferred;
- ram_counters.transferred += transferred;
+ ram_transferred_add(p->sent_bytes);
+ ram_counters.multifd_bytes += p->sent_bytes;
+ qemu_file_update_transfer(f, p->sent_bytes);
+ p->sent_bytes = 0;
qemu_mutex_unlock(&p->mutex);
qemu_sem_post(&p->sem);
@@ -597,9 +595,6 @@ void multifd_send_sync_main(QEMUFile *f)
p->packet_num = multifd_send_state->packet_num++;
p->flags |= MULTIFD_FLAG_SYNC;
p->pending_job++;
- qemu_file_update_transfer(f, p->packet_len);
- ram_counters.multifd_bytes += p->packet_len;
- ram_counters.transferred += p->packet_len;
qemu_mutex_unlock(&p->mutex);
qemu_sem_post(&p->sem);
}
@@ -675,6 +670,8 @@ static void *multifd_send_thread(void *opaque)
}
qemu_mutex_lock(&p->mutex);
+ p->sent_bytes += p->packet_len;;
+ p->sent_bytes += p->next_packet_size;
p->pending_job--;
qemu_mutex_unlock(&p->mutex);
--
2.34.1
- [PATCH v5 0/8] Migration: Transmit and detect zero pages in the multifd threads, Juan Quintela, 2022/03/10
- [PATCH v5 1/8] migration: Export ram_transferred_ram(), Juan Quintela, 2022/03/10
- [PATCH v5 2/8] multifd: Count the number of sent bytes correctly,
Juan Quintela <=
- [PATCH v5 4/8] multifd: Add property to enable/disable zero_page, Juan Quintela, 2022/03/10
- [PATCH v5 5/8] migration: Export ram_release_page(), Juan Quintela, 2022/03/10
- [PATCH v5 3/8] migration: Make ram_save_target_page() a pointer, Juan Quintela, 2022/03/10
- [PATCH v5 6/8] multifd: Support for zero pages transmission, Juan Quintela, 2022/03/10
- [PATCH v5 8/8] migration: Use multifd before we check for the zero page, Juan Quintela, 2022/03/10
- [PATCH v5 7/8] multifd: Zero pages transmission, Juan Quintela, 2022/03/10