You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2011/12/12 19:21:38 UTC

svn commit: r1213345 - in /hbase/trunk/src/main/java/org/apache/hadoop/hbase: io/hfile/HFile.java io/hfile/HFileReaderV1.java io/hfile/HFileReaderV2.java regionserver/metrics/RegionServerMetrics.java

Author: stack
Date: Mon Dec 12 18:21:37 2011
New Revision: 1213345

URL: http://svn.apache.org/viewvc?rev=1213345&view=rev
Log:
HBASE-4989 Metrics to measure sequential reads and random reads separately

Modified:
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV1.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java?rev=1213345&r1=1213344&r2=1213345&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java Mon Dec 12 18:21:37 2011
@@ -153,15 +153,19 @@ public class HFile {
    */
   public final static int MIN_NUM_HFILE_PATH_LEVELS = 5;
 
-  // For measuring latency of "typical" reads and writes
+  // For measuring latency of "sequential" reads and writes
   static volatile AtomicInteger readOps = new AtomicInteger();
   static volatile AtomicLong readTimeNano = new AtomicLong();
   static volatile AtomicInteger writeOps = new AtomicInteger();
   static volatile AtomicLong writeTimeNano = new AtomicLong();
+  // For measuring latency of pread
+  static volatile AtomicInteger preadOps = new AtomicInteger();
+  static volatile AtomicLong preadTimeNano = new AtomicLong();
 
   // for test purpose
   public static volatile AtomicLong dataBlockReadCnt = new AtomicLong(0);
 
+  // number of sequential reads
   public static final int getReadOps() {
     return readOps.getAndSet(0);
   }
@@ -170,6 +174,15 @@ public class HFile {
     return readTimeNano.getAndSet(0) / 1000000;
   }
 
+  // number of positional reads
+  public static final int getPreadOps() {
+    return preadOps.getAndSet(0);
+  }
+
+  public static final long getPreadTimeMs() {
+    return preadTimeNano.getAndSet(0) / 1000000;
+  }
+
   public static final int getWriteOps() {
     return writeOps.getAndSet(0);
   }

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV1.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV1.java?rev=1213345&r1=1213344&r2=1213345&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV1.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV1.java Mon Dec 12 18:21:37 2011
@@ -237,8 +237,8 @@ public class HFileReaderV1 extends Abstr
       hfileBlock.expectType(BlockType.META);
 
       long delta = System.nanoTime() - startTimeNs;
-      HFile.readTimeNano.addAndGet(delta);
-      HFile.readOps.incrementAndGet();
+      HFile.preadTimeNano.addAndGet(delta);
+      HFile.preadOps.incrementAndGet();
       getSchemaMetrics().updateOnCacheMiss(BlockCategory.META, false, delta);
 
       // Cache the block
@@ -316,8 +316,13 @@ public class HFileReaderV1 extends Abstr
       ByteBuffer buf = hfileBlock.getBufferWithoutHeader();
 
       long delta = System.nanoTime() - startTimeNs;
-      HFile.readTimeNano.addAndGet(delta);
-      HFile.readOps.incrementAndGet();
+      if (pread) {
+        HFile.preadTimeNano.addAndGet(delta);
+        HFile.preadOps.incrementAndGet();
+      } else {
+        HFile.readTimeNano.addAndGet(delta);
+        HFile.readOps.incrementAndGet();
+      }
       getSchemaMetrics().updateOnCacheMiss(BlockCategory.DATA, isCompaction,
           delta);
 

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java?rev=1213345&r1=1213344&r2=1213345&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java Mon Dec 12 18:21:37 2011
@@ -206,8 +206,8 @@ public class HFileReaderV2 extends Abstr
       passSchemaMetricsTo(metaBlock);
 
       long delta = System.nanoTime() - startTimeNs;
-      HFile.readTimeNano.addAndGet(delta);
-      HFile.readOps.incrementAndGet();
+      HFile.preadTimeNano.addAndGet(delta);
+      HFile.preadOps.incrementAndGet();
       getSchemaMetrics().updateOnCacheMiss(BlockCategory.META, false, delta);
 
       // Cache the block
@@ -283,8 +283,13 @@ public class HFileReaderV2 extends Abstr
       BlockCategory blockCategory = dataBlock.getBlockType().getCategory();
 
       long delta = System.nanoTime() - startTimeNs;
-      HFile.readTimeNano.addAndGet(delta);
-      HFile.readOps.incrementAndGet();
+      if (pread) {
+        HFile.preadTimeNano.addAndGet(delta);
+        HFile.preadOps.incrementAndGet();
+      } else {
+        HFile.readTimeNano.addAndGet(delta);
+        HFile.readOps.incrementAndGet();
+      }
       getSchemaMetrics().updateOnCacheMiss(blockCategory, isCompaction, delta);
 
       // Cache the block

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java?rev=1213345&r1=1213344&r2=1213345&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java Mon Dec 12 18:21:37 2011
@@ -186,12 +186,18 @@ public class RegionServerMetrics impleme
     new MetricsIntValue("flushQueueSize", registry);
 
   /**
-   * filesystem read latency
+   * filesystem sequential read latency
    */
   public final MetricsTimeVaryingRate fsReadLatency =
     new MetricsTimeVaryingRate("fsReadLatency", registry);
 
   /**
+   * filesystem positional read latency
+   */
+  public final MetricsTimeVaryingRate fsPreadLatency =
+    new MetricsTimeVaryingRate("fsPreadLatency", registry);
+
+  /**
    * filesystem write latency
    */
   public final MetricsTimeVaryingRate fsWriteLatency =
@@ -317,9 +323,12 @@ public class RegionServerMetrics impleme
       addHLogMetric(HLog.getWriteTime(), this.fsWriteLatency);
       addHLogMetric(HLog.getWriteSize(), this.fsWriteSize);
       addHLogMetric(HLog.getSyncTime(), this.fsSyncLatency);
-      // HFile metrics
-      int ops = HFile.getReadOps();
+      // HFile metrics, sequential reads
+      int ops = HFile.getReadOps(); 
       if (ops != 0) this.fsReadLatency.inc(ops, HFile.getReadTimeMs());
+      // HFile metrics, positional reads
+      ops = HFile.getPreadOps(); 
+      if (ops != 0) this.fsPreadLatency.inc(ops, HFile.getPreadTimeMs());
       /* NOTE: removed HFile write latency.  2 reasons:
        * 1) Mixing HLog latencies are far higher priority since they're 
        *      on-demand and HFile is used in background (compact/flush)