Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  rdma_core.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Trace point definitions for core RDMA functions.
 *
 * Author: Chuck Lever <chuck.lever@oracle.com>
 *
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
 */


#undef TRACE_SYSTEM
#define TRACE_SYSTEM rdma_core

#if !defined(_TRACE_RDMA_CORE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_RDMA_CORE_H

#include <linux/tracepoint.h>
#include <rdma/ib_verbs.h>

/*
 * enum ib_poll_context, from include/rdma/ib_verbs.h
 */

#define IB_POLL_CTX_LIST   \
 ib_poll_ctx(DIRECT)   \
 ib_poll_ctx(SOFTIRQ)   \
 ib_poll_ctx(WORKQUEUE)   \
 ib_poll_ctx_end(UNBOUND_WORKQUEUE)

#undef ib_poll_ctx
#undef ib_poll_ctx_end

#define ib_poll_ctx(x)  TRACE_DEFINE_ENUM(IB_POLL_##x);
#define ib_poll_ctx_end(x) TRACE_DEFINE_ENUM(IB_POLL_##x);

IB_POLL_CTX_LIST

#undef ib_poll_ctx
#undef ib_poll_ctx_end

#define ib_poll_ctx(x)  { IB_POLL_##x, #x },
#define ib_poll_ctx_end(x) { IB_POLL_##x, #x }

#define rdma_show_ib_poll_ctx(x) \
  __print_symbolic(x, IB_POLL_CTX_LIST)

/**
 ** Completion Queue events
 **/


TRACE_EVENT(cq_schedule,
 TP_PROTO(
  struct ib_cq *cq
 ),

 TP_ARGS(cq),

 TP_STRUCT__entry(
  __field(u32, cq_id)
 ),

 TP_fast_assign(
  cq->timestamp = ktime_get();
  cq->interrupt = true;

  __entry->cq_id = cq->res.id;
 ),

 TP_printk("cq.id=%u", __entry->cq_id)
);

TRACE_EVENT(cq_reschedule,
 TP_PROTO(
  struct ib_cq *cq
 ),

 TP_ARGS(cq),

 TP_STRUCT__entry(
  __field(u32, cq_id)
 ),

 TP_fast_assign(
  cq->timestamp = ktime_get();
  cq->interrupt = false;

  __entry->cq_id = cq->res.id;
 ),

 TP_printk("cq.id=%u", __entry->cq_id)
);

TRACE_EVENT(cq_process,
 TP_PROTO(
  const struct ib_cq *cq
 ),

 TP_ARGS(cq),

 TP_STRUCT__entry(
  __field(u32, cq_id)
  __field(bool, interrupt)
  __field(s64, latency)
 ),

 TP_fast_assign(
  ktime_t latency = ktime_sub(ktime_get(), cq->timestamp);

  __entry->cq_id = cq->res.id;
  __entry->latency = ktime_to_us(latency);
  __entry->interrupt = cq->interrupt;
 ),

 TP_printk("cq.id=%u wake-up took %lld [us] from %s",
  __entry->cq_id, __entry->latency,
  __entry->interrupt ? "interrupt" : "reschedule"
 )
);

TRACE_EVENT(cq_poll,
 TP_PROTO(
  const struct ib_cq *cq,
  int requested,
  int rc
 ),

 TP_ARGS(cq, requested, rc),

 TP_STRUCT__entry(
  __field(u32, cq_id)
  __field(int, requested)
  __field(int, rc)
 ),

 TP_fast_assign(
  __entry->cq_id = cq->res.id;
  __entry->requested = requested;
  __entry->rc = rc;
 ),

 TP_printk("cq.id=%u requested %d, returned %d",
  __entry->cq_id, __entry->requested, __entry->rc
 )
);

TRACE_EVENT(cq_drain_complete,
 TP_PROTO(
  const struct ib_cq *cq
 ),

 TP_ARGS(cq),

 TP_STRUCT__entry(
  __field(u32, cq_id)
 ),

 TP_fast_assign(
  __entry->cq_id = cq->res.id;
 ),

 TP_printk("cq.id=%u",
  __entry->cq_id
 )
);


TRACE_EVENT(cq_modify,
 TP_PROTO(
  const struct ib_cq *cq,
  u16 comps,
  u16 usec
 ),

 TP_ARGS(cq, comps, usec),

 TP_STRUCT__entry(
  __field(u32, cq_id)
  __field(unsigned int, comps)
  __field(unsigned int, usec)
 ),

 TP_fast_assign(
  __entry->cq_id = cq->res.id;
  __entry->comps = comps;
  __entry->usec = usec;
 ),

 TP_printk("cq.id=%u comps=%u usec=%u",
  __entry->cq_id, __entry->comps, __entry->usec
 )
);

TRACE_EVENT(cq_alloc,
 TP_PROTO(
  const struct ib_cq *cq,
  int nr_cqe,
  int comp_vector,
  enum ib_poll_context poll_ctx
 ),

 TP_ARGS(cq, nr_cqe, comp_vector, poll_ctx),

 TP_STRUCT__entry(
  __field(u32, cq_id)
  __field(int, nr_cqe)
  __field(int, comp_vector)
  __field(unsigned long, poll_ctx)
 ),

 TP_fast_assign(
  __entry->cq_id = cq->res.id;
  __entry->nr_cqe = nr_cqe;
  __entry->comp_vector = comp_vector;
  __entry->poll_ctx = poll_ctx;
 ),

 TP_printk("cq.id=%u nr_cqe=%d comp_vector=%d poll_ctx=%s",
  __entry->cq_id, __entry->nr_cqe, __entry->comp_vector,
  rdma_show_ib_poll_ctx(__entry->poll_ctx)
 )
);

TRACE_EVENT(cq_alloc_error,
 TP_PROTO(
  int nr_cqe,
  int comp_vector,
  enum ib_poll_context poll_ctx,
  int rc
 ),

 TP_ARGS(nr_cqe, comp_vector, poll_ctx, rc),

 TP_STRUCT__entry(
  __field(int, rc)
  __field(int, nr_cqe)
  __field(int, comp_vector)
  __field(unsigned long, poll_ctx)
 ),

 TP_fast_assign(
  __entry->rc = rc;
  __entry->nr_cqe = nr_cqe;
  __entry->comp_vector = comp_vector;
  __entry->poll_ctx = poll_ctx;
 ),

 TP_printk("nr_cqe=%d comp_vector=%d poll_ctx=%s rc=%d",
  __entry->nr_cqe, __entry->comp_vector,
  rdma_show_ib_poll_ctx(__entry->poll_ctx), __entry->rc
 )
);

TRACE_EVENT(cq_free,
 TP_PROTO(
  const struct ib_cq *cq
 ),

 TP_ARGS(cq),

 TP_STRUCT__entry(
  __field(u32, cq_id)
 ),

 TP_fast_assign(
  __entry->cq_id = cq->res.id;
 ),

 TP_printk("cq.id=%u", __entry->cq_id)
);

/**
 ** Memory Region events
 **/


/*
 * enum ib_mr_type, from include/rdma/ib_verbs.h
 */

#define IB_MR_TYPE_LIST    \
 ib_mr_type_item(MEM_REG)  \
 ib_mr_type_item(SG_GAPS)  \
 ib_mr_type_item(DM)   \
 ib_mr_type_item(USER)   \
 ib_mr_type_item(DMA)   \
 ib_mr_type_end(INTEGRITY)

#undef ib_mr_type_item
#undef ib_mr_type_end

#define ib_mr_type_item(x) TRACE_DEFINE_ENUM(IB_MR_TYPE_##x);
#define ib_mr_type_end(x) TRACE_DEFINE_ENUM(IB_MR_TYPE_##x);

IB_MR_TYPE_LIST

#undef ib_mr_type_item
#undef ib_mr_type_end

#define ib_mr_type_item(x) { IB_MR_TYPE_##x, #x },
#define ib_mr_type_end(x) { IB_MR_TYPE_##x, #x }

#define rdma_show_ib_mr_type(x) \
  __print_symbolic(x, IB_MR_TYPE_LIST)

TRACE_EVENT(mr_alloc,
 TP_PROTO(
  const struct ib_pd *pd,
  enum ib_mr_type mr_type,
  u32 max_num_sg,
  const struct ib_mr *mr
 ),

 TP_ARGS(pd, mr_type, max_num_sg, mr),

 TP_STRUCT__entry(
  __field(u32, pd_id)
  __field(u32, mr_id)
  __field(u32, max_num_sg)
  __field(int, rc)
  __field(unsigned long, mr_type)
 ),

 TP_fast_assign(
  __entry->pd_id = pd->res.id;
  if (IS_ERR(mr)) {
   __entry->mr_id = 0;
   __entry->rc = PTR_ERR(mr);
  } else {
   __entry->mr_id = mr->res.id;
   __entry->rc = 0;
  }
  __entry->max_num_sg = max_num_sg;
  __entry->mr_type = mr_type;
 ),

 TP_printk("pd.id=%u mr.id=%u type=%s max_num_sg=%u rc=%d",
  __entry->pd_id, __entry->mr_id,
  rdma_show_ib_mr_type(__entry->mr_type),
  __entry->max_num_sg, __entry->rc)
);

TRACE_EVENT(mr_integ_alloc,
 TP_PROTO(
  const struct ib_pd *pd,
  u32 max_num_data_sg,
  u32 max_num_meta_sg,
  const struct ib_mr *mr
 ),

 TP_ARGS(pd, max_num_data_sg, max_num_meta_sg, mr),

 TP_STRUCT__entry(
  __field(u32, pd_id)
  __field(u32, mr_id)
  __field(u32, max_num_data_sg)
  __field(u32, max_num_meta_sg)
  __field(int, rc)
 ),

 TP_fast_assign(
  __entry->pd_id = pd->res.id;
  if (IS_ERR(mr)) {
   __entry->mr_id = 0;
   __entry->rc = PTR_ERR(mr);
  } else {
   __entry->mr_id = mr->res.id;
   __entry->rc = 0;
  }
  __entry->max_num_data_sg = max_num_data_sg;
  __entry->max_num_meta_sg = max_num_meta_sg;
 ),

 TP_printk("pd.id=%u mr.id=%u max_num_data_sg=%u max_num_meta_sg=%u rc=%d",
  __entry->pd_id, __entry->mr_id, __entry->max_num_data_sg,
  __entry->max_num_meta_sg, __entry->rc)
);

TRACE_EVENT(mr_dereg,
 TP_PROTO(
  const struct ib_mr *mr
 ),

 TP_ARGS(mr),

 TP_STRUCT__entry(
  __field(u32, id)
 ),

 TP_fast_assign(
  __entry->id = mr->res.id;
 ),

 TP_printk("mr.id=%u", __entry->id)
);

#endif /* _TRACE_RDMA_CORE_H */

#include <trace/define_trace.h>

Messung V0.5
C=99 H=100 G=99

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge