examples/kni: improve zeroing statistics
authorDan Gora <dg@adax.com>
Wed, 24 Oct 2018 22:26:31 +0000 (19:26 -0300)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 26 Oct 2018 17:46:29 +0000 (19:46 +0200)
The worker threads incrementing the rx/tx_packets race with the signal
handler from the main thread zeroing the entire statistics structure.
This can cause the statistics to fail to be zeroed, even when there
is no traffic on those interfaces.

Improve zeroing the statistics by only incrementing rx/tx_packets
in worker threads by a non-zero amount.  This limits the race to the
periods in which traffic is actually being received or transmitted.

Signed-off-by: Dan Gora <dg@adax.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
examples/kni/main.c

index 0e3b2a2..e37b1ad 100644 (file)
@@ -223,7 +223,8 @@ kni_ingress(struct kni_port_params *p)
                }
                /* Burst tx to kni */
                num = rte_kni_tx_burst(p->kni[i], pkts_burst, nb_rx);
-               kni_stats[port_id].rx_packets += num;
+               if (num)
+                       kni_stats[port_id].rx_packets += num;
 
                rte_kni_handle_request(p->kni[i]);
                if (unlikely(num < nb_rx)) {
@@ -260,7 +261,8 @@ kni_egress(struct kni_port_params *p)
                }
                /* Burst tx to eth */
                nb_tx = rte_eth_tx_burst(port_id, 0, pkts_burst, (uint16_t)num);
-               kni_stats[port_id].tx_packets += nb_tx;
+               if (nb_tx)
+                       kni_stats[port_id].tx_packets += nb_tx;
                if (unlikely(nb_tx < num)) {
                        /* Free mbufs not tx to NIC */
                        kni_burst_free_mbufs(&pkts_burst[nb_tx], num - nb_tx);