On Mon, Jun 28, 2010 at 05:56:07PM +0800, Xin, Xiaohui wrote: > > >OK, if I understand you correctly then I don't think have a > >problem. With your current patch-set you have exactly the same > >situation when the skb->data is reallocated as a kernel buffer. > > When will skb->data to be reallocated? May you point me the code path?
Anything that calls pskb_expand_head. > >This is OK because as you correctly argue, it is a rare situation. > > > >With my proposal you will need to get this extra external buffer > >in even less cases, because you'd only need to do it if the skb > >head grows, which only happens if it becomes encapsulated. > >So let me explain it in a bit more detail: > > > >Our packet starts out as a purely non-linear skb, i.e., skb->head > >contains nothing and all the page frags come from the guest. > > > >During host processing we may pull data into skb->head but the > >first frag will remain unless we pull all of it. If we did do > >that then you would have a free external buffer anyway. > > > >Now in the common case the header may be modified or pulled, but > >it very rarely grows. So you can just copy the header back into > >the first frag just before we give it to the guest. > > > Since the data is still there, so recompute the page offset and size is ok, > right? Right, you just move the page offset back and increase the size. However, to do this safely we'd need to have a way of knowing whether the skb head has been modified. It may well turn out to be just as effective to do something like if (memcmp(skb->data, page frag head, skb_headlen)) memcpy(page frag head, skb->data, skb_headlen) As the page frag head should be in cache since it would've been used to populate skb->data. It'd be good to run some benchmarks with this to see whether adding a bit to sk_buff to avoid the memcmp is worth it or not. Cheers, -- Email: Herbert Xu <herb...@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html