4 #include <rdma/ib_verbs.h>
5 #include <netinet/in.h>
8 * Krping header stuffs...
24 * These states are used to signal events between the completion handler
25 * and the main client or server thread.
27 * Once CONNECTED, they cycle through RDMA_READ_ADV, RDMA_WRITE_ADV,
28 * and RDMA_WRITE_COMPLETE for each ping.
44 struct krping_rdma_info {
51 * Control block struct.
54 int server; /* 0 iff client */
61 struct ib_recv_wr rq_wr; /* recv work request record */
62 struct ib_sge recv_sgl; /* recv single SGE */
63 struct krping_rdma_info recv_buf;/* malloc'd buffer */
64 struct ib_mr *recv_mr;
66 struct ib_send_wr sq_wr; /* send work requrest record */
67 struct ib_sge send_sgl;
68 struct krping_rdma_info send_buf;/* single send buf */
69 struct ib_mr *send_mr;
71 struct ib_send_wr rdma_sq_wr; /* rdma work request record */
72 struct ib_sge rdma_sgl; /* rdma single SGE */
73 char *rdma_buf; /* used as rdma sink */
75 struct ib_mr *rdma_mr;
77 uint32_t remote_rkey; /* remote guys RKEY */
78 uint64_t remote_addr; /* remote guys TO */
79 uint32_t remote_len; /* remote guys LEN */
81 char *start_buf; /* rdma read src */
83 struct ib_mr *start_mr;
85 enum test_state state; /* used for cond/signalling */
87 struct krping_stats stats;
89 uint16_t port; /* dst port in NBO */
90 struct in_addr addr; /* dst addr in NBO */
91 char *addr_str; /* dst addr string */
92 int verbose; /* verbose logging */
93 int count; /* ping count */
94 int size; /* ping data size */
95 int validate; /* validate ping data */
96 uint64_t memlimit; /* limit of the physical memory that
97 can be registered with dma_mr mode */
100 struct rdma_cm_id *cm_id; /* connection on client side,*/
101 /* listener on service side. */
102 struct rdma_cm_id *child_cm_id; /* connection on server side */
103 TAILQ_ENTRY(krping_cb) list;
105 int rlat; /* run read latency test */
106 int wlat; /* run write latency test */
107 int bw; /* run write bw test */
108 int duplex; /* run write bw full duplex test */
109 int poll; /* poll vs block in rlat */
115 static __inline uint64_t
119 __asm __volatile("rdtsc" : "=a" (low), "=d" (high));
120 return (low | ((u_int64_t)high << 32));
123 #define htonll(x) htobe64((x))
124 #define ntohll(x) be64toh((x))
126 typedef uint64_t cycles_t;
128 extern struct mtx krping_mutex;
129 TAILQ_HEAD(krping_cb_list, krping_cb);
130 extern struct krping_cb_list krping_cbs;
132 int krping_doit(char *cmd);
133 void krping_init(void);