Re: [PATCH net-next 2/2] virtio-net: fix the XDP truesize calculation for mergeable buffers

From: Michael S. Tsirkin
Date: Wed May 06 2020 - 08:08:57 EST


On Wed, May 06, 2020 at 04:21:15PM +0800, Jason Wang wrote:
>
> On 2020/5/6 äå3:37, Michael S. Tsirkin wrote:
> > On Wed, May 06, 2020 at 02:16:33PM +0800, Jason Wang wrote:
> > > We should not exclude headroom and tailroom when XDP is set. So this
> > > patch fixes this by initializing the truesize from PAGE_SIZE when XDP
> > > is set.
> > >
> > > Cc: Jesper Dangaard Brouer<brouer@xxxxxxxxxx>
> > > Signed-off-by: Jason Wang<jasowang@xxxxxxxxxx>
> > Seems too aggressive, we do not use up the whole page for the size.
> >
> >
> >
>
> For XDP yes, we do:
>
> static unsigned int get_mergeable_buf_len(struct receive_queue *rq,
> ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â struct ewma_pkt_len *avg_pkt_len,
> ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ ÂÂÂ Â unsigned int room)
> {
> ÂÂÂ const size_t hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf);
> ÂÂÂ unsigned int len;
>
> ÂÂÂ if (room)
> ÂÂÂ ÂÂÂ return PAGE_SIZE - room;
>
> ...
>
> Thanks

Hmm. But that's only for new buffers. Buffers that were outstanding
before xdp was attached don't use the whole page, do they?




Also, with TCP smallqueues blocking the queue like that might be a problem.
Could you try and check performance impact of this?
I looked at what other drivers do and I see they tend to copy the skb
in XDP_PASS case. ATM we don't normally - but should we?

--
MST