On 19.11.2019 21:09, William Tu wrote: > On Tue, Nov 19, 2019 at 08:51:19PM +0100, Ilya Maximets wrote: >> On 19.11.2019 20:45, William Tu wrote: >>> 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 >> >> I'm not sure if this is a valid thing to do. >> After changing the netdev type this device is no linger TAP device. >> Now it's a permanent tap device that detached from any application >> and opened by af_xdp from the other side. >> >> BTW, changing the type of "internal" port doesn't sound safe. > > I see, thanks. > > Then if we don't change br0 to afxdp type, the TCP test > below still fails, which I think should pass because > we are using native mode for veth now. > > I think even native mode doesn't work for TCP?
Disable Tx offloading on both p0 and br0 and it will work. > > --William >> >>> 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