[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 15/23] multifd: Use a single writev on the send side
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [PATCH v3 15/23] multifd: Use a single writev on the send side |
Date: |
Mon, 29 Nov 2021 18:35:13 +0000 |
User-agent: |
Mutt/2.1.3 (2021-09-10) |
* Juan Quintela (quintela@redhat.com) wrote:
> Until now, we wrote the packet header with write(), and the rest of the
> pages with writev(). Just increase the size of the iovec and do a
> single writev().
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> migration/multifd.c | 20 ++++++++------------
> 1 file changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/migration/multifd.c b/migration/multifd.c
> index 71bdef068e..65676d56fd 100644
> --- a/migration/multifd.c
> +++ b/migration/multifd.c
> @@ -643,7 +643,7 @@ static void *multifd_send_thread(void *opaque)
> uint32_t used = p->pages->num;
> uint64_t packet_num = p->packet_num;
> uint32_t flags = p->flags;
> - p->iovs_num = 0;
> + p->iovs_num = 1;
>
> if (used) {
> ret = multifd_send_state->ops->send_prepare(p, &local_err);
> @@ -663,20 +663,15 @@ static void *multifd_send_thread(void *opaque)
> trace_multifd_send(p->id, packet_num, used, flags,
> p->next_packet_size);
>
> - ret = qio_channel_write_all(p->c, (void *)p->packet,
> - p->packet_len, &local_err);
> + p->iov[0].iov_len = p->packet_len;
> + p->iov[0].iov_base = p->packet;
> +
> + ret = qio_channel_writev_all(p->c, p->iov, p->iovs_num,
> + &local_err);
> if (ret != 0) {
> break;
> }
>
> - if (used) {
> - ret = qio_channel_writev_all(p->c, p->iov, p->iovs_num,
> - &local_err);
> - if (ret != 0) {
> - break;
> - }
> - }
> -
> qemu_mutex_lock(&p->mutex);
> p->pending_job--;
> qemu_mutex_unlock(&p->mutex);
> @@ -913,7 +908,8 @@ int multifd_save_setup(Error **errp)
> p->packet->version = cpu_to_be32(MULTIFD_VERSION);
> p->name = g_strdup_printf("multifdsend_%d", i);
> p->tls_hostname = g_strdup(s->hostname);
> - p->iov = g_new0(struct iovec, page_count);
> + /* We need one extra place for the packet header */
> + p->iov = g_new0(struct iovec, page_count + 1);
> socket_send_channel_create(multifd_new_send_channel_async, p);
> }
>
> --
> 2.33.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
- [PATCH v3 11/23] multifd: Move iov from pages to params, (continued)
- [PATCH v3 11/23] multifd: Move iov from pages to params, Juan Quintela, 2021/11/24
- [PATCH v3 12/23] multifd: Make zlib use iov's, Juan Quintela, 2021/11/24
- [PATCH v3 06/23] multifd: remove used parameter from send_prepare() method, Juan Quintela, 2021/11/24
- [PATCH v3 13/23] multifd: Make zstd use iov's, Juan Quintela, 2021/11/24
- [PATCH v3 15/23] multifd: Use a single writev on the send side, Juan Quintela, 2021/11/24
- Re: [PATCH v3 15/23] multifd: Use a single writev on the send side,
Dr. David Alan Gilbert <=
- [PATCH v3 16/23] multifd: Unfold "used" variable by its value, Juan Quintela, 2021/11/24
- [PATCH v3 17/23] multifd: Use normal pages array on the send side, Juan Quintela, 2021/11/24
- [PATCH v3 14/23] multifd: Remove send_write() method, Juan Quintela, 2021/11/24
- [PATCH v3 18/23] multifd: Use normal pages array on the recv side, Juan Quintela, 2021/11/24
- [PATCH v3 19/23] multifd: recv side only needs the RAMBlock host address, Juan Quintela, 2021/11/24
- [PATCH v3 20/23] multifd: Rename pages_used to normal_pages, Juan Quintela, 2021/11/24