[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-rdma
Subject: [PATCH 11/16] librdmacm/rs-preload: Use environment variable to set QP size
From: "Hefty, Sean" <sean.hefty () intel ! com>
Date: 2012-05-30 17:21:44
Message-ID: 1828884A29C6694DAF28B7E6B8A8237346A24C19 () ORSMSX101 ! amr ! corp ! intel ! com
[Download RAW message or body]
Allow the user to specify the size of the send/receive queues
and inline data size through environment variables:
RS_SQ_SIZE, RS_RQ_SIZE, and RS_INLINE.
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
---
src/preload.c | 39 +++++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/src/preload.c b/src/preload.c
index 99afd26..d21389f 100644
--- a/src/preload.c
+++ b/src/preload.c
@@ -97,6 +97,10 @@ static int (*real_fcntl)(int socket, int cmd, ... /* arg */);
static struct index_map idm;
static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
+static int sq_size;
+static int rq_size;
+static int sq_inline;
+
enum fd_type {
fd_normal,
fd_rsocket
@@ -196,6 +200,23 @@ static enum fd_type fd_close(int index, int *fd)
return type;
}
+void getenv_options(void)
+{
+ char *var;
+
+ var = getenv("RS_SQ_SIZE");
+ if (var)
+ sq_size = atoi(var);
+
+ var = getenv("RS_RQ_SIZE");
+ if (var)
+ rq_size = atoi(var);
+
+ var = getenv("RS_INLINE");
+ if (var)
+ sq_inline = atoi(var);
+}
+
static void init_preload(void)
{
static int init;
@@ -231,6 +252,8 @@ static void init_preload(void)
real_setsockopt = dlsym(RTLD_NEXT, "setsockopt");
real_getsockopt = dlsym(RTLD_NEXT, "getsockopt");
real_fcntl = dlsym(RTLD_NEXT, "fcntl");
+
+ getenv_options();
init = 1;
out:
pthread_mutex_unlock(&mut);
@@ -285,6 +308,21 @@ err:
return ret;
}
+/*
+ * Use defaults on failure.
+ */
+void set_rsocket_options(int rsocket)
+{
+ if (sq_size)
+ rsetsockopt(rsocket, SOL_RDMA, RDMA_SQSIZE, &sq_size, sizeof sq_size);
+
+ if (rq_size)
+ rsetsockopt(rsocket, SOL_RDMA, RDMA_RQSIZE, &rq_size, sizeof rq_size);
+
+ if (sq_inline)
+ rsetsockopt(rsocket, SOL_RDMA, RDMA_INLINE, &sq_inline, sizeof sq_inline);
+}
+
int socket(int domain, int type, int protocol)
{
static __thread int recursive;
@@ -303,6 +341,7 @@ int socket(int domain, int type, int protocol)
recursive = 0;
if (ret >= 0) {
fd_store(index, ret, fd_rsocket);
+ set_rsocket_options(ret);
return index;
}
fd_close(index, &ret);
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic