]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
cmtime: Add ability to time rdma_bind_addr calls
authorSean Hefty <sean.hefty@intel.com>
Thu, 22 Aug 2013 18:30:33 +0000 (11:30 -0700)
committerSean Hefty <sean.hefty@intel.com>
Thu, 22 Aug 2013 18:30:33 +0000 (11:30 -0700)
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
examples/cmtime.c

index f97ab9e37afb008c00895fb1d15e184d8d9f86df..e083ac2b729b85f9a256c7a86fc00886a3333879 100644 (file)
@@ -54,6 +54,7 @@ static char *src_addr;
 
 enum step {
        STEP_CREATE_ID,
+       STEP_BIND,
        STEP_RESOLVE_ADDR,
        STEP_RESOLVE_ROUTE,
        STEP_CREATE_QP,
@@ -65,6 +66,7 @@ enum step {
 
 static char *step_str[] = {
        "create id",
+       "bind addr",
        "resolve addr",
        "resolve route",
        "create qp",
@@ -123,6 +125,9 @@ static void show_perf(void)
 
        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(&times[i][1], &times[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);
@@ -348,9 +353,27 @@ static int run_client(void)
        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);