Commit 453f8305 authored by Joe Damato's avatar Joe Damato Committed by Tony Nguyen

i40e: Add a stat tracking new RX page allocations

Add a counter for new page allocations in the i40e RX path. This stat is
accessible with ethtool.
Signed-off-by: default avatarJoe Damato <jdamato@fastly.com>
Tested-by: default avatarDave Switzer <david.switzer@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent b3936d27
...@@ -855,6 +855,7 @@ struct i40e_vsi { ...@@ -855,6 +855,7 @@ struct i40e_vsi {
u64 rx_buf_failed; u64 rx_buf_failed;
u64 rx_page_failed; u64 rx_page_failed;
u64 rx_page_reuse; u64 rx_page_reuse;
u64 rx_page_alloc;
/* These are containers of ring pointers, allocated at run-time */ /* These are containers of ring pointers, allocated at run-time */
struct i40e_ring **rx_rings; struct i40e_ring **rx_rings;
......
...@@ -296,6 +296,7 @@ static const struct i40e_stats i40e_gstrings_misc_stats[] = { ...@@ -296,6 +296,7 @@ static const struct i40e_stats i40e_gstrings_misc_stats[] = {
I40E_VSI_STAT("rx_alloc_fail", rx_buf_failed), I40E_VSI_STAT("rx_alloc_fail", rx_buf_failed),
I40E_VSI_STAT("rx_pg_alloc_fail", rx_page_failed), I40E_VSI_STAT("rx_pg_alloc_fail", rx_page_failed),
I40E_VSI_STAT("rx_cache_reuse", rx_page_reuse), I40E_VSI_STAT("rx_cache_reuse", rx_page_reuse),
I40E_VSI_STAT("rx_cache_alloc", rx_page_alloc),
}; };
/* These PF_STATs might look like duplicates of some NETDEV_STATs, /* These PF_STATs might look like duplicates of some NETDEV_STATs,
......
...@@ -773,8 +773,8 @@ void i40e_update_veb_stats(struct i40e_veb *veb) ...@@ -773,8 +773,8 @@ void i40e_update_veb_stats(struct i40e_veb *veb)
**/ **/
static void i40e_update_vsi_stats(struct i40e_vsi *vsi) static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
{ {
u64 rx_page, rx_buf, rx_reuse, rx_alloc;
struct i40e_pf *pf = vsi->back; struct i40e_pf *pf = vsi->back;
u64 rx_page, rx_buf, rx_reuse;
struct rtnl_link_stats64 *ons; struct rtnl_link_stats64 *ons;
struct rtnl_link_stats64 *ns; /* netdev stats */ struct rtnl_link_stats64 *ns; /* netdev stats */
struct i40e_eth_stats *oes; struct i40e_eth_stats *oes;
...@@ -807,6 +807,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -807,6 +807,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
rx_page = 0; rx_page = 0;
rx_buf = 0; rx_buf = 0;
rx_reuse = 0; rx_reuse = 0;
rx_alloc = 0;
rcu_read_lock(); rcu_read_lock();
for (q = 0; q < vsi->num_queue_pairs; q++) { for (q = 0; q < vsi->num_queue_pairs; q++) {
/* locate Tx ring */ /* locate Tx ring */
...@@ -841,6 +842,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -841,6 +842,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
rx_buf += p->rx_stats.alloc_buff_failed; rx_buf += p->rx_stats.alloc_buff_failed;
rx_page += p->rx_stats.alloc_page_failed; rx_page += p->rx_stats.alloc_page_failed;
rx_reuse += p->rx_stats.page_reuse_count; rx_reuse += p->rx_stats.page_reuse_count;
rx_alloc += p->rx_stats.page_alloc_count;
if (i40e_enabled_xdp_vsi(vsi)) { if (i40e_enabled_xdp_vsi(vsi)) {
/* locate XDP ring */ /* locate XDP ring */
...@@ -869,6 +871,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -869,6 +871,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
vsi->rx_page_failed = rx_page; vsi->rx_page_failed = rx_page;
vsi->rx_buf_failed = rx_buf; vsi->rx_buf_failed = rx_buf;
vsi->rx_page_reuse = rx_reuse; vsi->rx_page_reuse = rx_reuse;
vsi->rx_page_alloc = rx_alloc;
ns->rx_packets = rx_p; ns->rx_packets = rx_p;
ns->rx_bytes = rx_b; ns->rx_bytes = rx_b;
......
...@@ -1673,6 +1673,8 @@ static bool i40e_alloc_mapped_page(struct i40e_ring *rx_ring, ...@@ -1673,6 +1673,8 @@ static bool i40e_alloc_mapped_page(struct i40e_ring *rx_ring,
return false; return false;
} }
rx_ring->rx_stats.page_alloc_count++;
/* map page for use */ /* map page for use */
dma = dma_map_page_attrs(rx_ring->dev, page, 0, dma = dma_map_page_attrs(rx_ring->dev, page, 0,
i40e_rx_pg_size(rx_ring), i40e_rx_pg_size(rx_ring),
......
...@@ -298,6 +298,7 @@ struct i40e_rx_queue_stats { ...@@ -298,6 +298,7 @@ struct i40e_rx_queue_stats {
u64 alloc_page_failed; u64 alloc_page_failed;
u64 alloc_buff_failed; u64 alloc_buff_failed;
u64 page_reuse_count; u64 page_reuse_count;
u64 page_alloc_count;
}; };
enum i40e_ring_state_t { enum i40e_ring_state_t {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment