IGNITE-10639 Improve doc for page memory (#5702)
authorDmitriy Pavlov <dpavlov@apache.org>
Thu, 3 Jan 2019 13:53:55 +0000 (16:53 +0300)
committerGitHub <noreply@github.com>
Thu, 3 Jan 2019 13:53:55 +0000 (16:53 +0300)
 IGNITE-10639 Proof of concept for an internal description for packages

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PagesWriteSpeedBasedThrottle.java
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/README.md

index 2dd8127..9e4975c 100644 (file)
@@ -29,7 +29,9 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 /**
  * Throttles threads that generate dirty pages during ongoing checkpoint.
  * Designed to avoid zero dropdowns that can happen if checkpoint buffer is overflowed.
- * Uses average checkpoint write speed and moment speed of marking pages as dirty.
+ * Uses average checkpoint write speed and moment speed of marking pages as dirty.<br>
+ *
+ * See also: <a href="https://github.com/apache/ignite/tree/master/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem#speed-based-throttling">Speed-based throttling description</a>.
  */
 public class PagesWriteSpeedBasedThrottle implements PagesWriteThrottlePolicy {
     /** Maximum dirty pages in region. */
index 57e623d..0244d45 100644 (file)
@@ -2,11 +2,37 @@ Apache Ignite Native Peristence Page Memory
 -------------------------------------------
 This package contains page memory implementation for case persitence is enabled.
 
-Speed Based Throttling
-----------------------
+## Loaded Pages Table
+
+An implementation of [LoadedPagesMap.java](LoadedPagesMap.java)
+(PageIdTable) manages mapping from Page ID to relative pointer map (rowAddr).
+
+See introduction in wiki [Region Structure](https://cwiki.apache.org/confluence/display/IGNITE/Ignite+Durable+Memory+-+under+the+hood#IgniteDurableMemory-underthehood-Regionandsegmentstructure).
+
+<img src="https://cwiki.apache.org/confluence/rest/gliffy/1.0/embeddedDiagrams/e9df3b17-1a57-487c-a842-dbb6b1062709.png">
+
+Current implementation is [RobinHoodBackwardShiftHashMap.java](RobinHoodBackwardShiftHashMap.java)
+
+## Throttling
+Throttling is an intentional slowdown of operation in the grid to equate throughput of the storage and speed of user operations.
+
+Throttling is implemented at physical level of operations, so it operates not with user entries, but with page memory pages.
+
 For an introduction, please see
 [wiki PagesWriteThrottling](https://cwiki.apache.org/confluence/display/IGNITE/Ignite+Persistent+Store+-+under+the+hood#IgnitePersistentStore-underthehood-PagesWriteThrottling)
 
+There are two types of throttling implemented in Apache Ignite:
+* Checkpoint buffer overflow protection.
+
+This CP Buffer throttling is enabled by default. It is activated if CP buffer is close to being filled.
+In this case, there is an exponential backoff at 2/3 when filling reached.
+Since the CP buffer is being cleaned as the checkpoint progresses, this more or less behaves like trotting.
+
+* the whole region marked dirty protection.
+This type of throttling protects region segments from being completely filled by dirty pages when checkpoint progress is far from completion.
+
+### Speed Based Throttling
+
 If throttling is enabled in User configuration, then Speed based throttling is applied.
 
 Speed based throttling is implemented by