From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>,
qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Leonardo Bras <leobras@redhat.com>,
Leonardo Bras Soares Passos <lsoaresp@redhat.com>,
Eric Blake <eblake@redhat.com>
Subject: Re: [PATCH v7 2/5] QIOChannelSocket: Implement io_writev zero copy flag & io_flush for CONFIG_LINUX
Date: Thu, 13 Jan 2022 10:42:39 +0000 [thread overview]
Message-ID: <YeACHxbPt1SV9cx8@redhat.com> (raw)
In-Reply-To: <YeAAJLYeImjPwW0f@xz-m1.local>
On Thu, Jan 13, 2022 at 06:34:12PM +0800, Peter Xu wrote:
> 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 <peterx@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?
IIRC we decided it would be limited by the socket send buffer size, rather
than guest RAM, because writes will block once the send buffer is full.
This has a default global setting, with per-socket override. On one box I
have it is 200 Kb. With multifd you'll need "num-sockets * send buffer".
> 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.
Checking this value against available locked memory though will always
have an error margin because other things in QEMU can use locked memory
too
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2022-01-13 10:51 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-06 22:13 [PATCH v7 0/5] MSG_ZEROCOPY + multifd Leonardo Bras
2022-01-06 22:13 ` [PATCH v7 1/5] QIOChannel: Add flags on io_writev and introduce io_flush callback Leonardo Bras
2022-01-13 6:28 ` Peter Xu
2022-01-18 20:45 ` Leonardo Bras Soares Passos
2022-01-19 1:58 ` Peter Xu
2022-01-19 18:29 ` Leonardo Bras Soares Passos
2022-01-13 10:52 ` Daniel P. Berrangé
2022-01-19 4:38 ` Leonardo Bras Soares Passos
2022-01-06 22:13 ` [PATCH v7 2/5] QIOChannelSocket: Implement io_writev zero copy flag & io_flush for CONFIG_LINUX Leonardo Bras
2022-01-13 6:48 ` Peter Xu
2022-01-13 10:06 ` Daniel P. Berrangé
2022-01-13 10:34 ` Peter Xu
2022-01-13 10:42 ` Daniel P. Berrangé [this message]
2022-01-13 12:12 ` Peter Xu
2022-01-19 17:23 ` Leonardo Bras Soares Passos
2022-01-19 17:22 ` Leonardo Bras Soares Passos
2022-01-20 1:28 ` Peter Xu
2022-01-19 17:16 ` Leonardo Bras Soares Passos
2022-01-19 17:01 ` Leonardo Bras Soares Passos
2022-02-01 4:23 ` Leonardo Bras Soares Passos
2022-01-13 13:05 ` Daniel P. Berrangé
2022-01-19 17:24 ` Leonardo Bras Soares Passos
2022-01-06 22:13 ` [PATCH v7 3/5] migration: Add zero-copy parameter for QMP/HMP for Linux Leonardo Bras
2022-01-13 7:00 ` Peter Xu
2022-01-19 17:53 ` Leonardo Bras Soares Passos
2022-01-13 13:09 ` Daniel P. Berrangé
2022-01-19 18:03 ` Leonardo Bras Soares Passos
2022-01-19 18:15 ` Daniel P. Berrangé
2022-01-19 18:46 ` Leonardo Bras Soares Passos
2022-02-18 16:31 ` Juan Quintela
2022-02-21 16:23 ` Leonardo Bras Soares Passos
2022-01-06 22:13 ` [PATCH v7 4/5] migration: Add migrate_use_tls() helper Leonardo Bras
2022-01-13 7:02 ` Peter Xu
2022-01-19 18:06 ` Leonardo Bras Soares Passos
2022-01-20 1:37 ` Peter Xu
2022-01-13 13:10 ` Daniel P. Berrangé
2022-01-19 18:07 ` Leonardo Bras Soares Passos
2022-01-06 22:13 ` [PATCH v7 5/5] multifd: Implement zero copy write in multifd migration (multifd-zero-copy) Leonardo Bras
2022-01-13 7:15 ` Peter Xu
2022-01-19 18:23 ` Leonardo Bras Soares Passos
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YeACHxbPt1SV9cx8@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=leobras@redhat.com \
--cc=lsoaresp@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.