[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 2/3] QIOChannelSocket: Implement io_writev_zerocopy & io_f
From: |
Leonardo Bras Soares Passos |
Subject: |
Re: [PATCH v4 2/3] QIOChannelSocket: Implement io_writev_zerocopy & io_flush_zerocopy for CONFIG_LINUX |
Date: |
Wed, 27 Oct 2021 03:30:22 -0300 |
On Wed, Oct 13, 2021 at 3:18 AM Peter Xu <peterx@redhat.com> wrote:
>
> On Sat, Oct 09, 2021 at 04:56:12AM -0300, Leonardo Bras wrote:
> > @@ -154,6 +161,17 @@ int qio_channel_socket_connect_sync(QIOChannelSocket
> > *ioc,
> > return -1;
> > }
> >
> > +#ifdef CONFIG_LINUX
> > + ret = qemu_setsockopt(fd, SOL_SOCKET, SO_ZEROCOPY, &v, sizeof(v));
> > + if (ret < 0) {
> > + /* Zerocopy not available on host */
> > + return 0;
> > + }
> > +
> > + qio_channel_set_feature(QIO_CHANNEL(ioc),
> > + QIO_CHANNEL_FEATURE_WRITE_ZEROCOPY);
>
> This is okay I think, but looks a bit weird. Maybe nicer to be written as:
>
> #if LINUX
> ret = setsockopt();
> if (ret == 0) {
> qio_channel_set_feature(...);
> }
> #endif
> return 0;
>
> ?
Yeah, I also questioned myself about this one.
At the time I ended up writing like this because the lines above used
the behavior "if error, then exit/abort", and so I thought that this
would be the better way to include this feature.
But I did not consider that this is not an error exit, but a 'maybe
feature instead'.
So, I will change that like you suggested.
>
> > +#endif
> > +
> > return 0;
> > }
>
> [...]
>
> > +static ssize_t qio_channel_socket_writev_zerocopy(QIOChannel *ioc,
> > + const struct iovec *iov,
> > + size_t niov,
> > + Error **errp)
> > +{
> > + QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
> > + ssize_t ret;
> > +
> > + ret = qio_channel_socket_writev_flags(ioc, iov, niov, NULL, 0,
> > + MSG_ZEROCOPY, errp);
> > + if (ret == QIO_CHANNEL_ERR_NOBUFS) {
> > + if (errp && *errp) {
>
> Hmm this seems wrong, *errp should be NULL in most cases, meanwhile I think
> error_setg*() takes care of errp==NULL too, so maybe we can drop this?
Yeah, you are correct.
I ended up confused about how to use err, thanks for making it more clear!
>
> > + error_setg_errno(errp, errno,
> > + "Process can't lock enough memory for using
> > MSG_ZEROCOPY");
> > + }
> > + return -1;
> > + }
> > +
> > + sioc->zerocopy_queued++;
> > + return ret;
> > +}
>
> --
> Peter Xu
>
Best regards,
Leonardo Bras
- Re: [PATCH v4 1/3] QIOChannel: Add io_writev_zerocopy & io_flush_zerocopy callbacks, (continued)
[PATCH v4 2/3] QIOChannelSocket: Implement io_writev_zerocopy & io_flush_zerocopy for CONFIG_LINUX, Leonardo Bras, 2021/10/09
[PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras, 2021/10/09
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Eric Blake, 2021/10/11
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras Soares Passos, 2021/10/11
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Markus Armbruster, 2021/10/12
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras Soares Passos, 2021/10/27
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Markus Armbruster, 2021/10/28
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras Soares Passos, 2021/10/28
Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Peter Xu, 2021/10/13