HBASE-29731 Add L1 and L2 cache hit/miss caching metrics (#7482)
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
Reviewed-by: Liu Xiao <liuxiao2103@qq.com>
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
index c88a77b..f0b4a07 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
@@ -408,12 +408,22 @@
String L1_CACHE_HIT_COUNT = "l1CacheHitCount";
String L1_CACHE_HIT_COUNT_DESC = "L1 cache hit count.";
+ String L1_CACHE_HIT_CAGHING_COUNT = "l1CacheHitCachingCount";
+ String L1_CACHE_HIT_CAGHING_COUNT_DESC =
+ "Count of the hit on the L1 cache, for cacheable requests";
String L1_CACHE_MISS_COUNT = "l1CacheMissCount";
String L1_CACHE_MISS_COUNT_DESC = "L1 cache miss count.";
+ String L1_CACHE_MISS_CACHING_COUNT = "l1CacheMissCachingCount";
+ String L1_CACHE_MISS_CACHING_COUNT_DESC =
+ "Count of the misses on the L1 cache, for cacheable requests";
String L1_CACHE_HIT_RATIO = "l1CacheHitRatio";
String L1_CACHE_HIT_RATIO_DESC = "L1 cache hit ratio.";
+ String L1_CACHE_HIT_CACHING_RATIO = "l1CacheHitCachingRatio";
+ String L1_CACHE_HIT_CACHING_RATIO_DESC = "Hit Caching ratio of L1 cache";
String L1_CACHE_MISS_RATIO = "l1CacheMissRatio";
String L1_CACHE_MISS_RATIO_DESC = "L1 cache miss ratio.";
+ String L1_CACHE_MISS_CACHING_RATIO = "l1CacheMissCachingRatio";
+ String L1_CACHE_MISS_CACHING_RATIO_DESC = "Miss Caching ratio of L1 cache";
String L2_CACHE_FREE_SIZE = "l2CacheFreeSize";
String L2_CACHE_FREE_SIZE_DESC = "Amount of free bytes in the L2 cache";
String L2_CACHE_SIZE = "l2CacheSize";
@@ -424,12 +434,22 @@
String L2_CACHE_EVICTION_COUNT_DESC = "Count of blocks evicted from the L2 cache";
String L2_CACHE_HIT_COUNT = "l2CacheHitCount";
String L2_CACHE_HIT_COUNT_DESC = "L2 cache hit count.";
+ String L2_CACHE_HIT_CACHING_COUNT = "l2CacheHitCachingCount";
+ String L2_CACHE_HIT_CACHING_COUNT_DESC =
+ "Count of the hit on the L2 cache, for cacheable requests";
String L2_CACHE_MISS_COUNT = "l2CacheMissCount";
String L2_CACHE_MISS_COUNT_DESC = "L2 cache miss count.";
+ String L2_CACHE_MISS_CACHING_COUNT = "l2CacheMissCachingCount";
+ String L2_CACHE_MISS_CACHING_COUNT_DESC =
+ "Count of the misses on the L2 cache, for cacheable requests";
String L2_CACHE_HIT_RATIO = "l2CacheHitRatio";
String L2_CACHE_HIT_RATIO_DESC = "L2 cache hit ratio.";
+ String L2_CACHE_HIT_CACHING_RATIO = "l2CacheHitCachingRatio";
+ String L2_CACHE_HIT_CACHING_RATIO_DESC = "Hit Caching ratio of L2 cache";
String L2_CACHE_MISS_RATIO = "l2CacheMissRatio";
String L2_CACHE_MISS_RATIO_DESC = "L2 cache miss ratio.";
+ String L2_CACHE_MISS_CACHING_RATIO = "l2CacheMissCachingRatio";
+ String L2_CACHE_MISS_CACHING_RATIO_DESC = "Miss Caching ratio of L2 cache";
String RS_START_TIME_NAME = "regionServerStartTime";
String ZOOKEEPER_QUORUM_NAME = "zookeeperQuorum";
String SERVER_NAME_NAME = "serverName";
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
index b214c8f..faeea3e 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
@@ -597,12 +597,20 @@
rsWrap.getL1CacheEvictedCount())
.addGauge(Interns.info(L1_CACHE_HIT_COUNT, L1_CACHE_HIT_COUNT_DESC),
rsWrap.getL1CacheHitCount())
+ .addGauge(Interns.info(L1_CACHE_HIT_CAGHING_COUNT, L1_CACHE_HIT_CAGHING_COUNT_DESC),
+ rsWrap.getL1CacheHitCachingCount())
.addGauge(Interns.info(L1_CACHE_MISS_COUNT, L1_CACHE_MISS_COUNT_DESC),
rsWrap.getL1CacheMissCount())
+ .addGauge(Interns.info(L1_CACHE_MISS_CACHING_COUNT, L1_CACHE_MISS_CACHING_COUNT_DESC),
+ rsWrap.getL1CacheMissCachingCount())
.addGauge(Interns.info(L1_CACHE_HIT_RATIO, L1_CACHE_HIT_RATIO_DESC),
rsWrap.getL1CacheHitRatio())
+ .addGauge(Interns.info(L1_CACHE_HIT_CACHING_RATIO, L1_CACHE_HIT_CACHING_RATIO_DESC),
+ rsWrap.getL1CacheHitCachingRatio())
.addGauge(Interns.info(L1_CACHE_MISS_RATIO, L1_CACHE_MISS_RATIO_DESC),
rsWrap.getL1CacheMissRatio())
+ .addGauge(Interns.info(L1_CACHE_MISS_CACHING_RATIO, L1_CACHE_MISS_CACHING_RATIO_DESC),
+ rsWrap.getL1CacheMissCachingRatio())
.addGauge(Interns.info(L2_CACHE_SIZE, L2_CACHE_SIZE_DESC), rsWrap.getL2CacheSize())
.addGauge(Interns.info(L2_CACHE_FREE_SIZE, L2_CACHE_FREE_SIZE_DESC),
rsWrap.getL2CacheFreeSize())
@@ -611,12 +619,20 @@
rsWrap.getL2CacheEvictedCount())
.addGauge(Interns.info(L2_CACHE_HIT_COUNT, L2_CACHE_HIT_COUNT_DESC),
rsWrap.getL2CacheHitCount())
+ .addGauge(Interns.info(L2_CACHE_HIT_CACHING_COUNT, L2_CACHE_HIT_CACHING_COUNT_DESC),
+ rsWrap.getL2CacheHitCachingCount())
.addGauge(Interns.info(L2_CACHE_MISS_COUNT, L2_CACHE_MISS_COUNT_DESC),
rsWrap.getL2CacheMissCount())
+ .addGauge(Interns.info(L2_CACHE_MISS_CACHING_COUNT, L2_CACHE_MISS_CACHING_COUNT_DESC),
+ rsWrap.getL2CacheMissCachingCount())
.addGauge(Interns.info(L2_CACHE_HIT_RATIO, L2_CACHE_HIT_RATIO_DESC),
rsWrap.getL2CacheHitRatio())
+ .addGauge(Interns.info(L2_CACHE_HIT_CACHING_RATIO, L2_CACHE_HIT_CACHING_RATIO_DESC),
+ rsWrap.getL2CacheHitCachingRatio())
.addGauge(Interns.info(L2_CACHE_MISS_RATIO, L2_CACHE_MISS_RATIO_DESC),
rsWrap.getL2CacheMissRatio())
+ .addGauge(Interns.info(L2_CACHE_MISS_CACHING_RATIO, L2_CACHE_MISS_CACHING_RATIO_DESC),
+ rsWrap.getL2CacheMissCachingRatio())
.addGauge(Interns.info(MOB_FILE_CACHE_COUNT, MOB_FILE_CACHE_COUNT_DESC),
rsWrap.getMobFileCacheCount())
.addGauge(Interns.info(MOB_FILE_CACHE_HIT_PERCENT, MOB_FILE_CACHE_HIT_PERCENT_DESC),
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java
index 5b957d9..240c084 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java
@@ -375,21 +375,41 @@
long getL1CacheHitCount();
/**
+ * Hit Caching count of L1 cache, for cacheable requests only.
+ */
+ long getL1CacheHitCachingCount();
+
+ /**
* Miss count of L1 cache.
*/
long getL1CacheMissCount();
/**
+ * Miss Caching count of L1 cache, for cacheable requests only.
+ */
+ long getL1CacheMissCachingCount();
+
+ /**
* Hit ratio of L1 cache.
*/
double getL1CacheHitRatio();
/**
+ * Hit Caching ratio of L1 cache.
+ */
+ double getL1CacheHitCachingRatio();
+
+ /**
* Miss ratio of L1 cache.
*/
double getL1CacheMissRatio();
/**
+ * Miss Caching ratio of L1 cache.
+ */
+ double getL1CacheMissCachingRatio();
+
+ /**
* Cache size (bytes) of L2 cache
*/
long getL2CacheSize();
@@ -415,21 +435,41 @@
long getL2CacheHitCount();
/**
+ * Hit Caching count of L2 cache, for cacheable requests only.
+ */
+ long getL2CacheHitCachingCount();
+
+ /**
* Miss count of L2 cache.
*/
long getL2CacheMissCount();
/**
+ * Miss Caching count of L2 cache, for cacheable requests only.
+ */
+ long getL2CacheMissCachingCount();
+
+ /**
* Hit ratio of L2 cache.
*/
double getL2CacheHitRatio();
/**
+ * Hit Caching ratio of L2 cache.
+ */
+ double getL2CacheHitCachingRatio();
+
+ /**
* Miss ratio of L2 cache.
*/
double getL2CacheMissRatio();
/**
+ * Miss Caching ratio of L2 cache.
+ */
+ double getL2CacheMissCachingRatio();
+
+ /**
* Force a re-computation of the metrics.
*/
void forceRecompute();
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java
index c8f7f96..40a6bdf 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java
@@ -374,41 +374,81 @@
}
@Override
+ public long getL1CacheHitCachingCount() {
+ return this.l1Stats != null ? this.l1Stats.getHitCachingCount() : 0L;
+ }
+
+ @Override
public long getL1CacheMissCount() {
return this.l1Stats != null ? this.l1Stats.getMissCount() : 0L;
}
@Override
+ public long getL1CacheMissCachingCount() {
+ return this.l1Stats != null ? this.l1Stats.getMissCachingCount() : 0L;
+ }
+
+ @Override
public double getL1CacheHitRatio() {
return this.l1Stats != null ? this.l1Stats.getHitRatio() : 0.0;
}
@Override
+ public double getL1CacheHitCachingRatio() {
+ return this.l1Stats != null ? this.l1Stats.getHitCachingRatio() : 0.0;
+ }
+
+ @Override
public double getL1CacheMissRatio() {
return this.l1Stats != null ? this.l1Stats.getMissRatio() : 0.0;
}
@Override
+ public double getL1CacheMissCachingRatio() {
+ return this.l1Stats != null ? this.l1Stats.getMissCachingRatio() : 0.0;
+ }
+
+ @Override
public long getL2CacheHitCount() {
return this.l2Stats != null ? this.l2Stats.getHitCount() : 0L;
}
@Override
+ public long getL2CacheHitCachingCount() {
+ return this.l2Stats != null ? this.l2Stats.getHitCachingCount() : 0L;
+ }
+
+ @Override
public long getL2CacheMissCount() {
return this.l2Stats != null ? this.l2Stats.getMissCount() : 0L;
}
@Override
+ public long getL2CacheMissCachingCount() {
+ return this.l2Stats != null ? this.l2Stats.getMissCachingCount() : 0L;
+ }
+
+ @Override
public double getL2CacheHitRatio() {
return this.l2Stats != null ? this.l2Stats.getHitRatio() : 0.0;
}
@Override
+ public double getL2CacheHitCachingRatio() {
+ return this.l2Stats != null ? this.l2Stats.getHitCachingRatio() : 0.0;
+ }
+
+ @Override
public double getL2CacheMissRatio() {
return this.l2Stats != null ? this.l2Stats.getMissRatio() : 0.0;
}
@Override
+ public double getL2CacheMissCachingRatio() {
+ return this.l2Stats != null ? this.l2Stats.getMissCachingRatio() : 0.0;
+ }
+
+ @Override
public void forceRecompute() {
this.runnable.run();
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java
index f1b6efe..093b0f0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java
@@ -408,21 +408,41 @@
}
@Override
+ public long getL1CacheHitCachingCount() {
+ return 200;
+ }
+
+ @Override
public long getL1CacheMissCount() {
return 100;
}
@Override
+ public long getL1CacheMissCachingCount() {
+ return 100;
+ }
+
+ @Override
public double getL1CacheHitRatio() {
return 80;
}
@Override
+ public double getL1CacheHitCachingRatio() {
+ return 80;
+ }
+
+ @Override
public double getL1CacheMissRatio() {
return 20;
}
@Override
+ public double getL1CacheMissCachingRatio() {
+ return 20;
+ }
+
+ @Override
public long getL2CacheSize() {
return 456;
}
@@ -448,21 +468,41 @@
}
@Override
+ public long getL2CacheHitCachingCount() {
+ return 800;
+ }
+
+ @Override
public long getL2CacheMissCount() {
return 200;
}
@Override
+ public long getL2CacheMissCachingCount() {
+ return 200;
+ }
+
+ @Override
public double getL2CacheHitRatio() {
return 90;
}
@Override
+ public double getL2CacheHitCachingRatio() {
+ return 90;
+ }
+
+ @Override
public double getL2CacheMissRatio() {
return 10;
}
@Override
+ public double getL2CacheMissCachingRatio() {
+ return 10;
+ }
+
+ @Override
public long getUpdatesBlockedTime() {
return 419;
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
index aac2a59..8c6b3f0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
@@ -136,17 +136,25 @@
HELPER.assertGauge("l1CacheCount", 50, serverSource);
HELPER.assertCounter("l1CacheEvictionCount", 1000, serverSource);
HELPER.assertGauge("l1CacheHitCount", 200, serverSource);
+ HELPER.assertGauge("l1CacheHitCachingCount", 200, serverSource);
HELPER.assertGauge("l1CacheMissCount", 100, serverSource);
+ HELPER.assertGauge("l1CacheMissCachingCount", 100, serverSource);
HELPER.assertGauge("l1CacheHitRatio", 80, serverSource);
+ HELPER.assertGauge("l1CacheHitCachingRatio", 80, serverSource);
HELPER.assertGauge("l1CacheMissRatio", 20, serverSource);
+ HELPER.assertGauge("l1CacheMissCachingRatio", 20, serverSource);
HELPER.assertGauge("l2CacheFreeSize", 200, serverSource);
HELPER.assertGauge("l2CacheSize", 456, serverSource);
HELPER.assertGauge("l2CacheCount", 75, serverSource);
HELPER.assertCounter("l2CacheEvictionCount", 2000, serverSource);
HELPER.assertGauge("l2CacheHitCount", 800, serverSource);
+ HELPER.assertGauge("l2CacheHitCachingCount", 800, serverSource);
HELPER.assertGauge("l2CacheMissCount", 200, serverSource);
+ HELPER.assertGauge("l2CacheMissCachingCount", 200, serverSource);
HELPER.assertGauge("l2CacheHitRatio", 90, serverSource);
+ HELPER.assertGauge("l2CacheHitCachingRatio", 90, serverSource);
HELPER.assertGauge("l2CacheMissRatio", 10, serverSource);
+ HELPER.assertGauge("l2CacheMissCachingRatio", 10, serverSource);
HELPER.assertCounter("updatesBlockedTime", 419, serverSource);
}