[ovs-dev] [PATCH v2 3/7] dpif-netdev: Add rxq processing cycle counters.

Stokes, Ian ian.stokes at intel.com
Sat Jul 22 14:51:31 UTC 2017


> Add two counters to dp_netdev_rxq which will be used for storing the
> processing cycles of an rxq. Processing cycles will be stored in reference
> to a defined interval. One counter is used for storing cycles during the
> current in progress interval, while the other is used to store the cycles
> of the last fully complete interval.
> 
> cycles_count_intermediate was used to count cycles for a pmd. With some
> small additions we can also use it to count the cycles used for processing
> an rxq.
> 
> Signed-off-by: Kevin Traynor <ktraynor at redhat.com>

Think I flagged this before but OVS doesn't compile cleanly after applying this patch.

lib/dpif-netdev.c:3117:1: error: 'dp_netdev_rxq_get_cycles' defined but not used [-Werror=unused-function]
 dp_netdev_rxq_get_cycles(struct dp_netdev_rxq *rx,
 ^~~~~~~~~~~~~~~~~~~~~~~~
lib/dpif-netdev.c:3109:1: error: 'dp_netdev_rxq_set_cycles' defined but not used [-Werror=unused-function]
 dp_netdev_rxq_set_cycles(struct dp_netdev_rxq *rx,

Consider rolling it into patch 4 of the series to avoid the issue.
> ---
>  lib/dpif-netdev.c | 42 +++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 39 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 0b8a0c8..273db38
> 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -336,4 +336,11 @@ enum pmd_cycles_counter_type {  };
> 
> +enum rxq_cycles_counter_type {
> +    RXQ_CYCLES_PROC_CURR,      /* Cycles spent successfully polling and
> +                                  processing polled packets */
> +    RXQ_CYCLES_PROC_LAST,
> +    RXQ_N_CYCLES
> +};
> +
>  #define XPS_TIMEOUT_MS 500LL
> 
> @@ -347,4 +354,5 @@ struct dp_netdev_rxq {
>                                            particular core. */
>      struct dp_netdev_pmd_thread *pmd;  /* pmd thread that polls this
> queue. */
> +    atomic_ullong cycles[RXQ_N_CYCLES];     /* Processing cycles. */
>  };
Very minor nit but not crazy about the alignment of the comments within the struct above.

> 
> @@ -671,5 +679,11 @@ static void pmd_load_cached_ports(struct
> dp_netdev_pmd_thread *pmd)  static inline void
> dp_netdev_pmd_try_optimize(struct dp_netdev_pmd_thread *pmd);
> -
> +static void
> +dp_netdev_rxq_set_cycles(struct dp_netdev_rxq *rx,
> +                         enum rxq_cycles_counter_type type,
> +                         unsigned long long cycles); static uint64_t
> +dp_netdev_rxq_get_cycles(struct dp_netdev_rxq *rx,
> +                         enum rxq_cycles_counter_type type);
>  static void
>  dpif_netdev_xps_revalidate_pmd(const struct dp_netdev_pmd_thread *pmd, @@
> -3077,4 +3091,5 @@ cycles_count_end(struct dp_netdev_pmd_thread *pmd,
> static inline void  cycles_count_intermediate(struct dp_netdev_pmd_thread
> *pmd,
> +                          struct dp_netdev_rxq *rxq,
>                            enum pmd_cycles_counter_type type)
>      OVS_NO_THREAD_SAFETY_ANALYSIS
> @@ -3085,4 +3100,25 @@ cycles_count_intermediate(struct
> dp_netdev_pmd_thread *pmd,
> 
>      non_atomic_ullong_add(&pmd->cycles.n[type], interval);
> +    if (rxq && (type == PMD_CYCLES_PROCESSING)) {
> +        /* Add to the amount of current processing cycles. */
> +        non_atomic_ullong_add(&rxq->cycles[RXQ_CYCLES_PROC_CURR],
> interval);
> +    }
> +}
> +
> +static void
> +dp_netdev_rxq_set_cycles(struct dp_netdev_rxq *rx,
> +                         enum rxq_cycles_counter_type type,
> +                         unsigned long long cycles) {
> +   atomic_store_relaxed(&rx->cycles[type], cycles); }
> +
> +static uint64_t
> +dp_netdev_rxq_get_cycles(struct dp_netdev_rxq *rx,
> +                         enum rxq_cycles_counter_type type) {
> +    unsigned long long tmp;
> +    atomic_read_relaxed(&rx->cycles[type], &tmp);
> +    return tmp;
>  }
> 
> @@ -3589,5 +3625,5 @@ dpif_netdev_run(struct dpif *dpif)
>                                                     port->rxqs[i].rx,
>                                                     port->port_no);
> -                    cycles_count_intermediate(non_pmd, process_packets ?
> +                    cycles_count_intermediate(non_pmd, NULL,
> process_packets ?
> 
> PMD_CYCLES_PROCESSING
>                                                       : PMD_CYCLES_IDLE);
> @@ -3753,5 +3789,5 @@ reload:
>                  dp_netdev_process_rxq_port(pmd, poll_list[i].rxq->rx,
>                                             poll_list[i].port_no);
> -            cycles_count_intermediate(pmd,
> +            cycles_count_intermediate(pmd, NULL,
>                                        process_packets ?
> PMD_CYCLES_PROCESSING
>                                                        : PMD_CYCLES_IDLE);
> --
> 1.8.3.1



More information about the dev mailing list