datapath: Use skb_zerocopy() for upcall
authorThomas Graf <tgraf@suug.ch>
Tue, 17 Dec 2013 00:56:03 +0000 (16:56 -0800)
committerJesse Gross <jesse@nicira.com>
Tue, 17 Dec 2013 01:03:06 +0000 (17:03 -0800)
commit533bea51e95c69ad2c6d8589a11ae25e4dc8db37
treeeb6908ba86334b8afcced5070f2ec21426ecf137
parent5ae440c3cd0d0cd9a3218577bdc1db5fe38387f5
datapath: Use skb_zerocopy() for upcall

Use of skb_zerocopy() can avoid the expensive call to memcpy()
when copying the packet data into the Netlink skb. Completes
checksum through skb_checksum_help() if not already done in
GSO segmentation.

Zerocopy is only performed if user space supported unaligned
Netlink messages. memory mapped netlink i/o is preferred over
zerocopy if it is set up.

Cost of upcall is significantly reduced from:
+   7.48%       vhost-8471  [k] memcpy
+   5.57%     ovs-vswitchd  [k] memcpy
+   2.81%       vhost-8471  [k] csum_partial_copy_generic

to:
+   5.72%     ovs-vswitchd  [k] memcpy
+   3.32%       vhost-5153  [k] memcpy
+   0.68%       vhost-5153  [k] skb_zerocopy

(megaflows disabled)

Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Jesse Gross <jesse@nicira.com>
datapath/datapath.c