You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/10/23 14:01:34 UTC
ignite git commit: IGNITE-6710 Added pages replace age metric
Repository: ignite
Updated Branches:
refs/heads/master 5d90b8feb -> bb31a8a4e
IGNITE-6710 Added pages replace age metric
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/bb31a8a4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/bb31a8a4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/bb31a8a4
Branch: refs/heads/master
Commit: bb31a8a4e67190435d4cbfc98a63f2de2e000291
Parents: 5d90b8f
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Mon Oct 23 16:34:59 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Mon Oct 23 16:34:59 2017 +0300
----------------------------------------------------------------------
.../org/apache/ignite/DataRegionMetrics.java | 11 +++++++
.../persistence/DataRegionMetricsImpl.java | 30 ++++++++++++++++----
.../DataRegionMetricsMXBeanImpl.java | 5 ++++
.../persistence/DataRegionMetricsSnapshot.java | 9 ++++++
.../persistence/DataStorageMetricsImpl.java | 4 +--
.../persistence/pagemem/PageMemoryImpl.java | 11 +++++--
.../ignite/mxbean/DataRegionMetricsMXBean.java | 4 +++
7 files changed, 63 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/bb31a8a4/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
index 86b91f4..ce5a122 100644
--- a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
@@ -110,6 +110,17 @@ public interface DataRegionMetrics {
public float getPagesReplaceRate();
/**
+ * Gets average age (in milliseconds) for the pages being replaced from the disk storage.
+ * This number effectively represents the average time between the moment when a page is read
+ * from the disk and the time when the page is evicted. Note that if a page is never evicted, it does
+ * not contribute to this metric.
+ * This metric is enabled only for Ignite nodes with enabled persistence.
+ *
+ * @return Replaced pages age in milliseconds.
+ */
+ public float getPagesReplaceAge();
+
+ /**
* Gets total number of pages currently loaded to the RAM. When persistence is disabled, this metric is equal
* to {@link #getTotalAllocatedPages()}.
*
http://git-wip-us.apache.org/repos/asf/ignite/blob/bb31a8a4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
index 1d570f9..471ac94 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
@@ -59,6 +59,9 @@ public class DataRegionMetricsImpl implements DataRegionMetrics {
private volatile HitRateMetrics pageReplaceRate = new HitRateMetrics(60_000, 5);
/** */
+ private volatile HitRateMetrics pageReplaceAge = new HitRateMetrics(60_000, 5);
+
+ /** */
private final DataRegionConfiguration memPlcCfg;
/** */
@@ -103,7 +106,7 @@ public class DataRegionMetricsImpl implements DataRegionMetrics {
if (!metricsEnabled)
return 0;
- return ((float) allocRate.getRate()) / rateTimeInterval;
+ return ((float)allocRate.getRate() * 1000) / rateTimeInterval;
}
/** {@inheritDoc} */
@@ -142,7 +145,17 @@ public class DataRegionMetricsImpl implements DataRegionMetrics {
if (!metricsEnabled || !persistenceEnabled)
return 0;
- return ((float) pageReplaceRate.getRate()) / rateTimeInterval;
+ return ((float)pageReplaceRate.getRate() * 1000) / rateTimeInterval;
+ }
+
+ /** {@inheritDoc} */
+ @Override public float getPagesReplaceAge() {
+ if (!metricsEnabled || !persistenceEnabled)
+ return 0;
+
+ long rep = pageReplaceRate.getRate();
+
+ return rep == 0 ? 0 : ((float)pageReplaceAge.getRate() / rep);
}
/** {@inheritDoc} */
@@ -158,9 +171,12 @@ public class DataRegionMetricsImpl implements DataRegionMetrics {
/**
* Updates pageReplaceRate metric.
*/
- public void updatePageReplaceRate() {
- if (metricsEnabled)
+ public void updatePageReplaceRate(long pageAge) {
+ if (metricsEnabled) {
pageReplaceRate.onHit();
+
+ pageReplaceAge.onHits(pageAge);
+ }
}
/**
@@ -263,7 +279,8 @@ public class DataRegionMetricsImpl implements DataRegionMetrics {
this.rateTimeInterval = rateTimeInterval;
allocRate = new HitRateMetrics((int) rateTimeInterval, subInts);
- pageReplaceRate = new HitRateMetrics((int) rateTimeInterval, subInts);
+ pageReplaceRate = new HitRateMetrics((int)rateTimeInterval, subInts);
+ pageReplaceAge = new HitRateMetrics((int)rateTimeInterval, subInts);
}
/**
@@ -281,6 +298,7 @@ public class DataRegionMetricsImpl implements DataRegionMetrics {
subInts = (int) rateTimeInterval / 10;
allocRate = new HitRateMetrics((int) rateTimeInterval, subInts);
- pageReplaceRate = new HitRateMetrics((int) rateTimeInterval, subInts);
+ pageReplaceRate = new HitRateMetrics((int)rateTimeInterval, subInts);
+ pageReplaceAge = new HitRateMetrics((int)rateTimeInterval, subInts);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bb31a8a4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
index 141d0dc..86ea918 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
@@ -77,6 +77,11 @@ class DataRegionMetricsMXBeanImpl implements DataRegionMetricsMXBean {
}
/** {@inheritDoc} */
+ @Override public float getPagesReplaceAge() {
+ return memMetrics.getPagesReplaceAge();
+ }
+
+ /** {@inheritDoc} */
@Override public long getPhysicalMemoryPages() {
return memMetrics.getPhysicalMemoryPages();
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bb31a8a4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
index c39fdb0d..c9e3d08 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
@@ -48,6 +48,9 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
private float pageReplaceRate;
/** */
+ private float pageReplaceAge;
+
+ /** */
private long physicalMemoryPages;
/**
@@ -62,6 +65,7 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
pagesFillFactor = metrics.getPagesFillFactor();
dirtyPages = metrics.getDirtyPages();
pageReplaceRate = metrics.getPagesReplaceRate();
+ pageReplaceAge = metrics.getPagesReplaceAge();
physicalMemoryPages = metrics.getPhysicalMemoryPages();
}
@@ -106,6 +110,11 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
}
/** {@inheritDoc} */
+ @Override public float getPagesReplaceAge() {
+ return pageReplaceAge;
+ }
+
+ /** {@inheritDoc} */
@Override public long getPhysicalMemoryPages() {
return physicalMemoryPages;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bb31a8a4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
index 6d196dc..e871597 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
@@ -94,7 +94,7 @@ public class DataStorageMetricsImpl implements DataStorageMetricsMXBean {
if (!metricsEnabled)
return 0;
- return ((float)walLoggingRate.getRate()) / rateTimeInterval;
+ return ((float)walLoggingRate.getRate() * 1000) / rateTimeInterval;
}
/** {@inheritDoc} */
@@ -102,7 +102,7 @@ public class DataStorageMetricsImpl implements DataStorageMetricsMXBean {
if (!metricsEnabled)
return 0;
- return ((float)walWritingRate.getRate()) / rateTimeInterval;
+ return ((float)walWritingRate.getRate() * 1000) / rateTimeInterval;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/bb31a8a4/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
index 8c64e0e..4a4fe9e 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
@@ -437,6 +437,8 @@ public class PageMemoryImpl implements PageMemoryEx {
long pageId = storeMgr.allocatePage(cacheId, partId, flags);
+ memMetrics.incrementTotalAllocatedPages();
+
assert PageIdUtils.pageIndex(pageId) > 0; //it's crucial for tracking pages (zero page is super one)
// We need to allocate page in memory for marking it dirty to save it in the next checkpoint.
@@ -608,8 +610,6 @@ public class PageMemoryImpl implements PageMemoryEx {
try {
ByteBuffer buf = wrapPointer(pageAddr, pageSize());
- memMetrics.updatePageReplaceRate();
-
storeMgr.read(cacheId, pageId, buf);
}
catch (IgniteDataIntegrityViolationException ignore) {
@@ -1781,6 +1781,8 @@ public class PageMemoryImpl implements PageMemoryEx {
if (cpPages != null && cpPages.contains(fullPageId)) {
assert storeMgr != null;
+ memMetrics.updatePageReplaceRate(U.currentTimeMillis() - PageHeader.readTimestamp(absPtr));
+
flushDirtyPage.applyx(
fullPageId,
wrapPointer(absPtr + PAGE_OVERHEAD, pageSize()),
@@ -1799,9 +1801,12 @@ public class PageMemoryImpl implements PageMemoryEx {
return false;
}
- else
+ else {
+ memMetrics.updatePageReplaceRate(U.currentTimeMillis() - PageHeader.readTimestamp(absPtr));
+
// Page was not modified, ok to evict.
return true;
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/bb31a8a4/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
index eeed496..16bc677 100644
--- a/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/DataRegionMetricsMXBean.java
@@ -82,6 +82,10 @@ public interface DataRegionMetricsMXBean extends DataRegionMetrics {
@Override public float getPagesReplaceRate();
/** {@inheritDoc} */
+ @MXBeanDescription("Average age at which pages in memory are replaced with pages from persistent storage (milliseconds).")
+ @Override public float getPagesReplaceAge();
+
+ /** {@inheritDoc} */
@MXBeanDescription("Number of pages residing in physical RAM.")
@Override public long getPhysicalMemoryPages();