]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh (create temporary patch)
authorSean Hefty <sean.hefty@intel.com>
Mon, 28 May 2012 00:02:52 +0000 (17:02 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 28 May 2012 00:02:52 +0000 (17:02 -0700)
meta
patches/refresh-temp [new file with mode: 0644]

diff --git a/meta b/meta
index c1bd023f6d38278de0d1ce7feb4941cdbd2eb320..27f78a793902657d106c8f5be3b60f0294d09d95 100644 (file)
--- a/meta
+++ b/meta
@@ -1,6 +1,6 @@
 Version: 1
-Previous: af37bbeb5b96f083538b1912a3ad2099d59af0b7
-Head: 1176abc686ada043ea9adb51219d45c945faa711
+Previous: fb03f73f601f5cc83f9dbcb915d6847b5941f847
+Head: c63dfc3e730deb332351a07cb5b6f10ac6eaa5fb
 Applied:
   destroy_cqs: 66410c265b2661e16b7f6126bcc4ea5c7e1af1bd
   conn-err: ac46465ae6061b06f005ba9b49b371c9eb0d2325
@@ -19,5 +19,6 @@ Applied:
   rs-states: 91edc2c3d92307144d82c22b5928ebd3ef6f21e8
   rs-recv-hang: 87f678725a461861b9453cc205ae91a800630c14
   rstream-opt: 1176abc686ada043ea9adb51219d45c945faa711
+  refresh-temp: c63dfc3e730deb332351a07cb5b6f10ac6eaa5fb
 Unapplied:
 Hidden:
diff --git a/patches/refresh-temp b/patches/refresh-temp
new file mode 100644 (file)
index 0000000..f27cac0
--- /dev/null
@@ -0,0 +1,336 @@
+Bottom: 5762ea9f26bec43ae89d7dd2fded0b8cbe158a35
+Top:    a7ddec5b59a3e440d30c927ad2c1249b74e8b753
+Author: Sean Hefty <sean.hefty@intel.com>
+Date:   2012-05-27 17:02:52 -0700
+
+Refresh of rstream-opt
+
+---
+
+diff --git a/examples/rstream.c b/examples/rstream.c
+index 6ff4f1c..6641bc2 100644
+--- a/examples/rstream.c
++++ b/examples/rstream.c
+@@ -71,12 +71,20 @@ static struct test_size_param test_size[] = {
+ };
+ #define TEST_CNT (sizeof test_size / sizeof test_size[0])
++enum rs_optimization {
++      opt_mixed,
++      opt_latency,
++      opt_bandwidth
++};
++
++static int rs, lrs;
+ static int use_rs = 1;
+ static int use_async;
+ static int verify;
+ static int flags = MSG_DONTWAIT;
+ static int poll_timeout = 0;
+ static int custom;
++static enum rs_optimization optimization;
+ static int size_option;
+ static int iterations = 1;
+ static int transfer_size = 1000;
+@@ -238,7 +246,7 @@ static int do_poll(struct pollfd *fds)
+       return ret == 1 ? 0 : ret;
+ }
+-static int send_xfer(int rs, int size)
++static int send_xfer(int size)
+ {
+       struct pollfd fds;
+       int offset, ret;
+@@ -270,7 +278,7 @@ static int send_xfer(int rs, int size)
+       return 0;
+ }
+-static int recv_xfer(int rs, int size)
++static int recv_xfer(int size)
+ {
+       struct pollfd fds;
+       int offset, ret;
+@@ -305,37 +313,37 @@ static int recv_xfer(int rs, int size)
+       return 0;
+ }
+-static int sync_test(int rs)
++static int sync_test(void)
+ {
+       int ret;
+-      ret = dst_addr ? send_xfer(rs, 4) : recv_xfer(rs, 4);
++      ret = dst_addr ? send_xfer(4) : recv_xfer(4);
+       if (ret)
+               return ret;
+-      return dst_addr ? recv_xfer(rs, 4) : send_xfer(rs, 4);
++      return dst_addr ? recv_xfer(4) : send_xfer(4);
+ }
+-static int run_test(int rs)
++static int run_test(void)
+ {
+       int ret, i, t;
+-      ret = sync_test(rs);
++      ret = sync_test();
+       if (ret)
+               goto out;
+       gettimeofday(&start, NULL);
+       for (i = 0; i < iterations; i++) {
+               for (t = 0; t < transfer_count; t++) {
+-                      ret = dst_addr ? send_xfer(rs, transfer_size) :
+-                                       recv_xfer(rs, transfer_size);
++                      ret = dst_addr ? send_xfer(transfer_size) :
++                                       recv_xfer(transfer_size);
+                       if (ret)
+                               goto out;
+               }
+               for (t = 0; t < transfer_count; t++) {
+-                      ret = dst_addr ? recv_xfer(rs, transfer_size) :
+-                                       send_xfer(rs, transfer_size);
++                      ret = dst_addr ? recv_xfer(transfer_size) :
++                                       send_xfer(transfer_size);
+                       if (ret)
+                               goto out;
+               }
+@@ -357,6 +365,10 @@ static void set_options(int rs)
+                             sizeof buffer_size);
+               rs_setsockopt(rs, SOL_SOCKET, SO_RCVBUF, (void *) &buffer_size,
+                             sizeof buffer_size);
++      } else if (optimization == opt_bandwidth) {
++              val = 1 << 20;
++              rs_setsockopt(rs, SOL_SOCKET, SO_SNDBUF, (void *) &val, sizeof val);
++              rs_setsockopt(rs, SOL_SOCKET, SO_RCVBUF, (void *) &val, sizeof val);
+       }
+       val = 1;
+@@ -364,13 +376,24 @@ static void set_options(int rs)
+       if (flags & MSG_DONTWAIT)
+               rs_fcntl(rs, F_SETFL, O_NONBLOCK);
++
++      if (use_rs) {
++              /* Inline size based on experimental data */
++              if (optimization == opt_latency)
++                      val = 384;
++              else if (optimization == opt_bandwidth)
++                      val = 0;
++              else
++                      val = 64;
++
++              rs_setsockopt(rs, SOL_RDMA, RDMA_INLINE, &val, sizeof val);
++      }
+ }
+-static int server_connect(void)
++static int server_listen(void)
+ {
+-      struct pollfd fds;
+       struct addrinfo hints, *res;
+-      int rs, lrs, ret;
++      int val, ret;
+       memset(&hints, 0, sizeof hints);
+       hints.ai_flags = RAI_PASSIVE;
+@@ -383,30 +406,41 @@ static int server_connect(void)
+       lrs = rs_socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+       if (lrs < 0) {
+               perror("rsocket");
+-              rs = lrs;
++              ret = lrs;
+               goto free;
+       }
+-      set_options(lrs);
+-      rs = 1;
+-      rs = rs_setsockopt(lrs, SOL_SOCKET, SO_REUSEADDR, &rs, sizeof rs);
+-      if (rs) {
++      val = 1;
++      ret = rs_setsockopt(lrs, SOL_SOCKET, SO_REUSEADDR, &val, sizeof val);
++      if (ret) {
+               perror("rsetsockopt SO_REUSEADDR");
+               goto close;
+       }
+-      rs = rs_bind(lrs, res->ai_addr, res->ai_addrlen);
+-      if (rs) {
++      ret = rs_bind(lrs, res->ai_addr, res->ai_addrlen);
++      if (ret) {
+               perror("rbind");
+               goto close;
+       }
+-      rs = rs_listen(lrs, 1);
+-      if (rs) {
++      ret = rs_listen(lrs, 1);
++      if (ret)
+               perror("rlisten");
+-              goto close;
+-      }
++close:
++      if (ret)
++              rs_close(lrs);
++free:
++      freeaddrinfo(res);
++      return ret;
++}
++
++static int server_connect(void)
++{
++      struct pollfd fds;
++      int ret;
++
++      set_options(lrs);
+       do {
+               if (use_async) {
+                       fds.fd = lrs;
+@@ -415,28 +449,26 @@ static int server_connect(void)
+                       ret = do_poll(&fds);
+                       if (ret) {
+                               perror("rpoll");
+-                              goto close;
++                              return ret;
+                       }
+               }
+               rs = rs_accept(lrs, NULL, 0);
+       } while (rs < 0 && (errno == EAGAIN || errno == EWOULDBLOCK));
+-      if (rs < 0)
++      if (rs < 0) {
++              ret = rs;
+               perror("raccept");
++      }
+       set_options(rs);
+-close:
+-      rs_close(lrs);
+-free:
+-      freeaddrinfo(res);
+-      return rs;
++      return ret;
+ }
+ static int client_connect(void)
+ {
+       struct addrinfo *res;
+       struct pollfd fds;
+-      int ret, rs, err;
++      int ret, err;
+       socklen_t len;
+       ret = getaddrinfo(dst_addr, port, NULL, &res);
+@@ -448,6 +480,7 @@ static int client_connect(void)
+       rs = rs_socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+       if (rs < 0) {
+               perror("rsocket");
++              ret = rs;
+               goto free;
+       }
+@@ -457,40 +490,38 @@ static int client_connect(void)
+       ret = rs_connect(rs, res->ai_addr, res->ai_addrlen);
+       if (ret && (errno != EINPROGRESS)) {
+               perror("rconnect");
+-              goto err;
++              goto close;
+       }
+-      if (errno == EINPROGRESS) {
++      if (ret && (errno == EINPROGRESS)) {
+               fds.fd = rs;
+               fds.events = POLLOUT;
+               ret = do_poll(&fds);
+               if (ret)
+-                      goto err;
++                      goto close;
+               len = sizeof err;
+               ret = rs_getsockopt(rs, SOL_SOCKET, SO_ERROR, &err, &len);
+               if (ret)
+-                      goto err;
++                      goto close;
+               if (err) {
+                       ret = -1;
+                       errno = err;
+                       perror("async rconnect");
+-                      goto err;
+               }
+       }
++close:
++      if (ret)
++              rs_close(rs);
+ free:
+       freeaddrinfo(res);
+-      return rs;
+-err:
+-      freeaddrinfo(res);
+-      rs_close(rs);
+       return ret;
+ }
+ static int run(void)
+ {
+-      int i, rs, ret = 0;
++      int i, ret = 0;
+       buf = malloc(!custom ? test_size[TEST_CNT - 1].size : transfer_size);
+       if (!buf) {
+@@ -498,29 +529,45 @@ static int run(void)
+               return -1;
+       }
+-      rs = dst_addr ? client_connect() : server_connect();
+-      if (rs < 0) {
+-              ret = rs;
+-              goto free;
++      if (!dst_addr) {
++              ret = server_listen();
++              if (ret)
++                      goto free;
+       }
+       printf("%-10s%-8s%-8s%-8s%-8s%8s %10s%13s\n",
+              "name", "bytes", "xfers", "iters", "total", "time", "Gb/sec", "usec/xfer");
+       if (!custom) {
++              optimization = opt_latency;
++              ret = dst_addr ? client_connect() : server_connect();
++              if (ret)
++                      goto free;
++
+               for (i = 0; i < TEST_CNT; i++) {
+                       if (test_size[i].option > size_option)
+                               continue;
+                       init_latency_test(test_size[i].size);
+-                      run_test(rs);
++                      run_test();
+               }
++              rs_shutdown(rs, SHUT_RDWR);
++              rs_close(rs);
++
++              optimization = opt_bandwidth;
++              ret = dst_addr ? client_connect() : server_connect();
++              if (ret)
++                      goto free;
+               for (i = 0; i < TEST_CNT; i++) {
+                       if (test_size[i].option > size_option)
+                               continue;
+                       init_bandwidth_test(test_size[i].size);
+-                      run_test(rs);
++                      run_test();
+               }
+       } else {
+-              ret = run_test(rs);
++              ret = dst_addr ? client_connect() : server_connect();
++              if (ret)
++                      goto free;
++
++              ret = run_test();
+       }
+       rs_shutdown(rs, SHUT_RDWR);