rte_sched: keep track of RED drops
A message that is not in the archive (sent off-list or not yet received): 20141209083851.6c491e92@urahara
PATCH 2/4 rte_sched: keep track of RED drops
Add new statistic to keep track of drops due to RED.
Signed-off-by Stephen Hemminger <[email protected]>
lib/librte_sched/rte_sched.c +17 -4
@@ -1028,7 +1028,9 @@ rte_sched_port_update_subport_stats(stru }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 ;
@@ -1036,6 +1038,9 @@ rte_sched_port_update_subport_stats_on_d 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
@@ -1206,12 +1211,20 @@ rte_sched_port_enqueue_qwa(struct rte_sc qlen = q->qw - q->qr;/* Drop the packet (and update drop stats) when queue is full */ -if (unlikely (rte_sched_port_red_drop (port, pkt, qindex, qlen) || (qlen >= qsize))) { +if (unlikely (rte_sched_port_red_drop (port, pkt, qindex, qlen))) { +#ifdef RTE_SCHED_COLLECT_STATS +rte_sched_port_update_subport_stats_on_drop (port, qindex, pkt,1 ); +rte_sched_port_update_queue_stats_on_drop (port, qindex, pkt,1 ); +#endif rte_pktmbuf_free (pkt); + } + +if (qlen >= qsize) {#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,0 ); +rte_sched_port_update_queue_stats_on_drop (port, qindex, pkt,0 );#endif +rte_pktmbuf_free (pkt);return 0 ; }
lib/librte_sched/rte_sched.h +6 -1
@@ -140,6 +140,9 @@ struct rte_sched_subport_stats {subport for each traffic class*/ uint32_t n_bytes_tc_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE ];/**< Number of bytes dropped by the current subport for each traffic class due to subport queues being full or congested */ +#ifdef RTE_SCHED_RED +uint32_t n_pkts_red_dropped[RTE_SCHED_TRAFFIC_CLASSES_PER_PIPE ];/**< Number of packets dropped by red */ +#endif };/** Pipe configuration parameters. The period and credits_per_period parameters are measured
@@ -168,7 +171,9 @@ struct rte_sched_queue_stats {/* Packets */ uint32_t n_pkts;/**< Number of packets successfully written to current queue */ uint32_t n_pkts_dropped;/**< Number of packets dropped due to current queue being full or congested */ - +#ifdef RTE_SCHED_RED +uint32_t n_pkts_red_dropped; +#endif /* Bytes */ uint32_t n_bytes;/**< Number of bytes successfully written to current queue */ uint32_t n_bytes_dropped;/**< Number of bytes dropped due to current queue being full or congested */