You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/10/24 08:47:42 UTC

[35/50] [abbrv] ignite git commit: IGNITE-6710 Added pages replace age metric

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/ignite-3478-tree
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();