This is an automated email from the ASF dual-hosted git repository.
wchevreuil pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-3 by this push:
new 2fd6183019b HBASE-29731 Add L1 and L2 cache hit/miss caching metrics
(#7482)
2fd6183019b is described below
commit 2fd6183019bb7215703bdbe09544ce05e3474fa3
Author: Jaehui Lee <[email protected]>
AuthorDate: Thu Nov 27 23:21:09 2025 +0900
HBASE-29731 Add L1 and L2 cache hit/miss caching metrics (#7482)
Signed-off-by: Wellington Chevreuil <[email protected]>
Reviewed-by: Liu Xiao <[email protected]>
---
.../regionserver/MetricsRegionServerSource.java | 20 +++++++++++
.../MetricsRegionServerSourceImpl.java | 16 +++++++++
.../regionserver/MetricsRegionServerWrapper.java | 40 ++++++++++++++++++++++
.../MetricsRegionServerWrapperImpl.java | 40 ++++++++++++++++++++++
.../MetricsRegionServerWrapperStub.java | 40 ++++++++++++++++++++++
.../regionserver/TestMetricsRegionServer.java | 8 +++++
6 files changed, 164 insertions(+)
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 c88a77b5140..f0b4a073383 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 @@ public interface MetricsRegionServerSource extends
BaseSource, JvmPauseMonitorSo
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 @@ public interface MetricsRegionServerSource extends
BaseSource, JvmPauseMonitorSo
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 b214c8f8f4e..faeea3e8fd9 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 @@ public class MetricsRegionServerSourceImpl extends
BaseSourceImpl
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 @@ public class MetricsRegionServerSourceImpl extends
BaseSourceImpl
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 5b957d9bf08..240c084b683 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
@@ -374,21 +374,41 @@ public interface MetricsRegionServerWrapper {
*/
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
*/
@@ -414,21 +434,41 @@ public interface MetricsRegionServerWrapper {
*/
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.
*/
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 c8f7f96a033..40a6bdf3dad 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
@@ -373,41 +373,81 @@ class MetricsRegionServerWrapperImpl implements
MetricsRegionServerWrapper {
return this.l1Stats != null ? this.l1Stats.getHitCount() : 0L;
}
+ @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 f1b6efe50a9..093b0f0a363 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
@@ -407,21 +407,41 @@ public class MetricsRegionServerWrapperStub implements
MetricsRegionServerWrappe
return 200;
}
+ @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;
@@ -447,21 +467,41 @@ public class MetricsRegionServerWrapperStub implements
MetricsRegionServerWrappe
return 800;
}
+ @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 aac2a5922b9..8c6b3f04eb6 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 @@ public class TestMetricsRegionServer {
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);
}