On Tue, Nov 19, 2019 at 05:52:22PM +0100, 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. >
I agree that we should first make sure correctness. I created a simple TCP test using br0, since br0 is a tap device. Unfortunately it does not work... --- ovs-vsctl -- add-br br0 -- set Bridge br0 datapath_type=netdev ip netns add at_ns0 ip link add p0 type veth peer name afxdp-p0 ip link set p0 netns at_ns0 ip link set dev afxdp-p0 up ovs-vsctl add-port br0 afxdp-p0 ovs-vsctl -- set interface afxdp-p0 options:n_rxq=1 type="afxdp" options:xdp-mode=native ip netns exec at_ns0 sh << NS_EXEC_HEREDOC ip addr add "10.1.1.1/24" dev p0 ip link set dev p0 up NS_EXEC_HEREDOC ovs-vsctl -- set interface br0 options:n_rxq=1 type="afxdp" options:xdp-mode=native ip addr add "10.1.1.2/24" dev br0 ip link set dev br0 up # UDP works ok ip netns exec at_ns0 nc -u -l 1234 nc -u 10.1.1.1 1234 <works ok> # TCP still fails ip netns exec at_ns0 nc -l 1234 nc 10.1.1.1 1234 <no reponse> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev