Toshiaki Makita says:
====================
Stacked vlan TSO
On the basis of Netdev 0.1 discussion[1], I made a patch set to enable
TSO for packets with multiple vlans.
Currently, packets with multiple vlans are always segmented by software,
which is caused by that netif_skb_features() drops most feature flags
for multiple tagged packets.
To allow NICs to segment them, we need to get rid of that check from core.
Fortunately, recently introduced ndo_features_check() can be used to
move the check to each driver, and this patch set is based on the idea.
For the initial patch set, I chose 3 drivers, bonding, team, and igb, as
candidates to enable TSO. I tested them and confirmed they works fine
with this change.
Here are samples of performance test results. As I expected, %sys gets
pretty lower than before.
* TEST1: vlan (.1Q) on vlan (.1ad) on igb (I350)
- before
$ netperf -t TCP_STREAM -H 192.168.10.1 -l 60
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 60.02 933.72
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 0.13 0.00 11.28 0.01 0.00 88.58
- after
$ netperf -t TCP_STREAM -H 192.168.10.1 -l 60
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 60.01 936.13
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 0.24 0.00 4.17 0.01 0.00 95.58
* TEST2: vlan (.1Q) on bridge (.1ad vlan filtering) on team on igb (I350)
- before
$ netperf -t TCP_STREAM -H 192.168.10.1 -l 60
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 60.01 936.28
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 0.41 0.00 11.57 0.01 0.00 88.01
- after
$ netperf -t TCP_STREAM -H 192.168.10.1 -l 60
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 60.02 935.72
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 0.14 0.00 7.66 0.01 0.00 92.19
In addition to above, I tested these configurations:
- vlan (.1Q) on vlan (1.ad) on bonding on igb (I350)
- vlan (.1Q) on vlan (1.Q) on igb (I350)
- vlan (.1Q) on vlan (1.Q) on team on igb (I350)
And didn't find any problem.
[1] https://netdev01.org/sessions/18
https://netdev01.org/docs/netdev01_bof_8021ad_makita_150212.pdf
====================
Signed-off-by: David S. Miller <davem@davemloft.net>