ethdev: add pause frame counters for em/igb/ixgbe
Add into the `rte_eth_stats` data structure 4 (64-bit) counters of XOFF/XON pause frames received and sent on a given port. Update em, igb, and ixgbe drivers to return the value of the 4 XOFF/XON counters through the `rte_eth_stats_get` function exported by the DPDK API. Display the value of the 4 XOFF/XON counters in the `testpmd` application. Signed-off-by: Ivan Boule <ivan.boule@6wind.com> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
This commit is contained in:
parent
7238e63bce
commit
e659b6b439
@ -166,6 +166,14 @@ nic_stats_display(portid_t port_id)
|
||||
}
|
||||
}
|
||||
|
||||
/* Display statistics of XON/XOFF pause frames, if any. */
|
||||
if ((stats.tx_pause_xon | stats.rx_pause_xon |
|
||||
stats.tx_pause_xoff | stats.rx_pause_xoff) > 0) {
|
||||
printf(" RX-XOFF: %-10"PRIu64" RX-XON: %-10"PRIu64"\n",
|
||||
stats.rx_pause_xoff, stats.rx_pause_xon);
|
||||
printf(" TX-XOFF: %-10"PRIu64" TX-XON: %-10"PRIu64"\n",
|
||||
stats.tx_pause_xoff, stats.tx_pause_xon);
|
||||
}
|
||||
printf(" %s############################%s\n",
|
||||
nic_stats_border, nic_stats_border);
|
||||
}
|
||||
|
@ -759,6 +759,16 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats)
|
||||
if (stats->rx_nombuf > 0)
|
||||
printf(" RX-nombufs:%14"PRIu64"\n", stats->rx_nombuf);
|
||||
}
|
||||
|
||||
/* Display statistics of XON/XOFF pause frames, if any. */
|
||||
if ((stats->tx_pause_xon | stats->rx_pause_xon |
|
||||
stats->tx_pause_xoff | stats->rx_pause_xoff) > 0) {
|
||||
printf(" RX-XOFF: %-14"PRIu64" RX-XON: %-14"PRIu64"\n",
|
||||
stats->rx_pause_xoff, stats->rx_pause_xon);
|
||||
printf(" TX-XOFF: %-14"PRIu64" TX-XON: %-14"PRIu64"\n",
|
||||
stats->tx_pause_xoff, stats->tx_pause_xon);
|
||||
}
|
||||
|
||||
#ifdef RTE_TEST_PMD_RECORD_BURST_STATS
|
||||
if (port->rx_stream)
|
||||
pkt_burst_stats_display("RX",
|
||||
|
@ -192,6 +192,10 @@ struct rte_eth_stats {
|
||||
uint64_t rx_nombuf; /**< Total number of RX mbuf allocation failures. */
|
||||
uint64_t fdirmatch; /**< Total number of RX packets matching a filter. */
|
||||
uint64_t fdirmiss; /**< Total number of RX packets not matching any filter. */
|
||||
uint64_t tx_pause_xon; /**< Total nb. of XON pause frame sent. */
|
||||
uint64_t rx_pause_xon; /**< Total nb. of XON pause frame received. */
|
||||
uint64_t tx_pause_xoff; /**< Total nb. of XOFF pause frame sent. */
|
||||
uint64_t rx_pause_xoff; /**< Total nb. of XOFF pause frame received. */
|
||||
uint64_t q_ipackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
|
||||
/**< Total number of queue RX packets. */
|
||||
uint64_t q_opackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
|
||||
|
@ -802,6 +802,12 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
|
||||
rte_stats->opackets = stats->gptc;
|
||||
rte_stats->ibytes = stats->gorc;
|
||||
rte_stats->obytes = stats->gotc;
|
||||
|
||||
/* XON/XOFF pause frames stats registers */
|
||||
rte_stats->tx_pause_xon = stats->xontxc;
|
||||
rte_stats->rx_pause_xon = stats->xonrxc;
|
||||
rte_stats->tx_pause_xoff = stats->xofftxc;
|
||||
rte_stats->rx_pause_xoff = stats->xoffrxc;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1023,6 +1023,12 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
|
||||
/* Tx Errors */
|
||||
rte_stats->oerrors = stats->ecol + stats->latecol;
|
||||
|
||||
/* XON/XOFF pause frames */
|
||||
rte_stats->tx_pause_xon = stats->xontxc;
|
||||
rte_stats->rx_pause_xon = stats->xonrxc;
|
||||
rte_stats->tx_pause_xoff = stats->xofftxc;
|
||||
rte_stats->rx_pause_xoff = stats->xoffrxc;
|
||||
|
||||
rte_stats->ipackets = stats->gprc;
|
||||
rte_stats->opackets = stats->gptc;
|
||||
rte_stats->ibytes = stats->gorc;
|
||||
|
@ -1607,6 +1607,12 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
|
||||
stats->oerrors = 0;
|
||||
|
||||
/* XON/XOFF pause frames */
|
||||
stats->tx_pause_xon = hw_stats->lxontxc;
|
||||
stats->rx_pause_xon = hw_stats->lxonrxc;
|
||||
stats->tx_pause_xoff = hw_stats->lxofftxc;
|
||||
stats->rx_pause_xoff = hw_stats->lxoffrxc;
|
||||
|
||||
/* Flow Director Stats registers */
|
||||
hw_stats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH);
|
||||
hw_stats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS);
|
||||
|
Loading…
x
Reference in New Issue
Block a user