From: Sean Hefty Date: Wed, 23 May 2012 18:32:46 +0000 (-0700) Subject: rstream: Add option to specify size of send/recv buffers X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=5d7bad8100e49be6a8002f6182023236927bbd02;p=~shefty%2Flibrdmacm.git rstream: Add option to specify size of send/recv buffers Signed-off-by: Sean Hefty --- diff --git a/examples/rstream.c b/examples/rstream.c index c440f04c..7fa537e5 100644 --- a/examples/rstream.c +++ b/examples/rstream.c @@ -81,6 +81,7 @@ static int size_option; static int iterations = 1; static int transfer_size = 1000; static int transfer_count = 1000; +static int buffer_size; static char test_name[9] = "custom"; static char *port = "7471"; static char *dst_addr; @@ -353,17 +354,19 @@ static void set_options(int rs) long long bytes; socklen_t size; - bytes = transfer_size * transfer_count * iterations; + bytes = transfer_size * transfer_count; for (optname = SO_SNDBUF; ; optname = SO_RCVBUF) { size = sizeof val; ret = rs_getsockopt(rs, SOL_SOCKET, optname, (void *) &val, &size); if (ret) break; - if (val < bytes) { - size = sizeof val; - val = ((val << 2) > bytes) ? bytes : (val << 2); - rs_setsockopt(rs, SOL_SOCKET, optname, (void *) &val, size); + if (val < bytes || buffer_size) { + size = sizeof buffer_size; + if (!buffer_size) + buffer_size = ((val << 2) > bytes) ? bytes : (val << 2); + rs_setsockopt(rs, SOL_SOCKET, optname, + (void *) &buffer_size, size); } if (optname == SO_RCVBUF) @@ -586,7 +589,7 @@ int main(int argc, char **argv) { int op, ret; - while ((op = getopt(argc, argv, "s:b:I:C:S:p:T:")) != -1) { + while ((op = getopt(argc, argv, "s:b:B:I:C:S:p:T:")) != -1) { switch (op) { case 's': dst_addr = optarg; @@ -594,6 +597,9 @@ int main(int argc, char **argv) case 'b': src_addr = optarg; break; + case 'B': + buffer_size = atoi(optarg); + break; case 'I': custom = 1; iterations = atoi(optarg); @@ -621,6 +627,7 @@ int main(int argc, char **argv) printf("usage: %s\n", argv[0]); printf("\t[-s server_address]\n"); printf("\t[-b bind_address]\n"); + printf("\t[-B buffer_size]\n"); printf("\t[-I iterations]\n"); printf("\t[-C transfer_count]\n"); printf("\t[-S transfer_size or all]\n"); diff --git a/man/rstream.1 b/man/rstream.1 index 0909932f..ea87b951 100644 --- a/man/rstream.1 +++ b/man/rstream.1 @@ -4,7 +4,7 @@ rstream \- streaming over RDMA ping-pong test. .SH SYNOPSIS .sp .nf -\fIrstream\fR [-s server_address] [-b bind_address] +\fIrstream\fR [-s server_address] [-b bind_address] [-B buffer_size] [-I iterations] [-C transfer_count] [-S transfer_size] [-p server_port] [-T test_option] .fi @@ -21,6 +21,9 @@ This option must be specified by the client. \-b bind_address The local network address to bind to. .TP +\-B buffer_size +Indicates the size of the send and receive network buffers. +.TP \-I iterations The number of times that the specified number of messages will be exchanged between the client and server. (default 1000)