[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 18/18] multifd: Make zlib compression method not use iovs
From: |
Juan Quintela |
Subject: |
[PULL 18/18] multifd: Make zlib compression method not use iovs |
Date: |
Wed, 15 Dec 2021 11:32:18 +0100 |
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
migration/multifd-zlib.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/migration/multifd-zlib.c b/migration/multifd-zlib.c
index e85ef8824d..da6201704c 100644
--- a/migration/multifd-zlib.c
+++ b/migration/multifd-zlib.c
@@ -13,6 +13,7 @@
#include "qemu/osdep.h"
#include <zlib.h>
#include "qemu/rcu.h"
+#include "exec/ramblock.h"
#include "exec/target_page.h"
#include "qapi/error.h"
#include "migration.h"
@@ -98,8 +99,8 @@ static void zlib_send_cleanup(MultiFDSendParams *p, Error
**errp)
*/
static int zlib_send_prepare(MultiFDSendParams *p, Error **errp)
{
- struct iovec *iov = p->pages->iov;
struct zlib_data *z = p->data;
+ size_t page_size = qemu_target_page_size();
z_stream *zs = &z->zs;
uint32_t out_size = 0;
int ret;
@@ -113,8 +114,8 @@ static int zlib_send_prepare(MultiFDSendParams *p, Error
**errp)
flush = Z_SYNC_FLUSH;
}
- zs->avail_in = iov[i].iov_len;
- zs->next_in = iov[i].iov_base;
+ zs->avail_in = page_size;
+ zs->next_in = p->pages->block->host + p->pages->offset[i];
zs->avail_out = available;
zs->next_out = z->zbuff + out_size;
@@ -235,6 +236,7 @@ static void zlib_recv_cleanup(MultiFDRecvParams *p)
static int zlib_recv_pages(MultiFDRecvParams *p, Error **errp)
{
struct zlib_data *z = p->data;
+ size_t page_size = qemu_target_page_size();
z_stream *zs = &z->zs;
uint32_t in_size = p->next_packet_size;
/* we measure the change of total_out */
@@ -259,7 +261,6 @@ static int zlib_recv_pages(MultiFDRecvParams *p, Error
**errp)
zs->next_in = z->zbuff;
for (i = 0; i < p->pages->num; i++) {
- struct iovec *iov = &p->pages->iov[i];
int flush = Z_NO_FLUSH;
unsigned long start = zs->total_out;
@@ -267,8 +268,8 @@ static int zlib_recv_pages(MultiFDRecvParams *p, Error
**errp)
flush = Z_SYNC_FLUSH;
}
- zs->avail_out = iov->iov_len;
- zs->next_out = iov->iov_base;
+ zs->avail_out = page_size;
+ zs->next_out = p->pages->block->host + p->pages->offset[i];
/*
* Welcome to inflate semantics
@@ -281,8 +282,8 @@ static int zlib_recv_pages(MultiFDRecvParams *p, Error
**errp)
do {
ret = inflate(zs, flush);
} while (ret == Z_OK && zs->avail_in
- && (zs->total_out - start) < iov->iov_len);
- if (ret == Z_OK && (zs->total_out - start) < iov->iov_len) {
+ && (zs->total_out - start) < page_size);
+ if (ret == Z_OK && (zs->total_out - start) < page_size) {
error_setg(errp, "multifd %d: inflate generated too few output",
p->id);
return -1;
--
2.33.1
- [PULL 11/18] multifd: The variable is only used inside the loop, (continued)
- [PULL 11/18] multifd: The variable is only used inside the loop, Juan Quintela, 2021/12/15
- [PULL 09/18] multifd: Rename used field to num, Juan Quintela, 2021/12/15
- [PULL 07/18] multifd: Delete useless operation, Juan Quintela, 2021/12/15
- [PULL 12/18] multifd: remove used parameter from send_prepare() method, Juan Quintela, 2021/12/15
- [PULL 10/18] multifd: Add missing documention, Juan Quintela, 2021/12/15
- [PULL 13/18] multifd: remove used parameter from send_recv_pages() method, Juan Quintela, 2021/12/15
- [PULL 14/18] multifd: Fill offset and block for reception, Juan Quintela, 2021/12/15
- [PULL 15/18] multifd: Shut down the QIO channels to avoid blocking the send threads when they are terminated., Juan Quintela, 2021/12/15
- [PULL 17/18] multifd: Make zstd compression method not use iovs, Juan Quintela, 2021/12/15
- [PULL 16/18] COLO: Move some trace code behind qemu_mutex_unlock_iothread(), Juan Quintela, 2021/12/15
- [PULL 18/18] multifd: Make zlib compression method not use iovs,
Juan Quintela <=
- Re: [PULL 00/18] Migration 20211214 patches, Richard Henderson, 2021/12/15