On 23/06/2021 16:29, Pai G, Sunil wrote:
> Hey Kevin , 
> 
> Patch looks good to me.
> Builds fine , all test cases here 
> http://patchwork.ozlabs.org/project/openvswitch/patch/[email protected]/
>   pass as well.
> The groups assignment works fine too.
> 
> From vswitchd logs:
> 
> dpif_netdev|INFO|PMD auto load balance load threshold set to 50%
> dpif_netdev|INFO|PMD auto load balance is disabled
> dpif_netdev|INFO|PMD auto load balance improvement threshold set to 5%
> dpif_netdev|INFO|PMD auto load balance is disabled
> dpif_netdev|INFO|PMD auto load balance is enabled interval 1 mins, pmd load 
> threshold 50%, improvement threshold 5%
> dpif_netdev|INFO|Rxq to PMD assignment mode changed to: 'group'.
> dpif_netdev|INFO|Performing pmd to rx queue assignment using group algorithm.
> ...
> ...
> dpif_netdev|DBG|PMD auto load balance performing dry run.
> dpif_netdev|DBG|There's no available (non-isolated) pmd thread on numa node 
> 0. Port 'dpdk1' rx queue 0 will be assigned to a pmd on numa node 1. This may 
> lead to reduced performance.
> dpif_netdev|DBG|Core 26 on numa node 1 assigned port 'dpdk1' rx queue 0. 
> (measured processing cycles 117514888500).
> dpif_netdev|DBG|There's no available (non-isolated) pmd thread on numa node 
> 0. Port 'dpdk1' rx queue 1 will be assigned to a pmd on numa node 1. This may 
> lead to reduced performance.
> dpif_netdev|DBG|Core 27 on numa node 1 assigned port 'dpdk1' rx queue 1. 
> (measured processing cycles 115517336048).
> dpif_netdev|DBG|There's no available (non-isolated) pmd thread on numa node 
> 0. Port 'dpdk0' rx queue 1 will be assigned to a pmd on numa node 1. This may 
> lead to reduced performance.
> dpif_netdev|DBG|Core 27 on numa node 1 assigned port 'dpdk0' rx queue 1. 
> (measured processing cycles 799822228).
> dpif_netdev|DBG|There's no available (non-isolated) pmd thread on numa node 
> 0. Port 'dpdk0' rx queue 0 will be assigned to a pmd on numa node 1. This may 
> lead to reduced performance.
> dpif_netdev|DBG|Core 27 on numa node 1 assigned port 'dpdk0' rx queue 0. 
> (measured processing cycles 539222868).
> dpif_netdev|DBG|There's no available (non-isolated) pmd thread on numa node 
> 0. Port 'dpdk0' rx queue 2 will be assigned to a pmd on numa node 1. This may 
> lead to reduced performance.
> dpif_netdev|DBG|Core 27 on numa node 1 assigned port 'dpdk0' rx queue 2. 
> (measured processing cycles 538244586).
> dpif_netdev|DBG|Current variance 1 Estimated variance 0
> dpif_netdev|DBG|Variance improvement 100%
> dpif_netdev|DBG|PMD load variance improvement threshold 5% is met
> dpif_netdev|INFO|PMD auto load balance dry run. Requesting datapath 
> reconfigure.
> dpif_netdev|INFO|Performing pmd to rx queue assignment using group algorithm.
> 
> 
> 
> Some minor nits inline :
> 
> <snipped>
> 
>> +enum sched_assignment_type {
>> +    SCHED_ROUNDROBIN,
>> +    SCHED_CYCLES, /* Default.*/
>> +    SCHED_GROUP,
>> +    SCHED_MAX
>> +};
>> +
>>  /* Datapath based on the network device interface from netdev.h.
>>   *
>> @@ -367,5 +374,5 @@ struct dp_netdev {
>>      struct ovs_mutex tx_qid_pool_mutex;
>>      /* Use measured cycles for rxq to pmd assignment. */
>> -    bool pmd_rxq_assign_cyc;
>> +    enum sched_assignment_type pmd_rxq_assign_cyc;
> 
> sched_type would be a better name perhaps ?
> 

yes, I agree 'pmd_rxq_assign_cyc' was no longer a good description. I
changed it to 'pmd_rxq_assign_type' while reworking patch1.
'pmd_rxq_sched_type' would be fine too, let me know if you have a strong
preference.

> 
> <snipped>
> 
> 
>> +static struct sched_pmd *
>> +get_lowest_num_rxq_pmd(struct sched_numa *numa) {
>> +    struct sched_pmd *lowest_rxqs_sched_pmd = NULL;
>> +    unsigned lowest_rxqs = UINT_MAX;
> 
> n_lowest_rxqs is a bit more clear perhaps ?
> 

sure, changed to this.

>> +
>> +    /* find the pmd with lowest number of rxqs */
>> +    for (unsigned i = 0; i < numa->n_pmds; i++) {
>> +        struct sched_pmd *sched_pmd;
>> +        unsigned num_rxqs;
>> +
>> +        sched_pmd = &numa->pmds[i];
>> +        num_rxqs = sched_pmd->n_rxq;
>> +        if (sched_pmd->isolated) {
>> +            continue;
>> +        }
>> +
>> +        /* If this current load is higher we can go to the next one */
> 
> Full stop at the end of the comment missing. May be check this once for the 
> entire patch ?
> 

removed this comment as the code it refers to was not needed anymore.

>> +        if (num_rxqs > lowest_rxqs) {
>> +            continue;
>> +        }
>> +       if (num_rxqs < lowest_rxqs) {
>> +           lowest_rxqs = num_rxqs;
>> +           lowest_rxqs_sched_pmd = sched_pmd;
>> +        }
>> +    }
>> +    return lowest_rxqs_sched_pmd;
>> +}
>> +
>> +static struct sched_pmd *
>> +get_lowest_proc_pmd(struct sched_numa *numa) {
>> +    struct sched_pmd *lowest_loaded_sched_pmd = NULL;
>> +    uint64_t lowest_load = UINT64_MAX;
>> +
>> +    /* find the pmd with the lowest load */
>> +    for (unsigned i = 0; i < numa->n_pmds; i++) {
>> +        struct sched_pmd *sched_pmd;
>> +        uint64_t pmd_load;
>> +
>> +        sched_pmd = &numa->pmds[i];
>> +        if (sched_pmd->isolated) {
>> +            continue;
>> +        }
>> +        pmd_load = sched_pmd->pmd_proc_cycles;
>> +        /* If this current load is higher we can go to the next one */
>> +        if (pmd_load > lowest_load) {
>> +            continue;
>> +        }
>> +       if (pmd_load < lowest_load) {
>> +           lowest_load = pmd_load;
>> +           lowest_loaded_sched_pmd = sched_pmd;
>> +        }
>> +    }
>> +    return lowest_loaded_sched_pmd;
>> +}
> 
> get_lowest_proc_pmd and get_lowest_num_rxq_pmd look quite identical.
> I wonder if we could combine them into a single function somehow ?
> 

Goos suggestion, it is neater to combine them, and it makes the function
that calls them neater too because the bool about cycles can be just
passed straight down.

> <snipped>
> 
> 

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to