On Mon, Feb 24, 2020 at 5:31 PM William Tu <[email protected]> wrote:
>
> On Mon, Feb 24, 2020 at 2:47 AM Ilya Maximets <[email protected]> wrote:
> >
> > On 2/21/20 9:24 PM, William Tu wrote:
> > > The patch adds a new option 'use-intr' to enable afxdp interrupt
> > > mode.  At receive path, add a poll() syscall so that when there
> > > is no packet arrived, the pmd thread will be blocked and this
> > > saves some CPU time for other processes. This avoids burning the
> > > CPU to always 100% when there is no traffic. Disabled by default.
> >
> > Sleeping inside the PMD thread is not a good idea in general.
> > If one port doesn't have packets this doesn't mean that other
> > ports are idle too.  With this patch, PMD thread will probably
> > sleep for 1 second for each rxq without packets?  Am I right?
>
> Timeout will be 1 millisecond.
> >
> > Also, sleeping while not in a quiescent state will produce
> > additional issues will too late rcu calls and stalls of other
> > threads waiting on rcu synchronization.
> >
> > I also spotted that you're entering quiescent state at some
> > point, but who will end this state?  PMD thread will continue
> > working in a quiescent state and will probably crash while trying
> > to use rcu-protected data structures like flow tables.
>
> Right, I should also end the quiescent state somewhere.
>
> >
> > IMHO, for this case you just need to create a non-pmd version
> > of netdev-afxdp with rxq_wait() implemented.  These ports
> > will be handled by the main thread without consuming extra CPU
> > resources.
> >
> Hi Ilya,
>
> Thanks for your feedback.
> I will work on the idea of setting to non-pmd version.
>

Hi Ilya,

I have two approaches to this non-pmd versions. I'm thinking about
which directions to go.

1) Dynamically setting .is_pmd to true/false.
So users can use
ovs-vsctl -- set int eth0 options:use-intr=true/false
The datapath will have to reconfigure the pmd to queue assignment.
Need to maintain per afxdp netdev's is_pmd value (some netdev might
set to true, some might be false), now the is_pmd is per-netdev_class.
I think this is pretty complicated changes.

2) Another solution is to statically create another netdev_class, with
.name = "afxdp-nonpmd",
.is_pmd = false,
I think this is much easier.

What do you think?
William
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to