From: David Gibson <david@gibson.dropbear.id.au>
To: Stefano Brivio <sbrivio@redhat.com>
Cc: passt-dev@passt.top
Subject: Re: [PATCH 2/3] packet: Don't have struct pool specify its buffer
Date: Fri, 20 Dec 2024 11:59:09 +1100 [thread overview]
Message-ID: <Z2TBXdwkfxDSof13@zatzit> (raw)
In-Reply-To: <20241219100011.5faed9fd@elisabeth>
[-- Attachment #1: Type: text/plain, Size: 2916 bytes --]
On Thu, Dec 19, 2024 at 10:00:11AM +0100, Stefano Brivio wrote:
> On Fri, 13 Dec 2024 23:01:55 +1100
> David Gibson <david@gibson.dropbear.id.au> wrote:
>
> > struct pool, which represents a batch of packets includes values giving
> > the buffer in which all the packets lie - or for vhost_user a link to the
> > vu_dev_region array in which the packets sit. Originally that made sense
> > because we stored each packet as an offset and length within that buffer.
> >
> > However dd143e389 ("packet: replace struct desc by struct iovec") replaced
> > the offset and length with a struct iovec which can directly reference a
> > packet anywhere in memory. This means we no longer need the buffer
> > reference to interpret packets from the pool. So there's really no need
> > to check where the packet sits. We can remove the buf reference and all
> > checks associated with it. As a bonus this removes the special case for
> > vhost-user.
> >
> > Similarly the old representation used a 16-bit length, so there were some
> > checks that packets didn't exceed that. That's also no longer necessary
> > with the struct iovec which uses a size_t length.
> >
> > I think under an unlikely set of circumstances it might have been possible
> > to hit that 16-bit limit for a legitimate packet: other parts of the code
> > place a limit of 65535 bytes on the L2 frame, however that doesn't include
> > the length tag used by the qemu socket protocol. That tag *is* included in
> > the packet as stored in the pool, however, meaning we could get a 65539
> > byte packet at this level.
>
> As I mentioned in the call on Monday: sure, we need to fix this, but at
> the same time I'm not quite convinced that it's a good idea to drop all
> these sanity checks.
>
> Even if they're not based on offsets anymore, I think it's still
> valuable to ensure that the packets are not exactly _anywhere_ in
> memory, but only where we expect them to be.
>
> If it's doable, I would rather keep these checks, and change the ones
> on the length to allow a maximum value of 65539 bytes. I mean, there's
> a big difference between 65539 and, say, 4294967296.
Right, I have draft patches that do basically this.
> By the way, I haven't checked what happens with MTUs slightly bigger
> than 65520 bytes: virtio-net (at least with QEMU) doesn't budge if I
> set more than 65520, but I didn't actually send big packets. I'll try
> to have a look (also with muvm) unless you already checked.
I'm not sure what you mean by "doesn't budge". No, I haven't checked
with either qemu or muvm. There could of course be limits applied by
either VMM, or by the guest virtio-net driver.
--
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 --]
next prev parent reply other threads:[~2024-12-20 1:13 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-13 12:01 [PATCH 0/3] Cleanups to packet pool handling and sizing David Gibson
2024-12-13 12:01 ` [PATCH 1/3] packet: Use flexible array member in struct pool David Gibson
2024-12-13 12:01 ` [PATCH 2/3] packet: Don't have struct pool specify its buffer David Gibson
2024-12-19 9:00 ` Stefano Brivio
2024-12-20 0:59 ` David Gibson [this message]
2024-12-20 9:51 ` Stefano Brivio
2024-12-21 6:59 ` David Gibson
2024-12-13 12:01 ` [PATCH 3/3] tap: Don't size pool_tap[46] for the maximum number of packets David Gibson
2024-12-19 9:00 ` Stefano Brivio
2024-12-20 1:13 ` David Gibson
2024-12-20 9:51 ` Stefano Brivio
2024-12-21 7:00 ` David Gibson
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=Z2TBXdwkfxDSof13@zatzit \
--to=david@gibson.dropbear.id.au \
--cc=passt-dev@passt.top \
--cc=sbrivio@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.
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).