From d8d9d7a732343ed06518d582b204090bf1864b0a Mon Sep 17 00:00:00 2001 From: Daniel Bar-On Date: Thu, 11 May 2017 14:20:22 +0000 Subject: [PATCH] msg/async/rdma: automatically set RDMAV_HUGEPAGES_SAFE according to conf Signed-off-by: DanielBar-On --- src/msg/async/rdma/RDMAStack.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/msg/async/rdma/RDMAStack.cc b/src/msg/async/rdma/RDMAStack.cc index 608c4f5c91ce..020dd9853edd 100644 --- a/src/msg/async/rdma/RDMAStack.cc +++ b/src/msg/async/rdma/RDMAStack.cc @@ -516,12 +516,23 @@ RDMAStack::RDMAStack(CephContext *cct, const string &t): NetworkStack(cct, t) // //On RDMA MUST be called before fork // + int rc = ibv_fork_init(); if (rc) { lderr(cct) << __func__ << " failed to call ibv_for_init(). On RDMA must be called before fork. Application aborts." << dendl; ceph_abort(); } + ldout(cct, 1) << __func__ << " ms_async_rdma_enable_hugepage value is: " << cct->_conf->ms_async_rdma_enable_hugepage << dendl; + if (cct->_conf->ms_async_rdma_enable_hugepage) { + rc = setenv("RDMAV_HUGEPAGES_SAFE","1",1); + ldout(cct, 1) << __func__ << " RDMAV_HUGEPAGES_SAFE is set as: " << getenv("RDMAV_HUGEPAGES_SAFE") << dendl; + if (rc) { + lderr(cct) << __func__ << " failed to export RDMA_HUGEPAGES_SAFE. On RDMA must be exported before using huge pages. Application aborts." << dendl; + ceph_abort(); + } + } + //Check ulimit struct rlimit limit; getrlimit(RLIMIT_MEMLOCK, &limit); @@ -548,6 +559,10 @@ RDMAStack::RDMAStack(CephContext *cct, const string &t): NetworkStack(cct, t) RDMAStack::~RDMAStack() { + if (cct->_conf->ms_async_rdma_enable_hugepage) { + unsetenv("RDMAV_HUGEPAGES_SAFE"); //remove env variable on destruction + } + delete dispatcher; } -- 2.47.3