On Thu, Jan 13, 2022 at 10:06:14AM +0000, Daniel P. Berrangé wrote: > On Thu, Jan 13, 2022 at 02:48:15PM +0800, Peter Xu wrote: > > On Thu, Jan 06, 2022 at 07:13:39PM -0300, Leonardo Bras wrote: > > > @@ -558,15 +575,26 @@ static ssize_t qio_channel_socket_writev(QIOChannel > > > *ioc, > > > memcpy(CMSG_DATA(cmsg), fds, fdsize); > > > } > > > > > > + if (flags & QIO_CHANNEL_WRITE_FLAG_ZERO_COPY) { > > > + sflags = MSG_ZEROCOPY; > > > + } > > > + > > > retry: > > > - ret = sendmsg(sioc->fd, &msg, 0); > > > + ret = sendmsg(sioc->fd, &msg, sflags); > > > if (ret <= 0) { > > > - if (errno == EAGAIN) { > > > + switch (errno) { > > > + case EAGAIN: > > > return QIO_CHANNEL_ERR_BLOCK; > > > - } > > > - if (errno == EINTR) { > > > + case EINTR: > > > goto retry; > > > + case ENOBUFS: > > > + if (sflags & MSG_ZEROCOPY) { > > > + error_setg_errno(errp, errno, > > > + "Process can't lock enough memory for > > > using MSG_ZEROCOPY"); > > > + return -1; > > > + } > > > > I have no idea whether it'll make a real differnece, but - should we better > > add > > a "break" here? If you agree and with that fixed, feel free to add: > > > > Reviewed-by: Peter Xu <pet...@redhat.com> > > > > I also wonder whether you hit ENOBUFS in any of the environments. On Fedora > > here it's by default unlimited, but just curious when we should keep an eye. > > Fedora doesn't allow unlimited locked memory by default > > $ grep "locked memory" /proc/self/limits > Max locked memory 65536 65536 bytes > > And regardless of Fedora defaults, libvirt will set a limit > for the guest. It will only be unlimited if requiring certain > things like VFIO.
Thanks, I obviously checked up the wrong host.. Leo, do you know how much locked memory will be needed by zero copy? Will there be a limit? Is it linear to the number of sockets/channels? It'll be better if we can fail at enabling the feature when we detected that the specified locked memory limit may not be suffice. -- Peter Xu