[ 
https://issues.apache.org/jira/browse/IGNITE-3477?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Goncharuk resolved IGNITE-3477.
--------------------------------------
    Resolution: Fixed

Merged to master

> Rework offheap storage
> ----------------------
>
>                 Key: IGNITE-3477
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3477
>             Project: Ignite
>          Issue Type: Task
>          Components: cache
>            Reporter: Alexey Goncharuk
>            Assignee: Alexey Goncharuk
>              Labels: important
>             Fix For: 2.0
>
>
> Current (Ignite 1.x) implementation of cache storage relies on a tiered 
> approach where cache entry can be located in one of the three storage areas: 
> on-heap, off-heap memory and swap. It leads to the following disadvantages:
>  * Entry constantly moves from one storage area to another which leads to a 
> complex code (for example, swap/unswap listeners for queries and rebalancing)
>  * It is not possible to set per-cache memory limit
>  * Off-heap indexes require on-heap row cache. If this cache is small, 
> performance becomes very poor
>  * Continuous put/remove operations with OFFHEAP_TIERED mode lead to 
> uncontrollable memory fragmentation
> We can reapproach the cache storage and base it on a concept of page memory. 
> We will allocate several memory pools of pages of fixed size and assign each 
> cache to one of the memory pools. All storage data structures should operate 
> on memory pages, the main storage will be always off-heap with an optional 
> on-heap cache.
> This gives us the following benefits:
>  * Flexible and precise per-cache memory limit
>  * Transparent swap: we can allocate page memory over a memory-mapped file 
> and OS will take care of swapping
>  * Getting rid of on-heap cache for off-heap SQL indexes
>  * Ability to take a cluster-wide data snapshot
> I suggest the following API for memory policy configuration:
> {code}
> class MemoryPolicy {
>     boolean default; // Require at least one memory policy to be default.
>     private String name;
>     private long size;
>     private String tmpFsPath; // If memory-mapped file should be used.
> }
> class CacheConfiguration {
> ....
>     private String memoryPolicyName;
> ....
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to