Searched hist:"66 ccbc9c87c2ae96585f9aa5f733609e6f4acf25" (Results 1 – 1 of 1) sorted by relevance
/openbmc/linux/drivers/net/ |
H A D | tun.c | diff 66ccbc9c87c2ae96585f9aa5f733609e6f4acf25 Fri Aug 11 06:41:16 CDT 2017 Jason Wang <jasowang@redhat.com> tap: use build_skb() for small packet
We use tun_alloc_skb() which calls sock_alloc_send_pskb() to allocate skb in the past. This socket based method is not suitable for high speed userspace like virtualization which usually:
- ignore sk_sndbuf (INT_MAX) and expect to receive the packet as fast as possible - don't want to be block at sendmsg()
To eliminate the above overheads, this patch tries to use build_skb() for small packet. We will do this only when the following conditions are all met:
- TAP instead of TUN - sk_sndbuf is INT_MAX - caller don't want to be blocked - zerocopy is not used - packet size is smaller enough to use build_skb()
Pktgen from guest to host shows ~11% improvement for rx pps of tap:
Before: ~1.70Mpps After : ~1.88Mpps
What's more important, this makes it possible to implement XDP for tap before creating skbs.
Signed-off-by: Jason Wang <jasowang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
|