You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@crail.apache.org by pe...@apache.org on 2018/04/10 11:19:45 UTC

[06/16] incubator-crail git commit: NvmfRegisteredBufferCache: simplify

NvmfRegisteredBufferCache: simplify

Simplify buffer cache by do not hold references to CrailBuffers.
We only return the corresponding key now instead of a wrapped
KeyedNativeBuffer.

Signed-off-by: Jonas Pfefferle <pe...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-crail/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-crail/commit/db754995
Tree: http://git-wip-us.apache.org/repos/asf/incubator-crail/tree/db754995
Diff: http://git-wip-us.apache.org/repos/asf/incubator-crail/diff/db754995

Branch: refs/heads/master
Commit: db754995cb9ce42e97bbd131a117a315877c31f0
Parents: 50cf268
Author: Jonas Pfefferle <pe...@apache.org>
Authored: Mon Apr 9 15:22:41 2018 +0200
Committer: Jonas Pfefferle <pe...@apache.org>
Committed: Tue Apr 10 13:19:02 2018 +0200

----------------------------------------------------------------------
 storage-nvmf/pom.xml                            |  2 +-
 .../nvmf/client/NvmfRegisteredBufferCache.java  | 51 ++++----------------
 .../nvmf/client/NvmfStorageEndpoint.java        |  9 ++--
 3 files changed, 15 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/db754995/storage-nvmf/pom.xml
----------------------------------------------------------------------
diff --git a/storage-nvmf/pom.xml b/storage-nvmf/pom.xml
index 20ad294..0e06569 100644
--- a/storage-nvmf/pom.xml
+++ b/storage-nvmf/pom.xml
@@ -24,7 +24,7 @@
     <dependency>
       <groupId>com.ibm.jnvmf</groupId>
       <artifactId>jnvmf</artifactId>
-      <version>1.0</version>
+      <version>1.2</version>
     </dependency>
     <dependency>
       <groupId>log4j</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/db754995/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfRegisteredBufferCache.java
----------------------------------------------------------------------
diff --git a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfRegisteredBufferCache.java b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfRegisteredBufferCache.java
index 0a364e8..ec9ee52 100644
--- a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfRegisteredBufferCache.java
+++ b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfRegisteredBufferCache.java
@@ -21,7 +21,6 @@ package org.apache.crail.storage.nvmf.client;
 
 import com.ibm.jnvmf.Freeable;
 import com.ibm.jnvmf.KeyedNativeBuffer;
-import com.ibm.jnvmf.NativeByteBuffer;
 import com.ibm.jnvmf.QueuePair;
 import org.apache.crail.CrailBuffer;
 
@@ -31,68 +30,36 @@ import java.util.concurrent.ConcurrentHashMap;
 
 class NvmfRegisteredBufferCache implements Freeable {
 	private final QueuePair queuePair;
-	private final Map<CrailBuffer, KeyedNativeBuffer> bufferMap;
 	private final Map<Long, KeyedNativeBuffer> regionMap;
 	private boolean valid;
 
 	public NvmfRegisteredBufferCache(QueuePair queuePair) {
 		this.queuePair = queuePair;
-		this.bufferMap = new ConcurrentHashMap<>();
 		this.regionMap = new ConcurrentHashMap<>();
 		this.valid = true;
 	}
 
-	static class Buffer extends NativeByteBuffer implements KeyedNativeBuffer {
-		private final KeyedNativeBuffer registeredRegionBuffer;
-
-		Buffer(CrailBuffer buffer, KeyedNativeBuffer registeredRegionBuffer) {
-			super(buffer.getByteBuffer());
-			this.registeredRegionBuffer = registeredRegionBuffer;
-		}
-
-		@Override
-		public int getRemoteKey() {
-			return registeredRegionBuffer.getRemoteKey();
-		}
-
-		@Override
-		public int getLocalKey() {
-			return registeredRegionBuffer.getLocalKey();
-		}
-	}
-
-	KeyedNativeBuffer get(CrailBuffer buffer) throws IOException {
-		KeyedNativeBuffer keyedNativeBuffer = bufferMap.get(buffer);
+	int getRemoteKey(CrailBuffer buffer) throws IOException {
+		CrailBuffer regionBuffer = buffer.getRegion();
+		KeyedNativeBuffer keyedNativeBuffer = regionMap.get(regionBuffer.address());
 		if (keyedNativeBuffer == null) {
-			CrailBuffer regionBuffer = buffer.getRegion();
-			keyedNativeBuffer = regionMap.get(regionBuffer.address());
-			if (keyedNativeBuffer == null) {
-				/* region has not been registered yet */
-				keyedNativeBuffer = queuePair.registerMemory(regionBuffer.getByteBuffer());
-				KeyedNativeBuffer prevKeyedNativeBuffer =
-						regionMap.putIfAbsent(keyedNativeBuffer.getAddress(), keyedNativeBuffer);
-				if (prevKeyedNativeBuffer != null) {
-					/* someone registered the same region in parallel */
-					keyedNativeBuffer.free();
-					keyedNativeBuffer = prevKeyedNativeBuffer;
-				}
-			}
-			keyedNativeBuffer = new Buffer(buffer, keyedNativeBuffer);
+			/* region has not been registered yet */
+			keyedNativeBuffer = queuePair.registerMemory(regionBuffer.getByteBuffer());
 			KeyedNativeBuffer prevKeyedNativeBuffer =
-					bufferMap.putIfAbsent(buffer, keyedNativeBuffer);
+					regionMap.putIfAbsent(keyedNativeBuffer.getAddress(), keyedNativeBuffer);
 			if (prevKeyedNativeBuffer != null) {
-				/* someone added the same buffer parallel */
+				/* someone registered the same region in parallel */
 				keyedNativeBuffer.free();
 				keyedNativeBuffer = prevKeyedNativeBuffer;
 			}
 		}
-		return keyedNativeBuffer;
+		return keyedNativeBuffer.getRemoteKey();
 	}
 
 
 	@Override
 	public void free() throws IOException {
-		for (KeyedNativeBuffer buffer : bufferMap.values()) {
+		for (KeyedNativeBuffer buffer : regionMap.values()) {
 			buffer.free();
 		}
 		valid = false;

http://git-wip-us.apache.org/repos/asf/incubator-crail/blob/db754995/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
----------------------------------------------------------------------
diff --git a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
index 8188d82..e17a013 100644
--- a/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
+++ b/storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java
@@ -206,10 +206,11 @@ public class NvmfStorageEndpoint implements StorageEndpoint {
 		/* TODO: on read this potentially overwrites data beyond the set limit */
 		short numLogicalBlocks = (short)(getNumLogicalBlocks(buffer) - 1);
 		sqe.setNumberOfLogicalBlocks(numLogicalBlocks);
-		KeyedNativeBuffer registeredBuffer = registeredBufferCache.get(buffer);
-		registeredBuffer.position(buffer.position());
-		registeredBuffer.limit(registeredBuffer.position() + (numLogicalBlocks + 1) * getLBADataSize());
-		command.getCommandCapsule().setSglDescriptor(registeredBuffer);
+		int remoteKey = registeredBufferCache.getRemoteKey(buffer);
+		KeyedSglDataBlockDescriptor dataBlockDescriptor = sqe.getKeyedSglDataBlockDescriptor();
+		dataBlockDescriptor.setAddress(buffer.address() + buffer.position());
+		dataBlockDescriptor.setLength(buffer.remaining());
+		dataBlockDescriptor.setKey(remoteKey);
 
 		command.execute(response);