On 25.11.2019 12:23, Ilya Maximets wrote:
> On 24.11.2019 21:38, David Marchand wrote:
>> On Fri, Nov 22, 2019 at 3:04 PM Ilya Maximets <i.maxim...@ovn.org> wrote:
>>>>>> Rather than exclude a set of flags, I would touch/copy only the flags
>>>>>> that OVS uses/understands.
>>>>>>
>>>>>> When OVS uses a DPDK flag, it has an associated API and meaning wrt
>>>>>> the rte_mbuf and the data.
>>>>>> - when the flags are reset in OVS, that's because something has been
>>>>>> done to the data (and the checksums and the rss hash must be
>>>>>> reevaluated),
>>>>>> - when a buffer is copied, OVS copies the data and the context that
>>>>>> matters to OVS,
>>>>>>
>>>>>> Anything else should be discarded when copying to a new dp-packet.
>>>>>
>>>>> Yes, that was the first version I wanted to implement, i.e. to collect
>>>>> all the flags that OVS really uses and clear/copy only these flags.
>>>>>
>>>>> But then I started to think about 'ring' ports and that we might send
>>>>> mbufs with incorrect flags set after the packet modification to the
>>>>> external application.  This doesn't sound good.  Because if OVS doesn't
>>>>> use them doesn't mean that other applications doesn't.  So, I've end up
>>>>> with the current logic with clearing everything except the memory layout
>>>>> flags.
>>>>>
>>>>> Does it make sense?  What do you think?
>>>>
>>>> Before sending a packet through a dpdk ring, OVS will touch the data
>>>> and update the relevant flags as far as it is concerned.
>>>>
>>>> The application can read/touch those mbuf flags as long as it complies
>>>> with the DPDK APIs, this concerns both the flags that OVS is aware of,
>>>> and the rest.
>>>> So when getting this mbuf back, the flags should be valid.
>>>>
>>>> After this, OVS can do what it wants on the packet, it will only touch
>>>> the flags it understands.
>>>>
>>>> What am I missing?
>>>
>>> I agree that OVS itself will work OK by only considering flags it
>>> really uses.  I'm concerned about the second application that receives
>>> mbuf from the OVS via ring port.  For example, I see that ixgbe driver
>>> almost unconditionally parses vlans and sets PKT_RX_VLAN along with
>>> mbuf->vlan_tci.  If OVS will not clear this flag while sending to
>>
>> - Well, as I said, if OVS touches the data (pops a vlan), it must
>> update the flags (PKT_RX_VLAN).
> 
> I don't think that DPDK API requires that anyhow.  Otherwise, DPDK

s/Otherwise/Contrariwise/

> must ensure that RX flags are valid after receiving mbuf from the
> DPDK port, but that is not true for ring pmd.
> 
>> This is overkill if the mbuf does not leave OVS, so it could be
>> cleared unconditionally before jumping in the ring.
> 
> That is unclear why we should act differently for ring ports if we
> could just clear everything always and there is already generic
> API for that (dp_packet_reset_offload).
> 
>> - What kind of applications can read those rings?
>> Are those dpdk secondary applications?
> 
> I think so.
> 
>> Asking, since we know that the multiprocess stuff is not really that
>> robust and/or usable with OVS.
> 
> I had an intention to deprecate ring ports in OVS, firstly because of
> the poor level of support and testing,  but I'm not sure if anyone uses
> them or not.  I could prepare the deprecation patch to collect some
> opinions.
> 
> BTW, I'm not sure if I ever used ring ports in OVS, maybe once for ivshmem.
> And I'm not sure if anyone tests them any regularly (this is highly
> unlikely since ring tests are not included even in VSPERF).
> 
> Best regards, Ilya Maximets.
> 
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to