]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
msg/async/rdma: simplify chunk::read implementation
authorChangcheng Liu <changcheng.liu@aliyun.com>
Mon, 1 Jul 2019 05:18:44 +0000 (13:18 +0800)
committerChangcheng Liu <changcheng.liu@aliyun.com>
Fri, 23 Aug 2019 02:45:22 +0000 (10:45 +0800)
1. offload chunk::read without managing bound.
2. reset chunk::offset & chunk::bound before releasing to pool.

Signed-off-by: Changcheng Liu <changcheng.liu@aliyun.com>
src/msg/async/rdma/Infiniband.cc
src/msg/async/rdma/RDMAConnectedSocketImpl.cc

index f22034eb0d79d9243c1c795298ae40d3c2b61a53..0d2fdebb4d370d1391db16306801441b34b7d9cc 100644 (file)
@@ -541,16 +541,10 @@ uint32_t Infiniband::MemoryManager::Chunk::get_bound()
 uint32_t Infiniband::MemoryManager::Chunk::read(char* buf, uint32_t len)
 {
   uint32_t left = get_size();
-  if (left >= len) {
-    memcpy(buf, buffer+offset, len);
-    offset += len;
-    return len;
-  } else {
-    memcpy(buf, buffer+offset, left);
-    offset = 0;
-    bound = 0;
-    return left;
-  }
+  uint32_t read_len = left <= len ? left : len;
+  memcpy(buf, buffer + offset, read_len);
+  offset += read_len;
+  return read_len;
 }
 
 uint32_t Infiniband::MemoryManager::Chunk::write(char* buf, uint32_t len)
index 13b61654c4e8a2f039af877ce8c62fbc77a14a39..e8c7d4745b5bedd44dc41e9cb5b287eaf25227e4 100644 (file)
@@ -299,6 +299,7 @@ ssize_t RDMAConnectedSocketImpl::read(char* buf, size_t len)
     chunk->prepare_read(response->byte_len);
     worker->perf_logger->inc(l_msgr_rdma_rx_bytes, response->byte_len);
     if (response->byte_len == 0) {
+      chunk->clear();
       dispatcher->perf_logger->inc(l_msgr_rdma_rx_fin);
       if (connected) {
         error = ECONNRESET;
@@ -315,6 +316,7 @@ ssize_t RDMAConnectedSocketImpl::read(char* buf, size_t len)
         ldout(cct, 25) << __func__ << " buffers add a chunk: " << chunk->get_offset() << ":" << chunk->get_bound() << dendl;
       } else {
         read += chunk->read(buf+read, response->byte_len);
+        chunk->clear();
         dispatcher->post_chunk_to_pool(chunk);
         update_post_backlog();
       }
@@ -347,6 +349,7 @@ ssize_t RDMAConnectedSocketImpl::read_buffers(char* buf, size_t len)
     read += tmp;
     ldout(cct, 25) << __func__ << " this iter read: " << tmp << " bytes." << " offset: " << (*c)->get_offset() << " ,bound: " << (*c)->get_bound()  << ". Chunk:" << *c  << dendl;
     if ((*c)->get_size() == 0) {
+      (*c)->clear();
       dispatcher->post_chunk_to_pool(*c);
       update_post_backlog();
       ldout(cct, 25) << __func__ << " one chunk over." << dendl;