Denis, Sergey, Changes in https://issues.apache.org/jira/browse/IGNITE-4535 won't be so global. I am not going to replace older mechanics, but rather re-enable and adjust them to work with PageMemory. We will still use the same distributed hash table and evict entries based on existing EvictionPolicy API. I think 'Dht' methods, like getDhtEvictQueueCurrentSize(), are still relevant and important.
On Fri, Mar 17, 2017 at 12:08 PM, Sergey Chugunov <sergey.chugu...@gmail.com > wrote: > Dmitriy, > > My main goal was to add a metric to estimate FreeList space fragmentation > and "hist" was the first thing I came up with. > > Let's consider one case: we placed into a cache 4 entities 60% page size > each. > After that we'll have 4 pages in FreeList each with a hole of 40% of it's > size. > Utilization of FreeList will be 60% but with big fragmentation. > > Let's consider another case: we have added and removed a bunch of entries > much smaller than a page. After that we have two pages 90% full, one page > 50% full and one page 10% full. > Utilization of FreeList is 60% again, very simple math, but fragmentation > is much smaller. > > So, when we calculate only a simple average we lose a lot of information; > and this information may be very useful to make a decision about best page > size configuration. > > Thanks, > Sergey. > > > On Thu, Mar 16, 2017 at 10:22 PM, Dmitriy Setrakyan <dsetrak...@apache.org > > > wrote: > > > As far as the percentage of the free page space, why do we need to > provide > > 3 ranges: 0 -> 16, 16 -> 32, 32 -> 64, etc? Why not just provide average > > free bytes percentage as one value? > > > > Am I misunderstanding something? > > > > On Thu, Mar 16, 2017 at 11:04 AM, Denis Magda <dma...@apache.org> wrote: > > > > > Sergey, > > > > > > Considering that the swap tier will no longer be supported in 2.0 all > the > > > methods that start with ‘getSwap…’ are no longer relevant and have to > be > > > removed from metrics. For instance, the swap functionality has already > > been > > > wiped out from .NET: > > > https://issues.apache.org/jira/browse/IGNITE-4736 > > > > > > Next, I’m also confused with the metrics that include ‘Dht’ in its > name. > > > The on-heap tier we have in 1.x will be replaced with on-heap cache: > > > https://issues.apache.org/jira/browse/IGNITE-4535 < > > > https://issues.apache.org/jira/browse/IGNITE-4535> > > > Does it me that ‘Dht’ methods are still relevant or they need to be > > > replaced with something more meaningful? *Alex G.*, please chime in. > > > > > > Finally, personally I don’t like the API for these 3 methods > > > > > > > > > > > public float getPagesPercentage_8_16_freeBytes(); > > > > public float getPagesPercentage_16_64_freeBytes(); > > > > public float getPagesPercentage_64_256_freeBytes(); > > > > > > Wouldn’t it better to have a single method like this? > > > > > > public float[] getPagesFreeBytesPercentage(); > > > > > > where > > > > > > float[0] - 0 to 16 free bytes. > > > float[1] - 16 to 32 free bytes. > > > float[2] - 32 to 64 free bytes. > > > ….. > > > float[N] - page_size - 16 to page size free bytes. > > > > > > — > > > Denis > > > > > > > On Mar 16, 2017, at 10:22 AM, Sergey Chugunov < > > sergey.chugu...@gmail.com> > > > wrote: > > > > > > > > Denis, > > > > > > > > Here is a version of CacheMetrics interface with all changes how I > see > > > them > > > > (pretty long list :)). > > > > > > > > public interface CacheMetrics { > > > > > > > > public long getCacheHits(); > > > > > > > > public float getCacheHitPercentage(); > > > > > > > > public long getCacheMisses(); > > > > > > > > public float getCacheMissPercentage(); > > > > > > > > public long getCacheGets(); > > > > > > > > public long getCachePuts(); > > > > > > > > public long getCacheRemovals(); > > > > > > > > public long getCacheEvictions(); > > > > > > > > public float getAverageGetTime(); > > > > > > > > public float getAveragePutTime(); > > > > > > > > public float getAverageRemoveTime(); > > > > > > > > public float getAverageTxCommitTime(); > > > > > > > > public float getAverageTxRollbackTime(); > > > > > > > > public long getCacheTxCommits(); > > > > > > > > public long getCacheTxRollbacks(); > > > > > > > > public String name(); > > > > > > > > public long getOverflowSize(); > > > > > > > > public long getOffHeapGets(); > > > > > > > > public long getOffHeapPuts();//removing as it duplicates cachePuts > > > > > > > > public long getOffHeapRemovals(); > > > > > > > > public long getOffHeapEvictions(); > > > > > > > > public long getOffHeapHits(); > > > > > > > > public float getOffHeapHitPercentage(); > > > > > > > > public long getOffHeapMisses();//removing as it duplicates > > cacheMisses > > > > > > > > public float getOffHeapMissPercentage();//removing as it > duplicates > > > > cacheMissPercentage > > > > > > > > public long getOffHeapEntriesCount(); > > > > > > > > public long getOffHeapPrimaryEntriesCount(); > > > > > > > > public long getOffHeapBackupEntriesCount(); > > > > > > > > public long getOffHeapAllocatedSize(); > > > > > > > > public long getOffHeapMaxSize(); > > > > > > > > public long getSwapGets(); > > > > > > > > public long getSwapPuts(); > > > > > > > > public long getSwapRemovals(); > > > > > > > > public long getSwapHits(); > > > > > > > > public long getSwapMisses(); > > > > > > > > public long getSwapEntriesCount(); > > > > > > > > public long getSwapSize(); > > > > > > > > public float getSwapHitPercentage(); > > > > > > > > public float getSwapMissPercentage(); > > > > > > > > public int getSize(); > > > > > > > > public int getKeySize(); > > > > > > > > public boolean isEmpty(); > > > > > > > > public int getDhtEvictQueueCurrentSize(); > > > > > > > > public int getTxThreadMapSize(); > > > > > > > > public int getTxXidMapSize(); > > > > > > > > public int getTxCommitQueueSize(); > > > > > > > > public int getTxPrepareQueueSize(); > > > > > > > > public int getTxStartVersionCountsSize(); > > > > > > > > public int getTxCommittedVersionsSize(); > > > > > > > > public int getTxRolledbackVersionsSize(); > > > > > > > > public int getTxDhtThreadMapSize(); > > > > > > > > public int getTxDhtXidMapSize(); > > > > > > > > public int getTxDhtCommitQueueSize(); > > > > > > > > public int getTxDhtPrepareQueueSize(); > > > > > > > > public int getTxDhtStartVersionCountsSize(); > > > > > > > > public int getTxDhtCommittedVersionsSize(); > > > > > > > > public int getTxDhtRolledbackVersionsSize(); > > > > > > > > public boolean isWriteBehindEnabled(); > > > > > > > > public int getWriteBehindFlushSize(); > > > > > > > > public int getWriteBehindFlushThreadCount(); > > > > > > > > public long getWriteBehindFlushFrequency(); > > > > > > > > public int getWriteBehindStoreBatchSize(); > > > > > > > > public int getWriteBehindTotalCriticalOverflowCount(); > > > > > > > > public int getWriteBehindCriticalOverflowCount(); > > > > > > > > public int getWriteBehindErrorRetryCount(); > > > > > > > > public int getWriteBehindBufferSize(); > > > > > > > > public String getKeyType(); > > > > > > > > public String getValueType(); > > > > > > > > public boolean isStoreByValue(); > > > > > > > > public boolean isStatisticsEnabled(); > > > > > > > > public boolean isManagementEnabled(); > > > > > > > > public boolean isReadThrough(); > > > > > > > > public boolean isWriteThrough(); > > > > > > > > public long getTotalAllocatedPages(); > > > > > > > > public long getTotalEvictedPages(); > > > > > > > > } > > > > > > > > > > > > Also I suggest to introduce new interface for MemoryPolicy metrics > and > > > make > > > > it available through *IgniteCacheDatabaseSharedManager*: > > > > > > > > > > > > public interface IgniteMemoryPolicyMetrics { > > > > > > > > /** > > > > > > > > * @return Memory policy name. > > > > > > > > */ > > > > > > > > public String getName(); > > > > > > > > > > > > /** > > > > > > > > * @return Total number of allocated pages. > > > > > > > > */ > > > > > > > > public long getTotalAllocatedPages(); > > > > > > > > > > > > /** > > > > > > > > * @return Amount (in bytes) of not yet allocated space in > > PageMemory. > > > > > > > > */ > > > > > > > > public long getAvailableSpace(); > > > > > > > > > > > > /** > > > > > > > > * @return Number of allocated pages per second within PageMemory. > > > > > > > > */ > > > > > > > > public float getAllocationRate(); > > > > > > > > > > > > /** > > > > > > > > * @return Number of evicted pages per second within PageMemory. > > > > > > > > */ > > > > > > > > public float getEvictionRate(); > > > > > > > > > > > > /** > > > > > > > > * Large entities bigger than page are split into fragments so > each > > > > fragment can fit into a page. > > > > > > > > * > > > > > > > > * @return Percentage of pages fully occupied by large entities. > > > > > > > > */ > > > > > > > > public long getLargeEntriesPagesPercentage(); > > > > > > > > > > > > //---FreeList-related metrics > > > > > > > > > > > > /** > > > > > > > > * @return Free space to overall size ratio across all pages in > > > > FreeList. > > > > > > > > */ > > > > > > > > public float getPagesFillFactor(); > > > > > > > > > > > > /** > > > > > > > > * @return Percentage of pages in FreeList with free space >= 8 > and > > < > > > > 16 bytes > > > > > > > > */ > > > > > > > > public float getPagesPercentage_8_16_freeBytes(); > > > > > > > > > > > > /** > > > > > > > > * @return Percentage of pages in FreeList with free space >= 16 > > and < > > > > 64 bytes > > > > > > > > */ > > > > > > > > public float getPagesPercentage_16_64_freeBytes(); > > > > > > > > > > > > /** > > > > > > > > * @return Percentage of pages in FreeList with free space >= 64 > > and < > > > > 256 bytes > > > > > > > > */ > > > > > > > > public float getPagesPercentage_64_256_freeBytes(); > > > > > > > > } > > > > > > > > In my mind last three methods provide some kind of hist to give an > > > insight > > > > about memory fragmentation. > > > > If there are a lot of pages with relatively big free chunks and less > > > with a > > > > smaller chunks it may indicate that memory is fragmented and it may > be > > > > reasonable to adjust page sizes. > > > > > > > > Thanks, > > > > Sergey. > > > > > > > > > > > > > > > > On Thu, Mar 16, 2017 at 1:29 AM, Denis Magda <dma...@apache.org> > > wrote: > > > > > > > >> Hi Sergey, > > > >> > > > >>>> In memory management scheme based on MemoryPolicies it may be > useful > > > >> (and > > > >>>> easier) to collect some metrics not for individual caches but for > > > whole > > > >>>> MemoryPolicies where several caches may reside. > > > >>>> > > > >> > > > >> I would collect the metrics for every single MemoryPolicy as well as > > for > > > >> individual caches. It makes sense to expose which cache contributes > > > more to > > > >> memory utilization. > > > >> > > > >>>> - free space / used space tracking; > > > >>>> - allocation / eviction rate; > > > >> > > > >> Please consider this as well: > > > >> - total number of pages; > > > >> - total number of enters (how hard to support?). > > > >> > > > >>>> - metrics to track memory fragmentation: e.g. % of pages with > only > > 8 > > > >>>> bytes free, 16 bytes free and so on; > > > >>>> - % of big fragmented entries in cache: may be useful to adjust > > page > > > >>>> size. > > > >> > > > >>> > > > >> How do you see this in the metrics interface? > > > >> > > > >> > > > >>> 3. Useful, not going to remove: > > > >>> getOffHeapGets //useful as there still may be deserialized entries > > > >>> residing on-heap > > > >>> getOffHeapHitPercentage > > > >>> getOffHeapHits //overall hits include offheap and onheap > > > >>> getOffHeapMisses //I think in new model is the same as > > getCacheMisses > > > >>> getOffHeapMissPercentage //same as above > > > >>> getOffHeapPuts //same as above > > > >>> getOffHeapRemovals //same as above > > > >> > > > >> Could you please prepare an updated version of the cache metrics > > adding > > > >> new methods and renaming existing ones (only if necessary)? It will > be > > > >> simpler to keep up the discussion relying on this updated interface. > > > >> > > > >> — > > > >> Denis > > > >> > > > >>> On Mar 15, 2017, at 8:32 AM, Sergey Chugunov < > > > sergey.chugu...@gmail.com> > > > >> wrote: > > > >>> > > > >>> Also I looked through current set of metrics available on > > > >>> *CacheMetrics *interface > > > >>> and suggest following changes: > > > >>> > > > >>> > > > >>> 1. All methods related to tracking swap space (including > > > >>> *getOverflowSize*) to be removed. > > > >>> > > > >>> 2. Useless/hard to calculate in new memory management approach: > > > >>> getOffHeapAllocatedSize //max size is constrained by MemoryPolicy > > > >> config > > > >>> getOffHeapEntriesCount //all cache entries live offheap > > > >>> getOffHeapEvictions //will be captured on MemoryPolicyMetrics > level; > > > >>> getOffHeapMaxSize //same as the first one > > > >>> > > > >>> 3. Useful, not going to remove: > > > >>> getOffHeapGets //useful as there still may be deserialized entries > > > >>> residing on-heap > > > >>> getOffHeapHitPercentage > > > >>> getOffHeapHits //overall hits include offheap and onheap > > > >>> getOffHeapMisses //I think in new model is the same as > > getCacheMisses > > > >>> getOffHeapMissPercentage //same as above > > > >>> getOffHeapPuts //same as above > > > >>> getOffHeapRemovals //same as above > > > >>> > > > >>> Please share your thought if I miss something here. > > > >>> > > > >>> Thanks, > > > >>> Sergey Chugunov. > > > >>> > > > >>> On Wed, Mar 15, 2017 at 4:51 PM, Sergey Chugunov < > > > >> sergey.chugu...@gmail.com> > > > >>> wrote: > > > >>> > > > >>>> Hello Igniters, > > > >>>> > > > >>>> As part of [1] cache metrics need to be updated as some of them > like > > > >> swap > > > >>>> hits are not applicable anymore. > > > >>>> > > > >>>> In memory management scheme based on MemoryPolicies it may be > useful > > > >> (and > > > >>>> easier) to collect some metrics not for individual caches but for > > > whole > > > >>>> MemoryPolicies where several caches may reside. > > > >>>> > > > >>>> I suggest the following list of new metrics to collect for each > > > >>>> MemoryPolicy: > > > >>>> > > > >>>> - free space / used space tracking; > > > >>>> - allocation / eviction rate; > > > >>>> - metrics to track memory fragmentation: e.g. % of pages with > only > > 8 > > > >>>> bytes free, 16 bytes free and so on; > > > >>>> - % of big fragmented entries in cache: may be useful to adjust > > page > > > >>>> size. > > > >>>> > > > >>>> > > > >>>> Please suggest any other metrics that may be worth tracking. > > > >>>> > > > >>>> [1] https://issues.apache.org/jira/browse/IGNITE-3477 > > > >>>> > > > >>>> Thanks, > > > >>>> Sergey Chugunov. > > > >>>> > > > >> > > > >> > > > > > > > > > -- Best regards, Ilya