Nikita-tech-writer commented on a change in pull request #9216: URL: https://github.com/apache/ignite/pull/9216#discussion_r662958039
########## File path: docs/_docs/memory-configuration/replacement-policies.adoc ########## @@ -0,0 +1,96 @@ +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. += Replacement Policies + +When link:persistence/native-persistence[Native Persistence] is on and Ignite stores on disk more data than off-heap memory allocated for the data region, to preload some page from the disk to the completely full off-heap memory another page should be evicted from the off-heap to the disk. This process is called _page rotation_ or _page replacement_. + +When Native Persistence is off _eviction_ is used instead of _page replacement_. See link:memory-configuration/eviction-policies[Eviction Policies] page for more information. + +Page replacement is implemented as follows. + +When Ignite requires some page, it tries to find this page in the off-heap memory, if the page currently not in the off-heap memory (page fault occurs), this page is preloaded from the disk, but if off-heap memory already full some another page should be chosen to be replaced (stored to the disk and evicted). + +Ignite supports three algorithms to find pages to replace: + +* Random-LRU algorithm; +* Segmented-LRU algorithm; +* CLOCK algorithm. + +Page replacement algorithm can be configured by `PageReplacementMode` property of `DataRegionConfiguration`. By default, CLOCK algorithm is used. + +[tabs] +-- +tab:XML[] +[source,xml] +---- +<bean class="org.apache.ignite.configuration.IgniteConfiguration"> + <!-- Memory configuration. --> + <property name="dataStorageConfiguration"> + <bean class="org.apache.ignite.configuration.DataStorageConfiguration"> + <property name="dataRegionConfigurations"> + <list> + <!-- + Defining a persistent data region with Segmented LRU page replacement mode. + --> + <bean class="org.apache.ignite.configuration.DataRegionConfiguration"> + <!-- Data region name. --> + <property name="name" value="persistent_data_region"/> + + <!-- Enable persistence. --> + <property name="persistenceEnabled" value="true"/> + + <!-- 20 GB maximum size (RAM). --> + <property name="maxSize" value="#{20L * 1024 * 1024 * 1024}"/> + + <!-- Enabling SEGMENTED_LRU page replacement for this region. --> + <property name="pageReplacementMode" value="SEGMENTED_LRU"/> + </bean> + </list> + </property> + </bean> + </property> + + <!-- The rest of the configuration. --> +</bean> +---- +tab:Java[] +[source,java] +---- +include::{javaCodeDir}/ReplacementPolicies.java[tag=segmentedLRU,indent=0] +---- +tab:C#/.NET[unsupported] +---- +tab:C++[unsupported] +-- + +The choice of the algorithm depends on your workload. For most cases, CLOCK (default) is a good candidate, but on some workloads other algorithms can perform better. + +== Random-LRU algorithm + +Every time page is accessed, its timestamp gets updated. When a page fault occurs and it's required to replace some pages, the algorithm randomly chooses 5 pages from the page memory and evicts a page with the latest timestamp. Review comment: ```suggestion Every time a page is accessed, its timestamp is updated. When a page fault occurs and it's required to replace some pages, the algorithm randomly chooses 5 pages from the page memory and evicts a page with the latest timestamp. ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
