On Wed, Mar 2, 2022 at 11:32 AM Kevin Traynor <[email protected]> wrote:
>
> Hi Mike, thanks for reviewing,
>
> On 02/03/2022 15:41, Mike Pattrick wrote:
> > On Tue, Mar 1, 2022 at 12:25 PM Kevin Traynor <[email protected]> wrote:
> >>
> >> There are currently some checks for cross-numa polling cases to
> >> ensure that they won't effect the accuracy of the PMD ALB.
> >>
> >> If an rxq is pinned to a pmd core by the user it will not be
> >> reassigned by OVS, so even if it is non-local numa polled it
> >> will not impact PMD ALB accuracy.
> >>
> >> To establish this, a check was made on whether the pmd core was
> >> isolated or not. However, since other_config:pmd-rxq-isolate was
> >> introduced, rxqs may be pinned but the pmd core not isolated.
> >>
> >> It means that by setting pmd-rxq-isolate=false and doing non-local
> >> numa pinning, PMD ALB may not run where it should.
> >>
> >> If the core is isolated we can skip individual rxq checks but if not,
> >> we should check the individual rxqs for pinning before we disallow
> >> PMD ALB.
> >>
> >> Fixes: 6193e03267c1 ("dpif-netdev: Allow pin rxq and non-isolate PMD.")
> >>
> >> Signed-off-by: Kevin Traynor <[email protected]>
> >> ---
> >> lib/dpif-netdev.c | 5 ++++-
> >> 1 file changed, 4 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> >> index 9ae488d6e..9df41e0b6 100644
> >> --- a/lib/dpif-netdev.c
> >> +++ b/lib/dpif-netdev.c
> >> @@ -5697,9 +5697,12 @@ sched_numa_list_cross_numa_polling(struct
> >> sched_numa_list *numa_list)
> >>
> >> sched_pmd = &numa->pmds[i];
> >> + if (sched_pmd->isolated) {
> >> + continue;
> >> + }
> >> /* For each rxq. */
> >> for (unsigned k = 0; k < sched_pmd->n_rxq; k++) {
> >> struct dp_netdev_rxq *rxq = sched_pmd->rxqs[k];
> >>
> >> - if (!sched_pmd->isolated &&
> >> + if (rxq->core_id == OVS_CORE_UNSPEC &&
> >
> > Should this be an ||? Is there a case where core_id is set but cross numa?
> >
>
> yes, that case is possible. The options are,
>
> core_id == OVS_CORE_UNSPEC == rxq non-pinned
> core_id != OVS_CORE_UNSPEC == rxq pinned
>
> pmd core numa == rxq numa == rxq local numa polled
> pmd core numa != rxq numa == rxq non-local numa polled
>
> The function wants to find if there are any rxqs that are 'non-pinned
> AND non-local numa polled'.
>
> That is part of checks that indicate the rxq may get polled by a pmd
> core from a different numa after reassignment, so (for now anyway) we
> don't want proceed with the dry-run as the estimations about cycles
> required to process pkts from that rxq may be inaccurate.
>
> I can add some comments in the function to make it clearer, as it's not
> the most intuitive. wdyt?
Thanks for the explanation, now it makes more sense. I think this
function is a good candidate for a comment; what you've written here
makes it very clear, but that explanation is not so clear from the
code.
-M
>
> Kevin.
>
> >> rxq->pmd->numa_id !=
> >> netdev_get_numa_id(rxq->port->netdev)) {
> >> --
> >> 2.34.1
> >>
> >> _______________________________________________
> >> dev mailing list
> >> [email protected]
> >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >>
> >
> > Cheers,
> > M
> >
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev