mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
ibmvnic: Add stat for tx direct vs tx batched
[ Upstream commit 2ee73c54a615b74d2e7ee6f20844fd3ba63fc485 ] Allow tracking of packets sent with send_subcrq direct vs indirect. `ethtool -S <dev>` will now provide a counter of the number of uses of each xmit method. This metric will be useful in performance debugging. Signed-off-by: Nick Child <nnac123@linux.ibm.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20241001163531.1803152-1-nnac123@linux.ibm.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Stable-dep-of: bdf5d13aa05e ("ibmvnic: Don't reference skb after sending to VIOS") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a6a19d29fb
commit
c9543af809
@@ -2136,7 +2136,7 @@ static void ibmvnic_tx_scrq_clean_buffer(struct ibmvnic_adapter *adapter,
|
|||||||
tx_buff = &tx_pool->tx_buff[index];
|
tx_buff = &tx_pool->tx_buff[index];
|
||||||
adapter->netdev->stats.tx_packets--;
|
adapter->netdev->stats.tx_packets--;
|
||||||
adapter->netdev->stats.tx_bytes -= tx_buff->skb->len;
|
adapter->netdev->stats.tx_bytes -= tx_buff->skb->len;
|
||||||
adapter->tx_stats_buffers[queue_num].packets--;
|
adapter->tx_stats_buffers[queue_num].batched_packets--;
|
||||||
adapter->tx_stats_buffers[queue_num].bytes -=
|
adapter->tx_stats_buffers[queue_num].bytes -=
|
||||||
tx_buff->skb->len;
|
tx_buff->skb->len;
|
||||||
dev_kfree_skb_any(tx_buff->skb);
|
dev_kfree_skb_any(tx_buff->skb);
|
||||||
@@ -2228,7 +2228,8 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
unsigned int tx_map_failed = 0;
|
unsigned int tx_map_failed = 0;
|
||||||
union sub_crq indir_arr[16];
|
union sub_crq indir_arr[16];
|
||||||
unsigned int tx_dropped = 0;
|
unsigned int tx_dropped = 0;
|
||||||
unsigned int tx_packets = 0;
|
unsigned int tx_dpackets = 0;
|
||||||
|
unsigned int tx_bpackets = 0;
|
||||||
unsigned int tx_bytes = 0;
|
unsigned int tx_bytes = 0;
|
||||||
dma_addr_t data_dma_addr;
|
dma_addr_t data_dma_addr;
|
||||||
struct netdev_queue *txq;
|
struct netdev_queue *txq;
|
||||||
@@ -2387,6 +2388,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
if (lpar_rc != H_SUCCESS)
|
if (lpar_rc != H_SUCCESS)
|
||||||
goto tx_err;
|
goto tx_err;
|
||||||
|
|
||||||
|
tx_dpackets++;
|
||||||
goto early_exit;
|
goto early_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2415,6 +2417,8 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
goto tx_err;
|
goto tx_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tx_bpackets++;
|
||||||
|
|
||||||
early_exit:
|
early_exit:
|
||||||
if (atomic_add_return(num_entries, &tx_scrq->used)
|
if (atomic_add_return(num_entries, &tx_scrq->used)
|
||||||
>= adapter->req_tx_entries_per_subcrq) {
|
>= adapter->req_tx_entries_per_subcrq) {
|
||||||
@@ -2422,7 +2426,6 @@ early_exit:
|
|||||||
netif_stop_subqueue(netdev, queue_num);
|
netif_stop_subqueue(netdev, queue_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_packets++;
|
|
||||||
tx_bytes += skb->len;
|
tx_bytes += skb->len;
|
||||||
txq_trans_cond_update(txq);
|
txq_trans_cond_update(txq);
|
||||||
ret = NETDEV_TX_OK;
|
ret = NETDEV_TX_OK;
|
||||||
@@ -2452,10 +2455,11 @@ out:
|
|||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
netdev->stats.tx_dropped += tx_dropped;
|
netdev->stats.tx_dropped += tx_dropped;
|
||||||
netdev->stats.tx_bytes += tx_bytes;
|
netdev->stats.tx_bytes += tx_bytes;
|
||||||
netdev->stats.tx_packets += tx_packets;
|
netdev->stats.tx_packets += tx_bpackets + tx_dpackets;
|
||||||
adapter->tx_send_failed += tx_send_failed;
|
adapter->tx_send_failed += tx_send_failed;
|
||||||
adapter->tx_map_failed += tx_map_failed;
|
adapter->tx_map_failed += tx_map_failed;
|
||||||
adapter->tx_stats_buffers[queue_num].packets += tx_packets;
|
adapter->tx_stats_buffers[queue_num].batched_packets += tx_bpackets;
|
||||||
|
adapter->tx_stats_buffers[queue_num].direct_packets += tx_dpackets;
|
||||||
adapter->tx_stats_buffers[queue_num].bytes += tx_bytes;
|
adapter->tx_stats_buffers[queue_num].bytes += tx_bytes;
|
||||||
adapter->tx_stats_buffers[queue_num].dropped_packets += tx_dropped;
|
adapter->tx_stats_buffers[queue_num].dropped_packets += tx_dropped;
|
||||||
|
|
||||||
@@ -3621,7 +3625,10 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
|
|||||||
memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
|
memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
|
||||||
|
|
||||||
for (i = 0; i < adapter->req_tx_queues; i++) {
|
for (i = 0; i < adapter->req_tx_queues; i++) {
|
||||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_packets", i);
|
snprintf(data, ETH_GSTRING_LEN, "tx%d_batched_packets", i);
|
||||||
|
data += ETH_GSTRING_LEN;
|
||||||
|
|
||||||
|
snprintf(data, ETH_GSTRING_LEN, "tx%d_direct_packets", i);
|
||||||
data += ETH_GSTRING_LEN;
|
data += ETH_GSTRING_LEN;
|
||||||
|
|
||||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
|
snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
|
||||||
@@ -3686,7 +3693,9 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
|
|||||||
(adapter, ibmvnic_stats[i].offset));
|
(adapter, ibmvnic_stats[i].offset));
|
||||||
|
|
||||||
for (j = 0; j < adapter->req_tx_queues; j++) {
|
for (j = 0; j < adapter->req_tx_queues; j++) {
|
||||||
data[i] = adapter->tx_stats_buffers[j].packets;
|
data[i] = adapter->tx_stats_buffers[j].batched_packets;
|
||||||
|
i++;
|
||||||
|
data[i] = adapter->tx_stats_buffers[j].direct_packets;
|
||||||
i++;
|
i++;
|
||||||
data[i] = adapter->tx_stats_buffers[j].bytes;
|
data[i] = adapter->tx_stats_buffers[j].bytes;
|
||||||
i++;
|
i++;
|
||||||
|
|||||||
@@ -213,7 +213,8 @@ struct ibmvnic_statistics {
|
|||||||
|
|
||||||
#define NUM_TX_STATS 3
|
#define NUM_TX_STATS 3
|
||||||
struct ibmvnic_tx_queue_stats {
|
struct ibmvnic_tx_queue_stats {
|
||||||
u64 packets;
|
u64 batched_packets;
|
||||||
|
u64 direct_packets;
|
||||||
u64 bytes;
|
u64 bytes;
|
||||||
u64 dropped_packets;
|
u64 dropped_packets;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user