enum step {
STEP_CREATE_ID,
+ STEP_BIND,
STEP_RESOLVE_ADDR,
STEP_RESOLVE_ROUTE,
STEP_CREATE_QP,
static char *step_str[] = {
"create id",
+ "bind addr",
"resolve addr",
"resolve route",
"create qp",
printf("step total ms max ms min us us / conn\n");
for (i = 0; i < STEP_CNT; i++) {
+ if (i == STEP_BIND && !src_addr)
+ continue;
+
us = diff_us(×[i][1], ×[i][0]);
printf("%-13s: %11.2f%11.2f%11.2f%11.2f\n", step_str[i], us / 1000.,
max[i] / 1000., min[i], us / connections);
conn_param.private_data = rai->ai_connect;
conn_param.private_data_len = rai->ai_connect_len;
+ if (src_addr) {
+ printf("binding source address\n");
+ start_time(STEP_BIND);
+ for (i = 0; i < connections; i++) {
+ start_perf(&nodes[i], STEP_BIND);
+ ret = rdma_bind_addr(nodes[i].id, rai->ai_src_addr);
+ if (ret) {
+ perror("failure bind addr");
+ nodes[i].error = 1;
+ continue;
+ }
+ end_perf(&nodes[i], STEP_BIND);
+ }
+ end_time(STEP_BIND);
+ }
+
printf("resolving address\n");
start_time(STEP_RESOLVE_ADDR);
for (i = 0; i < connections; i++) {
+ if (nodes[i].error)
+ continue;
start_perf(&nodes[i], STEP_RESOLVE_ADDR);
ret = rdma_resolve_addr(nodes[i].id, rai->ai_src_addr,
rai->ai_dst_addr, 2000);