[ovs-dev] [RFC PATCH 1/6] dpif-netdev: Add rxq processing cycle counters.

Kevin Traynor ktraynor at redhat.com
Fri May 5 16:34:18 UTC 2017


Add two counters to dp_netdev_rxq which will be used for storing the
processing cycles of the rxq. Processing cycles will stored in reference
to a defined interval. One counter is used to count cycles during the current
in progress interval, while the other is used to store the cycles of the last
complete interval.

Signed-off-by: Kevin Traynor <ktraynor at redhat.com>
---
 lib/dpif-netdev.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 7352d6f..d2a02af 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -343,4 +343,6 @@ struct dp_netdev_rxq {
                                           particular core. */
     struct dp_netdev_pmd_thread *pmd;  /* pmd thread that will poll this queue. */
+    atomic_ullong cyc_curr;            /* Current pmd interval proc cycles. */
+    atomic_ullong cyc_last;            /* Last pmd interval proc cycles. */
 };
 
@@ -665,4 +667,14 @@ 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_cyc_curr(struct dp_netdev_rxq *rx,
+                           unsigned long long cycles);
+static uint64_t
+dp_netdev_rxq_get_cyc_curr(const struct dp_netdev_rxq *rx);
+static void
+dp_netdev_rxq_set_cyc_last(struct dp_netdev_rxq *rx,
+                                unsigned long long cycles);
+static uint64_t
+dp_netdev_rxq_get_cyc_last(const struct dp_netdev_rxq *rx);
 
 static void
@@ -3046,4 +3058,35 @@ cycles_count_intermediate(struct dp_netdev_pmd_thread *pmd,
 }
 
+static void
+dp_netdev_rxq_set_cyc_curr(struct dp_netdev_rxq *rx,
+                              unsigned long long cycles)
+{
+   atomic_store_relaxed(&rx->cyc_curr, cycles);
+}
+
+static uint64_t
+dp_netdev_rxq_get_cyc_curr(const struct dp_netdev_rxq *rx)
+{
+    unsigned long long tmp;
+    atomic_read_relaxed(&rx->cyc_curr, &tmp);
+    return tmp;
+}
+
+static void
+dp_netdev_rxq_set_cyc_last(struct dp_netdev_rxq *rx,
+                                unsigned long long cycles)
+{
+   atomic_store_relaxed(&rx->cyc_last, cycles);
+}
+
+static uint64_t
+dp_netdev_rxq_get_cyc_last(const struct dp_netdev_rxq *rx)
+{
+    unsigned long long tmp;
+    atomic_read_relaxed(&rx->cyc_last, &tmp);
+    return tmp;
+}
+
+
 static int
 dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
-- 
1.8.3.1



More information about the dev mailing list