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
