You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by li...@apache.org on 2013/04/02 20:18:58 UTC

svn commit: r1463658 - in /hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver: HRegion.java MemStore.java

Author: liyin
Date: Tue Apr  2 18:18:54 2013
New Revision: 1463658

URL: http://svn.apache.org/r1463658
Log:
[0.89-fb] [HBASE-8228] Enable finer profiling for a memstore snapshot. -- TEMPORARY DIFF

Author: aaiyer

Summary:
more instrumentation

We do not intend to have this diff around for a while. Will be
reverted after getting the info we need to track the outliers.

Test Plan: push to titan025 and get the data to understand this.

Reviewers: liyintang, rshroff, adela

Reviewed By: rshroff

CC: hbase-eng@

Differential Revision: https://phabricator.fb.com/D758003

Task ID: 2237950

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=1463658&r1=1463657&r2=1463658&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java Tue Apr  2 18:18:54 2013
@@ -1383,6 +1383,7 @@ public class HRegion implements HeapSize
     status.setStatus("Obtaining lock to block concurrent updates");
     long t0, t1;
     long t01 = 0, t02 = 0, t03 = 0, t04 = 0, t05 = 0;
+    StringBuilder sb = new StringBuilder();
     this.updatesLock.writeLock().lock();
     t0 = EnvironmentEdgeManager.currentTimeMillis();
     status.setStatus("Preparing to flush by snapshotting stores");
@@ -1391,35 +1392,40 @@ public class HRegion implements HeapSize
     List<StoreFlusher> storeFlushers = new ArrayList<StoreFlusher>(
         stores.size());
     t01 = EnvironmentEdgeManager.currentTimeMillis();
+    sb.append("setStatus : " + (t01-t0) + ", ");
     try {
       sequenceId = (wal == null)? myseqid :
         wal.startCacheFlush(this.regionInfo.getRegionName());
       t02 = EnvironmentEdgeManager.currentTimeMillis();
+      sb.append("startCacheFlush : " + (t02-t01) + ", ");
       completeSequenceId = this.getCompleteCacheFlushSequenceId(sequenceId);
       t03 = EnvironmentEdgeManager.currentTimeMillis();
+      sb.append("getCompleteCacheFlushSeqId : " + (t03-t02) + ", ");
+      long tmp0, tmp1;
       for (Store s : stores.values()) {
+        tmp0 = EnvironmentEdgeManager.currentTimeMillis();
         storeFlushers.add(s.getStoreFlusher(completeSequenceId));
+        tmp1 = EnvironmentEdgeManager.currentTimeMillis();
+        sb.append("getFlusher : " + s.getColumnFamilyName() + " : " + (tmp1-tmp0));
       }
       t04 = EnvironmentEdgeManager.currentTimeMillis();
+      sb.append(" all getStoreFlusher : " + (t04-t03) + ", ");
 
       // prepare flush (take a snapshot)
       for (StoreFlusher flusher : storeFlushers) {
+        tmp0 = EnvironmentEdgeManager.currentTimeMillis();
         flusher.prepare();
+        tmp1 = EnvironmentEdgeManager.currentTimeMillis();
+        sb.append("prepare : " + flusher.toString() + " : " + (tmp1-tmp0));
       }
       t05 = EnvironmentEdgeManager.currentTimeMillis();
+      sb.append(" all prepare() : " + (t05-t04) + " ms. ");
     } finally {
       this.updatesLock.writeLock().unlock();
       t1 = EnvironmentEdgeManager.currentTimeMillis();
       LOG.debug("Finished snapshotting. Held region-wide updates lock for "
         + (t1-t0) + " ms."
-        + " parts: "
-        + (t01-t0) +  " ms. "
-        + (t02-t01) +  " ms. "
-        + (t03-t02) +  " ms. "
-        + (t04-t03) +  " ms. "
-        + (t05-t04) +  " ms. "
-        + (t1-t05) +  " ms. "
-        );
+        + sb.toString());
     }
 
     status.setStatus("Flushing stores");

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java?rev=1463658&r1=1463657&r2=1463658&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java Tue Apr  2 18:18:54 2013
@@ -40,6 +40,7 @@ import org.apache.hadoop.hbase.io.HeapSi
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.ClassSize;
 import org.apache.hadoop.hbase.util.CollectionBackedScanner;
+import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 
 /**
  * The MemStore holds in-memory modifications to the Store.  Modifications
@@ -124,7 +125,10 @@ public class MemStore implements HeapSiz
    * To get the snapshot made by this method, use {@link #getSnapshot()}
    */
   void snapshot() {
+    long t0 = 0, t1 = 0, t2 = 0;
+    t0 = EnvironmentEdgeManager.currentTimeMillis();
     this.lock.writeLock().lock();
+    t1 = EnvironmentEdgeManager.currentTimeMillis();
     try {
       // If snapshot currently has entries, then flusher failed or didn't call
       // cleanup.  Log a warning.
@@ -145,6 +149,9 @@ public class MemStore implements HeapSiz
       }
     } finally {
       this.lock.writeLock().unlock();
+      t2 = EnvironmentEdgeManager.currentTimeMillis();
+      LOG.debug("Snapshotting " + this.toString() + " took "
+          + (t2-t1) + " ms. To grab the writeLock : " + (t1 - t0));
     }
   }