[
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)