On Mon, 2018-09-10 at 07:56 -0700, Eric Dumazet wrote: > > On 09/10/2018 07:44 AM, Paolo Abeni wrote: > > hi all, > > > > while testing some local patches I observed that the TCP tput in the > > following scenario: > > > > # the following enable napi on veth0, so that we can trigger the > > # GRO path with namespaces > > ip netns add test > > ip link add type veth > > ip link set dev veth0 netns test > > ip -n test link set lo up > > ip -n test link set veth0 up > > ip -n test addr add dev veth0 172.16.1.2/24 > > ip link set dev veth1 up > > ip addr add dev veth1 172.16.1.1/24 > > IDX=`ip netns exec test cat /sys/class/net/veth0/ifindex` > > > > # 'xdp_pass' is a NO-OP XDP program that simply return XDP_PASS > > ip netns exec test ./xdp_pass $IDX & > > taskset 0x2 ip netns exec test iperf3 -s -i 60 & > > taskset 0x1 iperf3 -c 172.16.1.2 -t 60 -i 60 > > > > is quite lower than expected (~800Mbps). 'perf' shows a weird topmost > > offender: > > > > > But... why GRO would even be needed in this scenario ?
AFAICS, attaching an XDP program to a veth device makes TCP flows over such veth unconditionally hit this code path since: commit 948d4f214fde43743c57aae0c708bff44f6345f2 Author: Toshiaki Makita <makita.toshi...@lab.ntt.co.jp> Date: Fri Aug 3 16:58:10 2018 +0900 veth: Add driver XDP I'm personally looking for some way to hit the GRO code path with selftest/namespaces. > GRO is really meant for physical devices, having to mess with skb->sk adds > extra cost > in this already heavy cost engine. Yup, even if I do not see any measurable cost added by the posted code. Cheers, Paolo