sched: keep track of RED drops
authorStephen Hemminger <stephen@networkplumber.org>
Sun, 29 Nov 2015 18:46:47 +0000 (10:46 -0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Sun, 13 Mar 2016 22:28:00 +0000 (23:28 +0100)
Add new statistic to keep track of drops due to RED.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
doc/guides/rel_notes/deprecation.rst
lib/librte_sched/rte_sched.c
lib/librte_sched/rte_sched.h

index a2017f1..252a096 100644 (file)
@@ -33,6 +33,3 @@ Deprecation Notices
 * ABI changes are planned for adding four new flow types. This impacts
   RTE_ETH_FLOW_MAX. The release 2.2 does not contain these ABI changes,
   but release 2.3 will.
-
-* The scheduler statistics structure will change to allow keeping track of
-  RED actions.
index 513e893..89007ad 100644 (file)
@@ -1076,7 +1076,9 @@ rte_sched_port_update_subport_stats(struct rte_sched_port *port, uint32_t qindex
 }
 
 static inline void
-rte_sched_port_update_subport_stats_on_drop(struct rte_sched_port *port, uint32_t qindex, struct rte_mbuf *pkt)
+rte_sched_port_update_subport_stats_on_drop(struct rte_sched_port *port,
+                                           uint32_t qindex,
+                                           struct rte_mbuf *pkt, uint32_t red)
 {
        struct rte_sched_subport *s = port->subport + (qindex / rte_sched_port_queues_per_subport(port));
        uint32_t tc_index = (qindex >> 2) & 0x3;
@@ -1084,6 +1086,9 @@ rte_sched_port_update_subport_stats_on_drop(struct rte_sched_port *port, uint32_
 
        s->stats.n_pkts_tc_dropped[tc_index] += 1;
        s->stats.n_bytes_tc_dropped[tc_index] += pkt_len;
+#ifdef RTE_SCHED_RED
+       s->stats.n_pkts_red_dropped[tc_index] += red;
+#endif
 }
 
 static inline void
@@ -1097,13 +1102,18 @@ rte_sched_port_update_queue_stats(struct rte_sched_port *port, uint32_t qindex,
 }
 
 static inline void
-rte_sched_port_update_queue_stats_on_drop(struct rte_sched_port *port, uint32_t qindex, struct rte_mbuf *pkt)
+rte_sched_port_update_queue_stats_on_drop(struct rte_sched_port *port,
+                                         uint32_t qindex,
+                                         struct rte_mbuf *pkt, uint32_t red)
 {
        struct rte_sched_queue_extra *qe = port->queue_extra + qindex;
        uint32_t pkt_len = pkt->pkt_len;
 
        qe->stats.n_pkts_dropped += 1;
        qe->stats.n_bytes_dropped += pkt_len;
+#ifdef RTE_SCHED_RED
+       qe->stats.n_pkts_red_dropped += red;
+#endif
 }
 
 #endif /* RTE_SCHED_COLLECT_STATS */
@@ -1234,8 +1244,10 @@ rte_sched_port_enqueue_qwa(struct rte_sched_port *port, uint32_t qindex,
                     (qlen >= qsize))) {
                rte_pktmbuf_free(pkt);
 #ifdef RTE_SCHED_COLLECT_STATS
-               rte_sched_port_update_subport_stats_on_drop(port, qindex, pkt);
-               rte_sched_port_update_queue_stats_on_drop(port, qindex, pkt);
+               rte_sched_port_update_subport_stats_on_drop(port, qindex, pkt,
+                                                           qlen < qsize);
+               rte_sched_port_update_queue_stats_on_drop(port, qindex, pkt,
+                                                         qlen < qsize);
 #endif
                return 0;
        }
index c0f4ad3..e9c2817 100644 (file)
@@ -162,6 +162,11 @@ struct rte_sched_subport_stats {
        /**< Number of bytes successfully written for each traffic class */
        uint32_t n_bytes_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
        /**< Number of bytes dropped for each traffic class */
+
+#ifdef RTE_SCHED_RED
+       uint32_t n_pkts_red_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE];
+       /**< Number of packets dropped by red */
+#endif
 };
 
 /*
@@ -196,6 +201,9 @@ struct rte_sched_queue_stats {
        /* Packets */
        uint32_t n_pkts;                 /**< Packets successfully written */
        uint32_t n_pkts_dropped;         /**< Packets dropped */
+#ifdef RTE_SCHED_RED
+       uint32_t n_pkts_red_dropped;     /**< Packets dropped by RED */
+#endif
 
        /* Bytes */
        uint32_t n_bytes;                /**< Bytes successfully written */