public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Eugenio Perez Martin <eperezma@redhat.com>
Cc: passt-dev@passt.top, jasowang@redhat.com
Subject: Re: [RFC v2 10/11] tap: add poll(2) to used_idx
Date: Wed, 30 Jul 2025 10:32:01 +1000	[thread overview]
Message-ID: <aIloAc22GmArsIvW@zatzit> (raw)
In-Reply-To: <CAJaqyWciBMeKw0e=-iKtsjR0FpJpdf-RrDqp3EjC+_iuwZufZw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2458 bytes --]

On Tue, Jul 29, 2025 at 09:04:19AM +0200, Eugenio Perez Martin wrote:
> On Tue, Jul 29, 2025 at 2:33 AM David Gibson
> <david@gibson.dropbear.id.au> wrote:
> >
> > On Mon, Jul 28, 2025 at 07:03:12PM +0200, Eugenio Perez Martin wrote:
> > > On Thu, Jul 24, 2025 at 3:21 AM David Gibson
> > > <david@gibson.dropbear.id.au> wrote:
> > > >
> > > > On Wed, Jul 09, 2025 at 07:47:47PM +0200, Eugenio Pérez wrote:
> > > > > From ~13Gbit/s to ~11.5Gbit/s.
> > > >
> > > > Again, I really don't know what you're comparing to what here.
> > > >
> > >
> > > When the buffer is full I'm using poll() to wait until vhost free some
> > > buffers, instead of actively checking the used index. This is the cost
> > > of the syscall.
> >
> > Ah, right.  So.. I'm not sure if it's so much the cost of the syscall
> > itself, as the fact that you're actively waiting for free buffers,
> > rather than returning to the main epoll loop so you can maybe make
> > progress on something else before returning to the Tx path.
> >
> 
> Previous patch also wait for free buffers, but it does it burning a
> CPU for that.

Ah, ok.  Hrm.  I still find it hard to believe that it's the cost of
the syscall per se that's causing the slowdown.  My guess is that the
cost is because having the poll() leads to a higher latency between
the buffer being released and us detecting it and re-using.

> The next patch is the one that allows to continue progress as long as
> there are enough free buffers, instead of always wait until all the
> buffer has been sent. But there are situations where this conversion
> needs other code changes. In particular, all the calls to
> tcp_payload_flush after checking that we have enough buffers like:
> 
> if (tcp_payload_sock_used > TCP_FRAMES_MEM - 2) {
>         tcp_buf_free_old_tap_xmit(c, 2);
>         tcp_payload_flush(c);
>         ...
> }
> 
> Seems like coroutines would be a good fix here, but maybe there are
> simpler ways to go back to the main loop while keeping the tcp socket
> "ready to read" by epoll POV. Out of curiosity, what do you think
> about setjmp()? :).

I think it has its uses, but deciding to go with it is a big
architectural decision not to be entered into likely.

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2025-07-30  0:32 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-09 17:47 [RFC v2 00/11] Add vhost-net kernel support Eugenio Pérez
2025-07-09 17:47 ` [RFC v2 01/11] tap: implement vhost_call_cb Eugenio Pérez
2025-07-23  6:56   ` David Gibson
2025-07-28 16:33     ` Eugenio Perez Martin
2025-07-29  0:11       ` David Gibson
2025-07-09 17:47 ` [RFC v2 02/11] tap: add die() on vhost error Eugenio Pérez
2025-07-23  6:58   ` David Gibson
2025-07-09 17:47 ` [RFC v2 03/11] tap: replace tx tap hdr with virtio_nethdr_mrg_rxbuf Eugenio Pérez
2025-07-24  0:17   ` David Gibson
2025-07-28 16:37     ` Eugenio Perez Martin
2025-07-09 17:47 ` [RFC v2 04/11] tcp: export memory regions to vhost Eugenio Pérez
2025-07-23  7:06   ` David Gibson
2025-07-28 16:41     ` Eugenio Perez Martin
2025-07-29  0:25       ` David Gibson
2025-07-09 17:47 ` [RFC v2 05/11] virtio: Fill .next in tx queue Eugenio Pérez
2025-07-23  7:07   ` David Gibson
2025-07-28 16:44     ` Eugenio Perez Martin
2025-07-09 17:47 ` [RFC v2 06/11] tap: move static iov_sock to tcp_buf_data_from_sock Eugenio Pérez
2025-07-23  7:09   ` David Gibson
2025-07-28 16:43     ` Eugenio Perez Martin
2025-07-29  0:28       ` David Gibson
2025-07-09 17:47 ` [RFC v2 07/11] tap: support tx through vhost Eugenio Pérez
2025-07-24  0:24   ` David Gibson
2025-07-24 14:30     ` Stefano Brivio
2025-07-25  0:23       ` David Gibson
2025-07-09 17:47 ` [RFC v2 08/11] tap: add tap_free_old_xmit Eugenio Pérez
2025-07-24  0:32   ` David Gibson
2025-07-28 16:45     ` Eugenio Perez Martin
2025-07-09 17:47 ` [RFC v2 09/11] tcp: start conversion to circular buffer Eugenio Pérez
2025-07-24  1:03   ` David Gibson
2025-07-28 16:55     ` Eugenio Perez Martin
2025-07-29  0:30       ` David Gibson
2025-07-09 17:47 ` [RFC v2 10/11] tap: add poll(2) to used_idx Eugenio Pérez
2025-07-24  1:20   ` David Gibson
2025-07-28 17:03     ` Eugenio Perez Martin
2025-07-29  0:32       ` David Gibson
2025-07-29  7:04         ` Eugenio Perez Martin
2025-07-30  0:32           ` David Gibson [this message]
2025-07-30  6:11             ` Eugenio Perez Martin
2025-07-09 17:47 ` [RFC v2 11/11] tcp_buf: adding TCP tx circular buffer Eugenio Pérez
2025-07-24  1:33   ` David Gibson
2025-07-28 17:04     ` Eugenio Perez Martin
2025-07-10  9:46 ` [RFC v2 00/11] Add vhost-net kernel support Eugenio Perez Martin

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=aIloAc22GmArsIvW@zatzit \
    --to=david@gibson.dropbear.id.au \
    --cc=eperezma@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=passt-dev@passt.top \
    /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.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).