ixgbe: add extended statistic strings

Added and updated statistic strings as used by xstats_get(),
exposed extended queue statistics.

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: Maryam Tahhan <maryam.tahhan@intel.com>
This commit is contained in:
Harry van Haaren 2015-11-02 10:19:03 +00:00 committed by Thomas Monjalon
parent c7e7256056
commit 4c46f55173

View File

@ -529,33 +529,95 @@ struct rte_ixgbe_xstats_name_off {
};
static const struct rte_ixgbe_xstats_name_off rte_ixgbe_stats_strings[] = {
{"rx_illegal_byte_err", offsetof(struct ixgbe_hw_stats, errbc)},
{"rx_len_err", offsetof(struct ixgbe_hw_stats, rlec)},
{"rx_undersize_count", offsetof(struct ixgbe_hw_stats, ruc)},
{"rx_oversize_count", offsetof(struct ixgbe_hw_stats, roc)},
{"rx_fragment_count", offsetof(struct ixgbe_hw_stats, rfc)},
{"rx_jabber_count", offsetof(struct ixgbe_hw_stats, rjc)},
{"l3_l4_xsum_error", offsetof(struct ixgbe_hw_stats, xec)},
{"mac_local_fault", offsetof(struct ixgbe_hw_stats, mlfc)},
{"mac_remote_fault", offsetof(struct ixgbe_hw_stats, mrfc)},
{"mac_short_pkt_discard", offsetof(struct ixgbe_hw_stats, mspdc)},
{"fccrc_error", offsetof(struct ixgbe_hw_stats, fccrc)},
{"fcoe_drop", offsetof(struct ixgbe_hw_stats, fcoerpdc)},
{"fc_last_error", offsetof(struct ixgbe_hw_stats, fclast)},
{"rx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bprc)},
{"rx_phy_multicast_packets", offsetof(struct ixgbe_hw_stats, mprc)},
{"mgmt_pkts_dropped", offsetof(struct ixgbe_hw_stats, mngpdc)},
{"rx_crc_errors", offsetof(struct ixgbe_hw_stats, crcerrs)},
{"fdir_match", offsetof(struct ixgbe_hw_stats, fdirmatch)},
{"fdir_miss", offsetof(struct ixgbe_hw_stats, fdirmiss)},
{"tx_flow_control_xon", offsetof(struct ixgbe_hw_stats, lxontxc)},
{"rx_flow_control_xon", offsetof(struct ixgbe_hw_stats, lxonrxc)},
{"tx_flow_control_xoff", offsetof(struct ixgbe_hw_stats, lxofftxc)},
{"rx_flow_control_xoff", offsetof(struct ixgbe_hw_stats, lxoffrxc)},
{"rx_illegal_byte_errors", offsetof(struct ixgbe_hw_stats, illerrc)},
{"rx_error_bytes", offsetof(struct ixgbe_hw_stats, errbc)},
{"mac_local_errors", offsetof(struct ixgbe_hw_stats, mlfc)},
{"mac_remote_errors", offsetof(struct ixgbe_hw_stats, mrfc)},
{"rx_length_errors", offsetof(struct ixgbe_hw_stats, rlec)},
{"tx_xon_packets", offsetof(struct ixgbe_hw_stats, lxontxc)},
{"rx_xon_packets", offsetof(struct ixgbe_hw_stats, lxonrxc)},
{"tx_xoff_packets", offsetof(struct ixgbe_hw_stats, lxofftxc)},
{"rx_xoff_packets", offsetof(struct ixgbe_hw_stats, lxoffrxc)},
{"rx_size_64_packets", offsetof(struct ixgbe_hw_stats, prc64)},
{"rx_size_65_to_127_packets", offsetof(struct ixgbe_hw_stats, prc127)},
{"rx_size_128_to_255_packets", offsetof(struct ixgbe_hw_stats, prc255)},
{"rx_size_256_to_511_packets", offsetof(struct ixgbe_hw_stats, prc511)},
{"rx_size_512_to_1023_packets", offsetof(struct ixgbe_hw_stats,
prc1023)},
{"rx_size_1024_to_max_packets", offsetof(struct ixgbe_hw_stats,
prc1522)},
{"rx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bprc)},
{"rx_multicast_packets", offsetof(struct ixgbe_hw_stats, mprc)},
{"rx_fragment_errors", offsetof(struct ixgbe_hw_stats, rfc)},
{"rx_undersize_errors", offsetof(struct ixgbe_hw_stats, ruc)},
{"rx_oversize_errors", offsetof(struct ixgbe_hw_stats, roc)},
{"rx_jabber_errors", offsetof(struct ixgbe_hw_stats, rjc)},
{"rx_management_packets", offsetof(struct ixgbe_hw_stats, mngprc)},
{"rx_management_dropped", offsetof(struct ixgbe_hw_stats, mngpdc)},
{"tx_management_packets", offsetof(struct ixgbe_hw_stats, mngptc)},
{"rx_total_packets", offsetof(struct ixgbe_hw_stats, tpr)},
{"rx_total_bytes", offsetof(struct ixgbe_hw_stats, tor)},
{"tx_total_packets", offsetof(struct ixgbe_hw_stats, tpt)},
{"tx_size_64_packets", offsetof(struct ixgbe_hw_stats, ptc64)},
{"tx_size_65_to_127_packets", offsetof(struct ixgbe_hw_stats, ptc127)},
{"tx_size_128_to_255_packets", offsetof(struct ixgbe_hw_stats, ptc255)},
{"tx_size_256_to_511_packets", offsetof(struct ixgbe_hw_stats, ptc511)},
{"tx_size_512_to_1023_packets", offsetof(struct ixgbe_hw_stats,
ptc1023)},
{"tx_size_1024_to_max_packets", offsetof(struct ixgbe_hw_stats,
ptc1522)},
{"tx_multicast_packets", offsetof(struct ixgbe_hw_stats, mptc)},
{"tx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bptc)},
{"rx_mac_short_packet_dropped", offsetof(struct ixgbe_hw_stats, mspdc)},
{"rx_l3_l4_xsum_error", offsetof(struct ixgbe_hw_stats, xec)},
{"flow_director_added_filters", offsetof(struct ixgbe_hw_stats,
fdirustat_add)},
{"flow_director_removed_filters", offsetof(struct ixgbe_hw_stats,
fdirustat_remove)},
{"flow_director_filter_add_errors", offsetof(struct ixgbe_hw_stats,
fdirfstat_fadd)},
{"flow_director_filter_remove_errors", offsetof(struct ixgbe_hw_stats,
fdirfstat_fremove)},
{"flow_director_matched_filters", offsetof(struct ixgbe_hw_stats,
fdirmatch)},
{"flow_director_missed_filters", offsetof(struct ixgbe_hw_stats,
fdirmiss)},
{"rx_fcoe_crc_errors", offsetof(struct ixgbe_hw_stats, fccrc)},
{"rx_fcoe_dropped", offsetof(struct ixgbe_hw_stats, fcoerpdc)},
{"rx_fcoe_mbuf_allocation_errors", offsetof(struct ixgbe_hw_stats,
fclast)},
{"rx_fcoe_packets", offsetof(struct ixgbe_hw_stats, fcoeprc)},
{"tx_fcoe_packets", offsetof(struct ixgbe_hw_stats, fcoeptc)},
{"rx_fcoe_bytes", offsetof(struct ixgbe_hw_stats, fcoedwrc)},
{"tx_fcoe_bytes", offsetof(struct ixgbe_hw_stats, fcoedwtc)},
{"rx_fcoe_no_direct_data_placement", offsetof(struct ixgbe_hw_stats,
fcoe_noddp)},
{"rx_fcoe_no_direct_data_placement_ext_buff",
offsetof(struct ixgbe_hw_stats, fcoe_noddp_ext_buff)},
{"tx_flow_control_xon_packets", offsetof(struct ixgbe_hw_stats,
lxontxc)},
{"rx_flow_control_xon_packets", offsetof(struct ixgbe_hw_stats,
lxonrxc)},
{"tx_flow_control_xoff_packets", offsetof(struct ixgbe_hw_stats,
lxofftxc)},
{"rx_flow_control_xoff_packets", offsetof(struct ixgbe_hw_stats,
lxoffrxc)},
{"rx_total_missed_packets", offsetof(struct ixgbe_hw_stats, mpctotal)},
};
#define IXGBE_NB_XSTATS (sizeof(rte_ixgbe_stats_strings) / \
sizeof(rte_ixgbe_stats_strings[0]))
#define IXGBE_NB_HW_STATS (sizeof(rte_ixgbe_stats_strings) / \
sizeof(rte_ixgbe_stats_strings[0]))
/* Per-queue statistics */
#define IXBGE_NB_8_PER_Q_STATS (8 * 7)
#define IXBGE_NB_16_PER_Q_STATS (16 * 5)
#define IXGBE_NB_Q_STATS (IXBGE_NB_8_PER_Q_STATS + IXBGE_NB_16_PER_Q_STATS)
#define IXGBE_NB_XSTATS (IXGBE_NB_HW_STATS + IXGBE_NB_Q_STATS)
/**
* Atomically reads the link status information from global
@ -2447,7 +2509,7 @@ ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats *xstats,
total_qprdc = 0;
ixgbe_read_stats_registers(hw, hw_stats, &total_missed_rx, &total_qbrc,
&total_qprc, &total_qprdc);
&total_qprc, &total_qprdc);
/* If this is a reset xstats is NULL, and we have cleared the
* registers by reading them.
@ -2455,12 +2517,91 @@ ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats *xstats,
if (!xstats)
return 0;
/* Extended stats */
for (i = 0; i < IXGBE_NB_XSTATS; i++) {
snprintf(xstats[i].name, sizeof(xstats[i].name),
"%s", rte_ixgbe_stats_strings[i].name);
xstats[i].value = *(uint64_t *)(((char *)hw_stats) +
rte_ixgbe_stats_strings[i].offset);
/* Extended stats from ixgbe_hw_stats */
count = 0;
for (i = 0; i < IXGBE_NB_HW_STATS; i++) {
snprintf(xstats[count].name, sizeof(xstats[count].name), "%s",
rte_ixgbe_stats_strings[i].name);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
rte_ixgbe_stats_strings[i].offset);
count++;
}
/* Per-Q stats, with 8 queues available */
for (i = 0; i < 8; i++) {
snprintf(xstats[count].name, sizeof(xstats[count].name),
"rx_q%u_mbuf_allocation_errors", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, rnbc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"rx_q%u_missed_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, mpc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"rx_q%u_xon_priority_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, pxonrxc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"tx_q%u_xon_priority_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, pxontxc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"rx_q%u_xoff_priority_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, pxoffrxc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"tx_q%u_xoff_priority_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, pxofftxc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"xx_q%u_xon_to_xoff_priority_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, pxon2offc[i]));
count++;
}
for (i = 0; i < 16; i++) {
snprintf(xstats[count].name, sizeof(xstats[count].name),
"rx_q%u_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, qprc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"rx_q%u_bytes", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, qbrc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"tx_q%u_packets", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, qptc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"tx_q%u_bytes", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, qbtc[i]));
count++;
snprintf(xstats[count].name, sizeof(xstats[count].name),
"rx_q%u_dropped", i);
xstats[count].value = *(uint64_t *)(((char *)hw_stats) +
offsetof(struct ixgbe_hw_stats, qprdc[i]));
count++;
}
return count;