From 6bb6cdaea7c08c3a68926f0cdd561f0d6bc5c81b Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sun, 20 Sep 2020 19:51:47 +0200 Subject: [PATCH] count disk reads --- .../lucares/pdb/diskstorage/DiskStorage.java | 3 +++ .../pdb/diskstorage/DiskStoreStats.java | 24 +++++++++++++++++++ .../pdb/datastore/internal/DataStore.java | 6 +++++ 3 files changed, 33 insertions(+) create mode 100644 block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStoreStats.java diff --git a/block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStorage.java b/block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStorage.java index e70d5a5..36436d5 100644 --- a/block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStorage.java +++ b/block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStorage.java @@ -53,6 +53,7 @@ public class DiskStorage implements AutoCloseable { try { LOGGER.trace("read block={} file={}", blockOffset, relativeDatabaseFileForLogging); + DiskStoreStats.incrementDiskRead(); final var byteBuffer = fileChannel.map(MapMode.READ_WRITE, blockOffset, blockSize); return new DiskBlock(blockOffset, byteBuffer); @@ -227,6 +228,7 @@ public class DiskStorage implements AutoCloseable { private FreeListNode readFreeListNode(final long freeListNodePosition) throws IOException { final var freeListNode = ByteBuffer.allocate(FREE_LIST_NODE_SIZE); + DiskStoreStats.incrementDiskRead(); fileChannel.read(freeListNode, freeListNodePosition); final long offset = freeListNodePosition; final long next = freeListNode.getLong(FREE_LIST_NEXT_POINTER); @@ -250,6 +252,7 @@ public class DiskStorage implements AutoCloseable { private long readFreeListRootNodePosition() throws IOException { final var freeListFirstBlock = ByteBuffer.allocate(8); + DiskStoreStats.incrementDiskRead(); fileChannel.read(freeListFirstBlock, FREE_LIST_ROOT_OFFSET); return freeListFirstBlock.getLong(0); } diff --git a/block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStoreStats.java b/block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStoreStats.java new file mode 100644 index 0000000..7de30d9 --- /dev/null +++ b/block-storage/src/main/java/org/lucares/pdb/diskstorage/DiskStoreStats.java @@ -0,0 +1,24 @@ +package org.lucares.pdb.diskstorage; + +import java.util.concurrent.atomic.AtomicLong; + +public class DiskStoreStats { + private static final AtomicLong diskRead = new AtomicLong(0); + + public static void incrementDiskRead() { + diskRead.incrementAndGet(); + } + + public static void resetDiskRead() { + diskRead.set(0); + } + + public static long getDiskRead() { + return diskRead.get(); + } + + public static long getAndResetDiskRead() { + + return diskRead.getAndSet(0); + } +} diff --git a/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java b/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java index a53019e..a908994 100644 --- a/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java +++ b/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java @@ -32,6 +32,7 @@ import org.lucares.pdb.datastore.lang.Expression; import org.lucares.pdb.datastore.lang.ExpressionToDocIdVisitor; import org.lucares.pdb.datastore.lang.NewProposerParser; import org.lucares.pdb.datastore.lang.QueryLanguageParser; +import org.lucares.pdb.diskstorage.DiskStoreStats; import org.lucares.pdb.map.PersistentMap; import org.lucares.utils.Preconditions; import org.lucares.utils.cache.HotEntryCache; @@ -235,11 +236,16 @@ public class DataStore implements AutoCloseable { public List search(final Query query) { try { + DiskStoreStats.resetDiskRead(); final List result = new ArrayList<>(); final PartitionLongList docIdsList = executeQuery(query); LOGGER.trace("query {} found {} docs", query, docIdsList.size()); + + DiskStoreStats.incrementDiskRead(); + LOGGER.info("Disk reads - search {}", DiskStoreStats.getAndResetDiskRead()); final List docs = mapDocIdsToDocs(docIdsList); + LOGGER.info("Disk reads - mappedToDocIds {}", DiskStoreStats.getAndResetDiskRead()); result.addAll(docs); return result;