Skip to content

Commit cfaf5c2

Browse files
committed
feat: Add TX tracepoints as callback functions
1 parent 0c0cd5f commit cfaf5c2

File tree

5 files changed

+57
-13
lines changed

5 files changed

+57
-13
lines changed

drivers/net/mlx5/mlx5_trace.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,26 @@ RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_push,
2323

2424
RTE_TRACE_POINT_REGISTER(rte_pmd_mlx5_trace_tx_complete,
2525
pmd.net.mlx5.tx.complete)
26+
27+
mlx5_tx_push_cb rte_pmd_mlx5_anlab_trace_tx_push_cb = NULL;
28+
mlx5_tx_complete_cb rte_pmd_mlx5_anlab_trace_tx_complete_cb = NULL;
29+
30+
void rte_pmd_mlx5_anlab_trace_set_tx_push(mlx5_tx_push_cb cb)
31+
{
32+
rte_pmd_mlx5_anlab_trace_tx_push_cb = cb;
33+
}
34+
void rte_pmd_mlx5_anlab_trace_set_tx_complete(mlx5_tx_complete_cb cb)
35+
{
36+
rte_pmd_mlx5_anlab_trace_tx_complete_cb = cb;
37+
}
38+
39+
void rte_pmd_mlx5_anlab_trace_tx_push(const struct rte_mbuf *mbuf, uint16_t wqe_id)
40+
{
41+
if (rte_pmd_mlx5_anlab_trace_tx_push_cb)
42+
rte_pmd_mlx5_anlab_trace_tx_push_cb(mbuf, wqe_id);
43+
}
44+
void rte_pmd_mlx5_anlab_trace_tx_complete(uint16_t port_id, uint16_t queue_id, uint16_t wqe_id, uint64_t ts)
45+
{
46+
if (rte_pmd_mlx5_anlab_trace_tx_complete_cb)
47+
rte_pmd_mlx5_anlab_trace_tx_complete_cb(port_id, queue_id, wqe_id, ts);
48+
}

drivers/net/mlx5/mlx5_trace.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ RTE_TRACE_POINT_FP(
6969
rte_trace_point_emit_u16(wqe_id);
7070
)
7171

72+
// ANLAB Customized traces
73+
typedef void (*mlx5_tx_push_cb)(const struct rte_mbuf *mbuf, uint16_t wqe_id);
74+
typedef void (*mlx5_tx_complete_cb)(uint16_t port_id, uint16_t queue_id, uint16_t wqe_id, uint64_t ts);
75+
76+
__rte_experimental void rte_pmd_mlx5_anlab_trace_set_tx_push(mlx5_tx_push_cb cb);
77+
__rte_experimental void rte_pmd_mlx5_anlab_trace_set_tx_complete(mlx5_tx_complete_cb cb);
78+
79+
void rte_pmd_mlx5_anlab_trace_tx_push(const struct rte_mbuf *mbuf, uint16_t wqe_id);
80+
void rte_pmd_mlx5_anlab_trace_tx_complete(uint16_t port_id, uint16_t queue_id, uint16_t wqe_id, uint64_t ts);
81+
7282
#ifdef __cplusplus
7383
}
7484
#endif

drivers/net/mlx5/mlx5_tx.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,15 @@ mlx5_tx_handle_completion(struct mlx5_txq_data *__rte_restrict txq,
241241
rte_pmd_mlx5_trace_tx_complete(txq->port_id, txq->idx,
242242
wqe_id, ts);
243243
}
244+
{
245+
uint64_t ts = rte_be_to_cpu_64(cqe->timestamp);
246+
uint16_t wqe_id = rte_be_to_cpu_16(cqe->wqe_counter);
247+
248+
if (txq->rt_timestamp)
249+
ts = mlx5_txpp_convert_rx_ts(NULL, ts);
250+
rte_pmd_mlx5_anlab_trace_tx_complete(txq->port_id, txq->idx,
251+
wqe_id, ts);
252+
}
244253
ring_doorbell = true;
245254
++txq->cq_ci;
246255
last_cqe = cqe;

drivers/net/mlx5/mlx5_tx.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,7 +1917,7 @@ mlx5_tx_packet_multi_tso(struct mlx5_txq_data *__rte_restrict txq,
19171917
wqe = txq->wqes + (txq->wqe_ci & txq->wqe_m);
19181918
loc->wqe_last = wqe;
19191919
mlx5_tx_cseg_init(txq, loc, wqe, 0, MLX5_OPCODE_TSO, olx);
1920-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
1920+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
19211921
ds = mlx5_tx_mseg_build(txq, loc, wqe, vlan, inlen, 1, olx);
19221922
wqe->cseg.sq_ds = rte_cpu_to_be_32(txq->qp_num_8s | ds);
19231923
txq->wqe_ci += (ds + 3) / 4;
@@ -2000,7 +2000,7 @@ mlx5_tx_packet_multi_send(struct mlx5_txq_data *__rte_restrict txq,
20002000
wqe = txq->wqes + (txq->wqe_ci & txq->wqe_m);
20012001
loc->wqe_last = wqe;
20022002
mlx5_tx_cseg_init(txq, loc, wqe, ds, MLX5_OPCODE_SEND, olx);
2003-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
2003+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
20042004
mlx5_tx_eseg_none(txq, loc, wqe, olx);
20052005
dseg = &wqe->dseg[0];
20062006
do {
@@ -2224,7 +2224,7 @@ mlx5_tx_packet_multi_inline(struct mlx5_txq_data *__rte_restrict txq,
22242224
wqe = txq->wqes + (txq->wqe_ci & txq->wqe_m);
22252225
loc->wqe_last = wqe;
22262226
mlx5_tx_cseg_init(txq, loc, wqe, 0, MLX5_OPCODE_SEND, olx);
2227-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
2227+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
22282228
ds = mlx5_tx_mseg_build(txq, loc, wqe, vlan, inlen, 0, olx);
22292229
wqe->cseg.sq_ds = rte_cpu_to_be_32(txq->qp_num_8s | ds);
22302230
txq->wqe_ci += (ds + 3) / 4;
@@ -2429,7 +2429,7 @@ mlx5_tx_burst_tso(struct mlx5_txq_data *__rte_restrict txq,
24292429
wqe = txq->wqes + (txq->wqe_ci & txq->wqe_m);
24302430
loc->wqe_last = wqe;
24312431
mlx5_tx_cseg_init(txq, loc, wqe, ds, MLX5_OPCODE_TSO, olx);
2432-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
2432+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
24332433
dseg = mlx5_tx_eseg_data(txq, loc, wqe, vlan, hlen, 1, olx);
24342434
dptr = rte_pktmbuf_mtod(loc->mbuf, uint8_t *) + hlen - vlan;
24352435
dlen -= hlen - vlan;
@@ -2798,7 +2798,7 @@ mlx5_tx_burst_empw_simple(struct mlx5_txq_data *__rte_restrict txq,
27982798
/* Update sent data bytes counter. */
27992799
slen += dlen;
28002800
#endif
2801-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
2801+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
28022802
mlx5_tx_dseg_ptr
28032803
(txq, loc, dseg,
28042804
rte_pktmbuf_mtod(loc->mbuf, uint8_t *),
@@ -3037,7 +3037,7 @@ mlx5_tx_burst_empw_inline(struct mlx5_txq_data *__rte_restrict txq,
30373037
tlen += sizeof(struct rte_vlan_hdr);
30383038
if (room < tlen)
30393039
break;
3040-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
3040+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
30413041
dseg = mlx5_tx_dseg_vlan(txq, loc, dseg,
30423042
dptr, dlen, olx);
30433043
#ifdef MLX5_PMD_SOFT_COUNTERS
@@ -3047,7 +3047,7 @@ mlx5_tx_burst_empw_inline(struct mlx5_txq_data *__rte_restrict txq,
30473047
} else {
30483048
if (room < tlen)
30493049
break;
3050-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
3050+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
30513051
dseg = mlx5_tx_dseg_empw(txq, loc, dseg,
30523052
dptr, dlen, olx);
30533053
}
@@ -3093,7 +3093,7 @@ mlx5_tx_burst_empw_inline(struct mlx5_txq_data *__rte_restrict txq,
30933093
if (MLX5_TXOFF_CONFIG(VLAN))
30943094
MLX5_ASSERT(!(loc->mbuf->ol_flags &
30953095
RTE_MBUF_F_TX_VLAN));
3096-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
3096+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
30973097
mlx5_tx_dseg_ptr(txq, loc, dseg, dptr, dlen, olx);
30983098
/* We have to store mbuf in elts.*/
30993099
txq->elts[txq->elts_head++ & txq->elts_m] = loc->mbuf;
@@ -3308,7 +3308,7 @@ mlx5_tx_burst_single_send(struct mlx5_txq_data *__rte_restrict txq,
33083308
loc->wqe_last = wqe;
33093309
mlx5_tx_cseg_init(txq, loc, wqe, seg_n,
33103310
MLX5_OPCODE_SEND, olx);
3311-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
3311+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
33123312
mlx5_tx_eseg_data(txq, loc, wqe,
33133313
vlan, inlen, 0, olx);
33143314
txq->wqe_ci += wqe_n;
@@ -3371,7 +3371,7 @@ mlx5_tx_burst_single_send(struct mlx5_txq_data *__rte_restrict txq,
33713371
loc->wqe_last = wqe;
33723372
mlx5_tx_cseg_init(txq, loc, wqe, ds,
33733373
MLX5_OPCODE_SEND, olx);
3374-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
3374+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
33753375
dseg = mlx5_tx_eseg_data(txq, loc, wqe, vlan,
33763376
txq->inlen_mode,
33773377
0, olx);
@@ -3413,7 +3413,7 @@ mlx5_tx_burst_single_send(struct mlx5_txq_data *__rte_restrict txq,
34133413
loc->wqe_last = wqe;
34143414
mlx5_tx_cseg_init(txq, loc, wqe, 4,
34153415
MLX5_OPCODE_SEND, olx);
3416-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
3416+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
34173417
mlx5_tx_eseg_dmin(txq, loc, wqe, vlan, olx);
34183418
dptr = rte_pktmbuf_mtod(loc->mbuf, uint8_t *) +
34193419
MLX5_ESEG_MIN_INLINE_SIZE - vlan;
@@ -3455,7 +3455,7 @@ mlx5_tx_burst_single_send(struct mlx5_txq_data *__rte_restrict txq,
34553455
loc->wqe_last = wqe;
34563456
mlx5_tx_cseg_init(txq, loc, wqe, 3,
34573457
MLX5_OPCODE_SEND, olx);
3458-
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);
3458+
rte_pmd_mlx5_trace_tx_push(loc->mbuf, txq->wqe_ci);rte_pmd_mlx5_anlab_trace_tx_push(loc->mbuf, txq->wqe_ci);
34593459
mlx5_tx_eseg_none(txq, loc, wqe, olx);
34603460
mlx5_tx_dseg_ptr
34613461
(txq, loc, &wqe->dseg[0],

drivers/net/mlx5/version.map

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ DPDK_25 {
44

55
EXPERIMENTAL {
66
global:
7-
7+
# added in 24.11
8+
rte_pmd_mlx5_anlab_trace_set_tx_push;
9+
rte_pmd_mlx5_anlab_trace_set_tx_complete;
810
# added in 20.02
911
rte_pmd_mlx5_get_dyn_flag_names;
1012
# added in 20.11

0 commit comments

Comments
 (0)