4 #include <contrib/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.
43 struct krping_rdma_info {
50 * Control block struct.
53 int server; /* 0 iff client */
60 struct ib_recv_wr rq_wr; /* recv work request record */
61 struct ib_sge recv_sgl; /* recv single SGE */
62 struct krping_rdma_info recv_buf;/* malloc'd buffer */
63 struct ib_mr *recv_mr;
65 struct ib_send_wr sq_wr; /* send work requrest record */
66 struct ib_sge send_sgl;
67 struct krping_rdma_info send_buf;/* single send buf */
68 struct ib_mr *send_mr;
70 struct ib_send_wr rdma_sq_wr; /* rdma work request record */
71 struct ib_sge rdma_sgl; /* rdma single SGE */
72 char *rdma_buf; /* used as rdma sink */
74 struct ib_mr *rdma_mr;
76 uint32_t remote_rkey; /* remote guys RKEY */
77 uint64_t remote_addr; /* remote guys TO */
78 uint32_t remote_len; /* remote guys LEN */
80 char *start_buf; /* rdma read src */
82 struct ib_mr *start_mr;
84 enum test_state state; /* used for cond/signalling */
86 struct krping_stats stats;
88 uint16_t port; /* dst port in NBO */
89 struct in_addr addr; /* dst addr in NBO */
90 char *addr_str; /* dst addr string */
91 int verbose; /* verbose logging */
92 int count; /* ping count */
93 int size; /* ping data size */
94 int validate; /* validate ping data */
97 struct rdma_cm_id *cm_id; /* connection on client side,*/
98 /* listener on service side. */
99 struct rdma_cm_id *child_cm_id; /* connection on server side */
100 TAILQ_ENTRY(krping_cb) list;
102 int rlat; /* run read latency test */
103 int wlat; /* run write latency test */
104 int bw; /* run write bw test */
105 int duplex; /* run write bw full duplex test */
106 int poll; /* poll vs block in rlat */
110 static __inline uint64_t
114 __asm __volatile("rdtsc" : "=a" (low), "=d" (high));
115 return (low | ((u_int64_t)high << 32));
118 #define htonll(x) htobe64((x))
119 #define ntohll(x) be64toh((x))
121 typedef uint64_t cycles_t;
123 extern struct mtx krping_mutex;
124 TAILQ_HEAD(krping_cb_list, krping_cb);
125 extern struct krping_cb_list krping_cbs;
127 int krping_doit(char *cmd);
128 void krping_init(void);