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);