net/mana: use trace points for data path logs
Subsystems (2)
PATCH 1/1 net/mana: use trace points for data path logs
From: Long Li <[email protected]>
Change all the logging statements on the data path to use trace points to reduce CPU overhead when fast path tracing is not enabled.
Fixes 517ed6e2d5 ("net/mana: add basic driver with build environment")
Signed-off-by Long Li <[email protected]>
--- drivers/net/mana/gdma.c | 50 +++--- drivers/net/mana/mana_trace.h | 222 +++++++++++++++++++++++++++ drivers/net/mana/mana_trace_points.c | 33 ++++ drivers/net/mana/meson.build | 1 + drivers/net/mana/mp.c | 5 +- drivers/net/mana/mr.c | 46 ++---- drivers/net/mana/rx.c | 20 ++- drivers/net/mana/tx.c | 45 ++---- 8 files changed, 321 insertions(+), 101 deletions(-) create mode 100644 drivers/net/mana/mana_trace.h create mode 100644 drivers/net/mana/mana_trace_points.c
drivers/net/mana/gdma.c +23 -27
@@ -6,6 +6,7 @@#include <rte_io.h> #include "mana.h" +#include "mana_trace.h" uint8_t *gdma_get_wqe_pointer (struct mana_gdma_queue *queue)
@@ -14,12 +15,11 @@ gdma_get_wqe_pointer(struct mana_gdma_queue *queue) (queue->head *GDMA_WQE_ALIGNMENT_UNIT_SIZE ) & (queue->size -1 ); -DRV_LOG (DEBUG ,"txq sq_head %u sq_size %u offset_in_bytes %u" , - queue->head, queue->size, offset_in_bytes); +mana_trace_gdma_wqe_pointer (queue->head, queue->size, offset_in_bytes);if (offset_in_bytes +GDMA_WQE_ALIGNMENT_UNIT_SIZE > queue->size)DRV_LOG (ERR ,"fatal error: offset_in_bytes %u too big" , - offset_in_bytes); + offset_in_bytes);return ((uint8_t *)queue->buffer) + offset_in_bytes; }
@@ -39,11 +39,12 @@ write_dma_client_oob(uint8_t *work_queue_buffer_pointer, client_oob_size /sizeof (uint32_t ); header->client_data_unit = work_request->client_data_unit; -DRV_LOG (DEBUG ,"queue buf %p sgl %u oob_h %u du %u oob_buf %p oob_b %u" , - work_queue_buffer_pointer, header->num_sgl_entries, - header->inline_client_oob_size_in_dwords, - header->client_data_unit, work_request->inline_oob_data, - work_request->inline_oob_size_in_bytes); +mana_trace_gdma_write_dma_oob ((uintptr_t )work_queue_buffer_pointer, + header->num_sgl_entries, + header->inline_client_oob_size_in_dwords, + header->client_data_unit, + (uintptr_t )work_request->inline_oob_data, + work_request->inline_oob_size_in_bytes); p +=sizeof (struct gdma_wqe_dma_oob ); if (work_request->inline_oob_data &&
@@ -73,9 +74,6 @@ write_scatter_gather_list(uint8_t *work_queue_head_pointer,uint32_t size_to_queue_end;uint32_t sge_list_size; -DRV_LOG (DEBUG ,"work_queue_cur_pointer %p work_request->flags %x" , - work_queue_cur_pointer, work_request->flags); - num_sge = work_request->num_sgl_elements; sge_list = work_request->sgl; size_to_queue_end = (uint32_t)(work_queue_end_pointer -
@@ -110,9 +108,9 @@ write_scatter_gather_list(uint8_t *work_queue_head_pointer, sge_list_size = size; } -DRV_LOG (DEBUG ,"sge %u address 0x%" PRIx64" size %u key %u list_s %u" , - num_sge, sge_list->address, sge_list->size, - sge_list->memory_key, sge_list_size); +mana_trace_gdma_write_sgl (num_sge, (uintptr_t )sge_list->address, + sge_list->size, sge_list->memory_key, sge_list_size, + work_request->flags);return sge_list_size; }
@@ -141,13 +139,12 @@ gdma_post_work_request(struct mana_gdma_queue *queue,uint32_t queue_free_units = queue->count - (queue->head - queue->tail);if (wqe_size /GDMA_WQE_ALIGNMENT_UNIT_SIZE > queue_free_units) { -DRV_LOG (DEBUG ,"WQE size %u queue count %u head %u tail %u" , - wqe_size, queue->count, queue->head, queue->tail); +mana_trace_gdma_queue_busy (wqe_size, queue->count, queue->head, + queue->tail);return -EBUSY ; } -DRV_LOG (DEBUG ,"client_oob_size %u sgl_data_size %u wqe_size %u" , - client_oob_size, sgl_data_size, wqe_size); +mana_trace_gdma_queued (client_oob_size, sgl_data_size, wqe_size);if (wqe_info) { wqe_info->wqe_index =
@@ -248,11 +245,11 @@ mana_ring_doorbell(void *db_page, enum gdma_queue_types queue_type,/* Ensure all writes are done before ringing doorbell */ rte_wmb (); +rte_write64 (e.as_uint64, addr); -DRV_LOG (DEBUG ,"db_page %p addr %p queue_id %u type %u tail %u arm %u" , - db_page, addr, queue_id, queue_type, tail, arm); +mana_trace_gdma_ring_doorbell ((uintptr_t )db_page, (uintptr_t )addr, queue_id, + queue_type, tail, arm); -rte_write64 (e.as_uint64, addr);return 0 ; }
@@ -274,15 +271,14 @@ gdma_poll_completion_queue(struct mana_gdma_queue *cq, struct gdma_comp *comp)COMPLETION_QUEUE_OWNER_MASK ; cqe_owner_bits = cqe->owner_bits; -DRV_LOG (DEBUG ,"comp cqe bits 0x%x owner bits 0x%x" , - cqe_owner_bits, old_owner_bits); +mana_trace_gdma_poll_cq (cqe_owner_bits, old_owner_bits);if (cqe_owner_bits == old_owner_bits)return 0 ;/* No new entry */ if (cqe_owner_bits != new_owner_bits) {DRV_LOG (ERR ,"CQ overflowed, ID %u cqe 0x%x new 0x%x" , - cq->id, cqe_owner_bits, new_owner_bits); + cq->id, cqe_owner_bits, new_owner_bits);return -1 ; }
@@ -296,8 +292,8 @@ gdma_poll_completion_queue(struct mana_gdma_queue *cq, struct gdma_comp *comp) cq->head++; -DRV_LOG (DEBUG ,"comp new 0x%x old 0x%x cqe 0x%x wq %u sq %u head %u" , - new_owner_bits, old_owner_bits, cqe_owner_bits, - comp->work_queue_number, comp->send_work_queue, cq->head); +mana_trace_gdma_polled_cq (new_owner_bits, old_owner_bits, + cqe_owner_bits, comp->work_queue_number, + comp->send_work_queue, cq->head);return 1 ; }
drivers/net/mana/mana_trace.h new file +222 -0
222 lines not on this page · raw message
drivers/net/mana/mana_trace_points.c new file +33 -0
@@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: BSD-3-Clause +* Copyright 2022 Microsoft Corporation +*/ + +#include <rte_trace_point_register.h> +#include "mana_trace.h" + +RTE_TRACE_POINT_REGISTER(mana_trace_mr_chunk, mana.mr.chunk) +RTE_TRACE_POINT_REGISTER(mana_trace_mr_ibv, mana.mr.ibv) +RTE_TRACE_POINT_REGISTER(mana_trace_mr_search, mana.mr.search) +RTE_TRACE_POINT_REGISTER(mana_trace_mr_found, mana.mr.found) +RTE_TRACE_POINT_REGISTER(mana_trace_local_cache_insert, mana.cache.local.insert) +RTE_TRACE_POINT_REGISTER(mana_trace_btree_miss, mana.btree.miss) +RTE_TRACE_POINT_REGISTER(mana_trace_btree_found, mana.btree.found) +RTE_TRACE_POINT_REGISTER(mana_trace_btree_shift, mana.btree.shift) +RTE_TRACE_POINT_REGISTER(mana_trace_btree_inserted, mana.btree.inserted) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_wqe_pointer, mana.gdma.wqe.pointer) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_write_dma_oob, mana.gdma.write.dma.oob) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_write_sgl, mana.gdma.write.sgl) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_queue_busy, mana.gdma.queue.busy) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_queued, mana.gdma.queued) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_ring_doorbell, mana.gdma.ring.doorbell) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_poll_cq, mana.gdma.cq.poll) +RTE_TRACE_POINT_REGISTER(mana_trace_gdma_polled_cq, mana.gdma.cq.polled) +RTE_TRACE_POINT_REGISTER(mana_trace_tx_error, mana.tx.error) +RTE_TRACE_POINT_REGISTER(mana_trace_tx_packet, mana.tx.packet) +RTE_TRACE_POINT_REGISTER(mana_trace_rx_queue_mismatch, mana.rx.queue.mismatch) +RTE_TRACE_POINT_REGISTER(mana_trace_rx_truncated, mana.rx.truncated) +RTE_TRACE_POINT_REGISTER(mana_trace_rx_coalesced, mana.rx.coalesced) +RTE_TRACE_POINT_REGISTER(mana_trace_rx_unknown_cqe, mana.rx.unknown_cqe) +RTE_TRACE_POINT_REGISTER(mana_trace_rx_cqe, mana.rx.cqe) +RTE_TRACE_POINT_REGISTER(mana_trace_arm_cq, mana.arm.cq) +RTE_TRACE_POINT_REGISTER (mana_trace_handle_secondary_mr, mana.secondary.mr)
drivers/net/mana/meson.build +1 -0
@@ -16,6 +16,7 @@ sources += files( 'mr.c', 'rx.c', 'tx.c', + 'mana_trace_points.c', ) libnames = ['ibverbs', 'mana']
drivers/net/mana/mp.c +3 -2
@@ -9,6 +9,7 @@#include <infiniband/verbs.h> #include "mana.h" +#include "mana_trace.h" extern struct mana_shared_data *mana_shared_data;
@@ -28,8 +29,8 @@ mana_mp_mr_create(struct mana_priv *priv, uintptr_t addr, uint32_t len)if (!ibv_mr)return -errno; -DRV_LOG (DEBUG ,"MR (2nd) lkey %u addr %p len %zu" , - ibv_mr->lkey, ibv_mr->addr, ibv_mr->length); +mana_trace_handle_secondary_mr (ibv_mr->lkey, (uintptr_t )ibv_mr->addr, + ibv_mr->length); mr =rte_calloc ("MANA MR" ,1 ,sizeof (*mr),0 );if (!mr) {
drivers/net/mana/mr.c +16 -30
132 lines not on this page · raw message
drivers/net/mana/rx.c +9 -11
@@ -7,6 +7,7 @@#include <infiniband/manadv.h> #include "mana.h" +#include "mana_trace.h" static uint8_t mana_rss_hash_key_default[TOEPLITZ_HASH_KEY_SIZE_IN_BYTES ] = {0x2c ,0xc6 ,0x81 ,0xd1 ,
@@ -97,7 +98,6 @@ mana_alloc_and_post_rx_wqe(struct mana_rxq *rxq) desc->wqe_size_in_bu = wqe_info.wqe_size_in_bu; rxq->desc_ring_head = (rxq->desc_ring_head +1 ) % rxq->num_desc; }else { -DRV_LOG (ERR ,"failed to post recv ret %d" , ret);return ret; }
@@ -395,8 +395,8 @@ mana_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) (struct mana_rx_comp_oob *)&comp.completion_data[0 ];if (comp.work_queue_number != rxq->gdma_rq.id) { -DRV_LOG (ERR ,"rxq comp id mismatch wqid=0x%x rcid=0x%x" , - comp.work_queue_number, rxq->gdma_rq.id); +mana_trace_rx_queue_mismatch (comp.work_queue_number, + rxq->gdma_rq.id); rxq->stats.errors++;break ; }
@@ -411,22 +411,21 @@ mana_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)break ;case CQE_RX_TRUNCATED : -DRV_LOG (ERR ,"Drop a truncated packet" ); +mana_trace_rx_truncated (); rxq->stats.errors++;rte_pktmbuf_free (mbuf); goto drop;case CQE_RX_COALESCED_4 : -DRV_LOG (ERR ,"RX coalescing is not supported" ); +mana_trace_rx_coalesced ();continue ;default : -DRV_LOG (ERR ,"Unknown RX CQE type %d" , - oob->cqe_hdr.cqe_type); +mana_trace_rx_unknown_cqe (oob->cqe_hdr.cqe_type);continue ; } -DRV_LOG (DEBUG ,"mana_rx_comp_oob CQE_RX_OKAY rxq %p" , rxq); +mana_trace_rx_cqe (); mbuf->data_off =RTE_PKTMBUF_HEADROOM ; mbuf->nb_segs =1 ;
@@ -490,8 +489,7 @@ mana_arm_cq(struct mana_rxq *rxq, uint8_t arm)uint32_t head = rxq->gdma_cq.head % (rxq->gdma_cq.count <<COMPLETION_QUEUE_ENTRY_OWNER_BITS_SIZE ); -DRV_LOG (ERR ,"Ringing completion queue ID %u head %u arm %d" , - rxq->gdma_cq.id, head, arm); +mana_trace_arm_cq (rxq->gdma_cq.id, head, arm);return mana_ring_doorbell (priv->db_page,GDMA_QUEUE_COMPLETION , rxq->gdma_cq.id, head, arm);
@@ -522,7 +520,7 @@ mana_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id)if (ret) {if (ret !=EAGAIN )DRV_LOG (ERR ,"Can't disable RX intr queue %d" , - rx_queue_id); + rx_queue_id); }else {ibv_ack_cq_events (rxq->cq,1 ); }
drivers/net/mana/tx.c +14 -31
90 lines not on this page · raw message
Signature · 1 line
2.32.0