Version: 1
-Previous: fb03f73f601f5cc83f9dbcb915d6847b5941f847
-Head: c63dfc3e730deb332351a07cb5b6f10ac6eaa5fb
+Previous: ed754b21d32264f19123eec367d5bce87ede577c
+Head: 4b2279b85572734eb819923cd6b82757081f2400
Applied:
destroy_cqs: 66410c265b2661e16b7f6126bcc4ea5c7e1af1bd
conn-err: ac46465ae6061b06f005ba9b49b371c9eb0d2325
pre-socket: b65c54063459dcfedd74529aaa8571b77698acea
rs-states: 91edc2c3d92307144d82c22b5928ebd3ef6f21e8
rs-recv-hang: 87f678725a461861b9453cc205ae91a800630c14
- rstream-opt: 1176abc686ada043ea9adb51219d45c945faa711
- refresh-temp: c63dfc3e730deb332351a07cb5b6f10ac6eaa5fb
+ rstream-opt: 4b2279b85572734eb819923cd6b82757081f2400
Unapplied:
Hidden:
+++ /dev/null
-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);
Bottom: 5762ea9f26bec43ae89d7dd2fded0b8cbe158a35
-Top: 5762ea9f26bec43ae89d7dd2fded0b8cbe158a35
+Top: a7ddec5b59a3e440d30c927ad2c1249b74e8b753
Author: Sean Hefty <sean.hefty@intel.com>
Date: 2012-05-27 14:07:42 -0700
---
-
+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);