[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 21/21] migration/multifd: Compute transferred bytes correctly
From: |
Juan Quintela |
Subject: |
[PATCH 21/21] migration/multifd: Compute transferred bytes correctly |
Date: |
Mon, 8 May 2023 15:09:09 +0200 |
In the past, we had to put the in the main thread all the operations
related with sizes due to qemu_file not beeing thread safe. As now
all counters are atomic, we can update the counters just after the
do the write. As an aditional bonus, we are able to use the right
value for the compression methods. Right now we were assuming that
there were no compression at all.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
migration/multifd.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/migration/multifd.c b/migration/multifd.c
index 9d2ade7abc..3a19d8e304 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -175,6 +175,7 @@ void multifd_register_ops(int method, MultiFDMethods *ops)
static int multifd_send_initial_packet(MultiFDSendParams *p, Error **errp)
{
MultiFDInit_t msg = {};
+ size_t size = sizeof(msg);
int ret;
msg.magic = cpu_to_be32(MULTIFD_MAGIC);
@@ -182,10 +183,12 @@ static int multifd_send_initial_packet(MultiFDSendParams
*p, Error **errp)
msg.id = p->id;
memcpy(msg.uuid, &qemu_uuid.data, sizeof(msg.uuid));
- ret = qio_channel_write_all(p->c, (char *)&msg, sizeof(msg), errp);
+ ret = qio_channel_write_all(p->c, (char *)&msg, size, errp);
if (ret != 0) {
return -1;
}
+ stat64_add(&mig_stats.multifd_bytes, size);
+ stat64_add(&mig_stats.transferred, size);
return 0;
}
@@ -396,7 +399,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;
@@ -431,10 +433,7 @@ 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) * p->page_size + p->packet_len;
qemu_mutex_unlock(&p->mutex);
- stat64_add(&mig_stats.transferred, transferred);
- stat64_add(&mig_stats.multifd_bytes, transferred);
qemu_sem_post(&p->sem);
return 1;
@@ -716,6 +715,8 @@ static void *multifd_send_thread(void *opaque)
if (ret != 0) {
break;
}
+ stat64_add(&mig_stats.multifd_bytes, p->packet_len);
+ stat64_add(&mig_stats.transferred, p->packet_len);
} else {
/* Send header using the same writev call */
p->iov[0].iov_len = p->packet_len;
@@ -728,6 +729,8 @@ static void *multifd_send_thread(void *opaque)
break;
}
+ stat64_add(&mig_stats.multifd_bytes, p->next_packet_size);
+ stat64_add(&mig_stats.transferred, p->next_packet_size);
qemu_mutex_lock(&p->mutex);
p->pending_job--;
qemu_mutex_unlock(&p->mutex);
--
2.40.0
- [PATCH 12/21] migration: Add a trace for migration_transferred_bytes, (continued)
- [PATCH 12/21] migration: Add a trace for migration_transferred_bytes, Juan Quintela, 2023/05/08
- [PATCH 13/21] migration: Use migration_transferred_bytes() to calculate rate_limit, Juan Quintela, 2023/05/08
- [PATCH 19/21] migration: Remove unused qemu_file_credit_transfer(), Juan Quintela, 2023/05/08
- [PATCH 16/21] migration/RDMA: It is accounting for zero/normal pages in two places, Juan Quintela, 2023/05/08
- [PATCH 17/21] migration/rdma: Remove QEMUFile parameter when not used, Juan Quintela, 2023/05/08
- [PATCH 14/21] migration: We don't need the field rate_limit_used anymore, Juan Quintela, 2023/05/08
- [PATCH 20/21] migration/rdma: Simplify the function that saves a page, Juan Quintela, 2023/05/08
- [PATCH 21/21] migration/multifd: Compute transferred bytes correctly,
Juan Quintela <=