On 20.11.2019 8:35, Eelco Chaudron wrote: > > > On 19 Nov 2019, at 17:52, Ilya Maximets wrote: > >> On 19.11.2019 17:16, Eelco Chaudron wrote: >>> >>> >>> On 7 Nov 2019, at 12:36, Ilya Maximets wrote: >>> >>>> Until now there was only two options for XDP mode in OVS: SKB or DRV. >>>> i.e. 'generic XDP' or 'native XDP with zero-copy enabled'. >>>> >>>> Devices like 'veth' interfaces in Linux supports native XDP, but >>>> doesn't support zero-copy mode. This case can not be covered by >>>> existing API and we have to use slower generic XDP for such devices. >>>> There are few more issues, e.g. TCP is not supported in generic XDP >>>> mode for veth interfaces due to kernel limitations, however it is >>>> supported in native mode. >>>> >>>> This change introduces ability to use native XDP without zero-copy >>>> along with best-effort configuration option that enabled by default. >>>> In best-effort case OVS will sequentially try different modes starting >>>> from the fastest one and will choose the first acceptable for current >>>> interface. This will guarantee the best possible performance. >>>> >>>> If user will want to choose specific mode, it's still possible by >>>> setting the 'options:xdp-mode'. >>>> >>>> This change additionally changes the API by renaming the configuration >>>> knob from 'xdpmode' to 'xdp-mode' and also renaming the modes >>>> themselves to be more user-friendly. >>>> >>>> The full list of currently supported modes: >>>> * native-with-zerocopy - former DRV >>>> * native - new one, DRV without zero-copy >>>> * generic - former SKB >>>> * best-effort - new one, chooses the best available from >>>> 3 above modes >>>> >>>> Since 'best-effort' is a default mode, users will not need to >>>> explicitely set 'xdp-mode' in most cases. >>>> >>>> TCP related tests enabled back in system afxdp testsuite, because >>>> 'best-effort' will choose 'native' mode for veth interfaces >>>> and this mode has no issues with TCP. >>> Patch in general looks good, two small comments inline. >> >> Thanks for review. >> >>> >>> The only thing that bothers me is the worse performance of the TAP >>> interface with the new default config. Can we somehow keep the old behavior >>> for TAP interfaces? >> >> Could you check if TCP works over tap interfaces in generic mode? >> For me the point is that correctness is better than performance. >> I also hope that native implementation for tap will be improved >> over time. > > So if I understood your email chain with William correctly TCP is not > working, so I affray correctness is better than performance.
Not exactly. William didn't test the actual TAP interfaces. I tested today with kernel vhost backed virtio-user port and it seems to pass TCP frames in generic mode. The setup is following: tap1 <-- ovs-vswitchd --> tap0 <-- testpmd --> tap2 tap1 -- tap port created by OVS (type=tap) tap0 -- tap port, virtio-user, created by testpmd, opened by OVS with type=afxdp tap2 -- tap port created by testpmd (net_tap) tap1 and tap2 are in their own network namespaces and iperf works on them. TCP works in this scenario regardless of xdp-mode on tap0 interface. However, let's look at the difference before-after this patch: PHY NIC TAP VETH before (skb default) slow by default fast by default broken TCP after (best-effort) fast by default slower by default works For the best speed before you had to configure xdp-mode for physical NICs, after you need to configure xdp-mode for TAPs. No much difference from the configuration side, but with patch applied veths are working. So, I think this change makes sense anyway. We can think about workaround for TAP devices, but we still need to check more cases. For now, I updated the 'Limitations' section with information that generic mode works for TAP devices and might be even faster in some cases. I also reformatted the code for 'unspecified' and 'best-effort' modes as you asked and applied to master. Best regards, Ilya Maximets. _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev