Skip to content

Commit b848bbf

Browse files
author
Mamatha Inamdar
committed
ibmvnic: Add stat for tx direct vs tx batched
JIRA: https://issues.redhat.com/browse/RHEL-104119 Conflicts: Formt fix commit 2ee73c5 Author: Nick Child <nnac123@linux.ibm.com> Date: Tue Oct 1 11:35:31 2024 -0500 ibmvnic: Add stat for tx direct vs tx batched 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> Signed-off-by: Mamatha Inamdar <minamdar@redhat.com>
1 parent 2c415ad commit b848bbf

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

drivers/net/ethernet/ibm/ibmvnic.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2105,7 +2105,7 @@ static void ibmvnic_tx_scrq_clean_buffer(struct ibmvnic_adapter *adapter,
21052105
tx_buff = &tx_pool->tx_buff[index];
21062106
adapter->netdev->stats.tx_packets--;
21072107
adapter->netdev->stats.tx_bytes -= tx_buff->skb->len;
2108-
adapter->tx_stats_buffers[queue_num].packets--;
2108+
adapter->tx_stats_buffers[queue_num].batched_packets--;
21092109
adapter->tx_stats_buffers[queue_num].bytes -=
21102110
tx_buff->skb->len;
21112111
dev_kfree_skb_any(tx_buff->skb);
@@ -2196,7 +2196,8 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
21962196
unsigned int tx_map_failed = 0;
21972197
union sub_crq indir_arr[16];
21982198
unsigned int tx_dropped = 0;
2199-
unsigned int tx_packets = 0;
2199+
unsigned int tx_dpackets = 0;
2200+
unsigned int tx_bpackets = 0;
22002201
unsigned int tx_bytes = 0;
22012202
dma_addr_t data_dma_addr;
22022203
struct netdev_queue *txq;
@@ -2370,6 +2371,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
23702371
if (lpar_rc != H_SUCCESS)
23712372
goto tx_err;
23722373

2374+
tx_dpackets++;
23732375
goto early_exit;
23742376
}
23752377

@@ -2397,6 +2399,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
23972399
if (lpar_rc != H_SUCCESS)
23982400
goto tx_err;
23992401
}
2402+
tx_bpackets++;
24002403

24012404
early_exit:
24022405
if (atomic_add_return(num_entries, &tx_scrq->used)
@@ -2405,7 +2408,6 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
24052408
netif_stop_subqueue(netdev, queue_num);
24062409
}
24072410

2408-
tx_packets++;
24092411
tx_bytes += skblen;
24102412
txq_trans_cond_update(txq);
24112413
ret = NETDEV_TX_OK;
@@ -2435,10 +2437,11 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
24352437
rcu_read_unlock();
24362438
netdev->stats.tx_dropped += tx_dropped;
24372439
netdev->stats.tx_bytes += tx_bytes;
2438-
netdev->stats.tx_packets += tx_packets;
2440+
netdev->stats.tx_packets += tx_bpackets + tx_dpackets;
24392441
adapter->tx_send_failed += tx_send_failed;
24402442
adapter->tx_map_failed += tx_map_failed;
2441-
adapter->tx_stats_buffers[queue_num].packets += tx_packets;
2443+
adapter->tx_stats_buffers[queue_num].batched_packets += tx_bpackets;
2444+
adapter->tx_stats_buffers[queue_num].direct_packets += tx_dpackets;
24422445
adapter->tx_stats_buffers[queue_num].bytes += tx_bytes;
24432446
adapter->tx_stats_buffers[queue_num].dropped_packets += tx_dropped;
24442447

@@ -3627,7 +3630,10 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
36273630
memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
36283631

36293632
for (i = 0; i < adapter->req_tx_queues; i++) {
3630-
snprintf(data, ETH_GSTRING_LEN, "tx%d_packets", i);
3633+
snprintf(data, ETH_GSTRING_LEN, "tx%d_batched_packets", i);
3634+
data += ETH_GSTRING_LEN;
3635+
3636+
snprintf(data, ETH_GSTRING_LEN, "tx%d_direct_packets", i);
36313637
data += ETH_GSTRING_LEN;
36323638

36333639
snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
@@ -3705,7 +3711,9 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
37053711
(adapter, ibmvnic_stats[i].offset));
37063712

37073713
for (j = 0; j < adapter->req_tx_queues; j++) {
3708-
data[i] = adapter->tx_stats_buffers[j].packets;
3714+
data[i] = adapter->tx_stats_buffers[j].batched_packets;
3715+
i++;
3716+
data[i] = adapter->tx_stats_buffers[j].direct_packets;
37093717
i++;
37103718
data[i] = adapter->tx_stats_buffers[j].bytes;
37113719
i++;

drivers/net/ethernet/ibm/ibmvnic.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ struct ibmvnic_statistics {
177177

178178
#define NUM_TX_STATS 3
179179
struct ibmvnic_tx_queue_stats {
180-
u64 packets;
180+
u64 batched_packets;
181+
u64 direct_packets;
181182
u64 bytes;
182183
u64 dropped_packets;
183184
};

0 commit comments

Comments
 (0)