Re: [PATCH 2/2] virtio_net: Improve the recv buffer allocation scheme

From: Rusty Russell
Date: Thu Oct 16 2008 - 00:44:24 EST

On Friday 10 October 2008 02:30:35 Herbert Xu wrote:
> On Thu, Oct 09, 2008 at 11:55:59AM +1100, Rusty Russell wrote:
> > Secondly, we can put the virtio_net_hdr at the head of the skb data (this
> > is also worth considering for xmit I think if we have headroom) and drop
> > MAX_SKB_FRAGS which contains a gratuitous +2.
> That's fine but having skb->data in the ring still means two
> different kinds of memory in there and it sucks when you only
> have 1500-byte packets.

No, you really want to do this for 1500 byte packets since it increases the
effective space in the ring. Unfortunately, Mark points out that kvm assumes
the header is standalone: Anthony and I discussed this a while back and
decided it *wasn't* a good assumption.

TODO: YA feature bit...

> We need a scheme that handles both 1500-byte packets as well
> as 64K-byte size ones, and without holding down 16M of memory
> per guest.

Ah, thanks for that. It's not so much ring entries, as guest memory you're
trying to save. That makes much more sense.

> > > + char *p = page_address(skb_shinfo(skb)->frags[0].page);
> >
> > ...
> >
> > > + memcpy(hdr, p, sizeof(*hdr));
> > > + p += sizeof(*hdr);
> >
> > I think you need kmap_atomic() here to access the page. And yes, that
> > will effect performance :(
> No we don't. kmap would only be necessary for highmem which we
> did not request.

Good point. Could you humor me with a comment to that effect? Prevents me
making the same mistake again.

PS. Laptop broke, was MIA for a week. Working overtime now.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at