€•‹ÈŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ1/translations/zh_CN/admin-guide/mm/damon/lru_sort”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/zh_TW/admin-guide/mm/damon/lru_sort”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/it_IT/admin-guide/mm/damon/lru_sort”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ja_JP/admin-guide/mm/damon/lru_sort”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/ko_KR/admin-guide/mm/damon/lru_sort”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/pt_BR/admin-guide/mm/damon/lru_sort”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ1/translations/sp_SP/admin-guide/mm/damon/lru_sort”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/admin-guide/mm/damon/lru_sort.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒDAMON-based LRU-lists Sorting”h]”hŒDAMON-based LRU-lists Sorting”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hXDAMON-based LRU-lists Sorting (DAMON_LRU_SORT) is a static kernel module that aimed to be used for proactive and lightweight data access pattern based (de)prioritization of pages on their LRU-lists for making LRU-lists a more trusworthy data access pattern source.”h]”hXDAMON-based LRU-lists Sorting (DAMON_LRU_SORT) is a static kernel module that aimed to be used for proactive and lightweight data access pattern based (de)prioritization of pages on their LRU-lists for making LRU-lists a more trusworthy data access pattern source.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ.Where Proactive LRU-lists Sorting is Required?”h]”hŒ.Where Proactive LRU-lists Sorting is Required?”…”�”}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhíh²hh³hÇh´K ubhÞ)�”}”(hXÌAs page-granularity access checking overhead could be significant on huge systems, LRU lists are normally not proactively sorted but partially and reactively sorted for special events including specific user requests, system calls and memory pressure. As a result, LRU lists are sometimes not so perfectly prepared to be used as a trustworthy access pattern source for some situations including reclamation target pages selection under sudden memory pressure.”h]”hXÌAs page-granularity access checking overhead could be significant on huge systems, LRU lists are normally not proactively sorted but partially and reactively sorted for special events including specific user requests, system calls and memory pressure. As a result, LRU lists are sometimes not so perfectly prepared to be used as a trustworthy access pattern source for some situations including reclamation target pages selection under sudden memory pressure.”…”�”}”(hhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhíh²hubhÞ)�”}”(hX Because DAMON can identify access patterns of best-effort accuracy while inducing only user-specified range of overhead, proactively running DAMON_LRU_SORT could be helpful for making LRU lists more trustworthy access pattern source with low and controlled overhead.”h]”hX Because DAMON can identify access patterns of best-effort accuracy while inducing only user-specified range of overhead, proactively running DAMON_LRU_SORT could be helpful for making LRU lists more trustworthy access pattern source with low and controlled overhead.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhíh²hubeh}”(h]”Œ-where-proactive-lru-lists-sorting-is-required”ah ]”h"]”Œ.where proactive lru-lists sorting is required?”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ How It Works?”h]”hŒ How It Works?”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj"h²hh³hÇh´KubhÞ)�”}”(hX¸DAMON_LRU_SORT finds hot pages (pages of memory regions that showing access rates that higher than a user-specified threshold) and cold pages (pages of memory regions that showing no access for a time that longer than a user-specified threshold) using DAMON, and prioritizes hot pages while deprioritizing cold pages on their LRU-lists. To avoid it consuming too much CPU for the prioritizations, a CPU time usage limit can be configured. Under the limit, it prioritizes and deprioritizes more hot and cold pages first, respectively. System administrators can also configure under what situation this scheme should automatically activated and deactivated with three memory pressure watermarks.”h]”hX¸DAMON_LRU_SORT finds hot pages (pages of memory regions that showing access rates that higher than a user-specified threshold) and cold pages (pages of memory regions that showing no access for a time that longer than a user-specified threshold) using DAMON, and prioritizes hot pages while deprioritizing cold pages on their LRU-lists. To avoid it consuming too much CPU for the prioritizations, a CPU time usage limit can be configured. Under the limit, it prioritizes and deprioritizes more hot and cold pages first, respectively. System administrators can also configure under what situation this scheme should automatically activated and deactivated with three memory pressure watermarks.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj"h²hubhÞ)�”}”(hXuIts default parameters for hotness/coldness thresholds and CPU quota limit are conservatively chosen. That is, the module under its default parameters could be widely used without harm for common situations while providing a level of benefits for systems having clear hot/cold access patterns under memory pressure while consuming only a limited small portion of CPU time.”h]”hXuIts default parameters for hotness/coldness thresholds and CPU quota limit are conservatively chosen. That is, the module under its default parameters could be widely used without harm for common situations while providing a level of benefits for systems having clear hot/cold access patterns under memory pressure while consuming only a limited small portion of CPU time.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hj"h²hubeh}”(h]”Œ how-it-works”ah ]”h"]”Œ how it works?”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒInterface: Module Parameters”h]”hŒInterface: Module Parameters”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjWh²hh³hÇh´K1ubhÞ)�”}”(hŒTo use this feature, you should first ensure your system is running on a kernel that is built with ``CONFIG_DAMON_LRU_SORT=y``.”h]”(hŒcTo use this feature, you should first ensure your system is running on a kernel that is built with ”…”�”}”(hjhh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``CONFIG_DAMON_LRU_SORT=y``”h]”hŒCONFIG_DAMON_LRU_SORT=y”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjhubhŒ.”…”�”}”(hjhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hjWh²hubhÞ)�”}”(hX#To let sysadmins enable or disable it and tune for the given system, DAMON_LRU_SORT utilizes module parameters. That is, you can put ``damon_lru_sort.=`` on the kernel boot command line or write proper values to ``/sys/module/damon_lru_sort/parameters/`` files.”h]”(hŒ†To let sysadmins enable or disable it and tune for the given system, DAMON_LRU_SORT utilizes module parameters. That is, you can put ”…”�”}”(hjŠh²hh³Nh´Nubjq)�”}”(hŒ&``damon_lru_sort.=``”h]”hŒ"damon_lru_sort.=”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjŠubhŒ; on the kernel boot command line or write proper values to ”…”�”}”(hjŠh²hh³Nh´Nubjq)�”}”(hŒ5``/sys/module/damon_lru_sort/parameters/``”h]”hŒ1/sys/module/damon_lru_sort/parameters/”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjŠubhŒ files.”…”�”}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K6hjWh²hubhÞ)�”}”(hŒ,Below are the description of each parameter.”h]”hŒ,Below are the description of each parameter.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hjWh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒenabled”h]”hŒenabled”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÊh²hh³hÇh´K>ubhÞ)�”}”(hŒ!Enable or disable DAMON_LRU_SORT.”h]”hŒ!Enable or disable DAMON_LRU_SORT.”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K@hjÊh²hubhÞ)�”}”(hX=You can enable DAMON_LRU_SORT by setting the value of this parameter as ``Y``. Setting it as ``N`` disables DAMON_LRU_SORT. Note that DAMON_LRU_SORT could do no real monitoring and LRU-lists sorting due to the watermarks-based activation condition. Refer to below descriptions for the watermarks parameter for this.”h]”(hŒHYou can enable DAMON_LRU_SORT by setting the value of this parameter as ”…”�”}”(hjéh²hh³Nh´Nubjq)�”}”(hŒ``Y``”h]”hŒY”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjéubhŒ. Setting it as ”…”�”}”(hjéh²hh³Nh´Nubjq)�”}”(hŒ``N``”h]”hŒN”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjéubhŒÛ disables DAMON_LRU_SORT. Note that DAMON_LRU_SORT could do no real monitoring and LRU-lists sorting due to the watermarks-based activation condition. Refer to below descriptions for the watermarks parameter for this.”…”�”}”(hjéh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KBhjÊh²hubeh}”(h]”Œenabled”ah ]”h"]”Œenabled”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K>ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ commit_inputs”h]”hŒ commit_inputs”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj#h²hh³hÇh´KHubhÞ)�”}”(hŒIMake DAMON_LRU_SORT reads the input parameters again, except ``enabled``.”h]”(hŒ=Make DAMON_LRU_SORT reads the input parameters again, except ”…”�”}”(hj4h²hh³Nh´Nubjq)�”}”(hŒ ``enabled``”h]”hŒenabled”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj4ubhŒ.”…”�”}”(hj4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KJhj#h²hubhÞ)�”}”(hXYInput parameters that updated while DAMON_LRU_SORT is running are not applied by default. Once this parameter is set as ``Y``, DAMON_LRU_SORT reads values of parameters except ``enabled`` again. Once the re-reading is done, this parameter is set as ``N``. If invalid parameters are found while the re-reading, DAMON_LRU_SORT will be disabled.”h]”(hŒyInput parameters that updated while DAMON_LRU_SORT is running are not applied by default. Once this parameter is set as ”…”�”}”(hjTh²hh³Nh´Nubjq)�”}”(hŒ``Y``”h]”hŒY”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjTubhŒ3, DAMON_LRU_SORT reads values of parameters except ”…”�”}”(hjTh²hh³Nh´Nubjq)�”}”(hŒ ``enabled``”h]”hŒenabled”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjTubhŒ? again. Once the re-reading is done, this parameter is set as ”…”�”}”(hjTh²hh³Nh´Nubjq)�”}”(hŒ``N``”h]”hŒN”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjTubhŒY. If invalid parameters are found while the re-reading, DAMON_LRU_SORT will be disabled.”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KLhj#h²hubhÞ)�”}”(hŒÏOnce ``Y`` is written to this parameter, the user must not write to any parameters until reading ``commit_inputs`` again returns ``N``. If users violate this rule, the kernel may exhibit undefined behavior.”h]”(hŒOnce ”…”�”}”(hj˜h²hh³Nh´Nubjq)�”}”(hŒ``Y``”h]”hŒY”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj˜ubhŒW is written to this parameter, the user must not write to any parameters until reading ”…”�”}”(hj˜h²hh³Nh´Nubjq)�”}”(hŒ``commit_inputs``”h]”hŒ commit_inputs”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj˜ubhŒ again returns ”…”�”}”(hj˜h²hh³Nh´Nubjq)�”}”(hŒ``N``”h]”hŒN”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj˜ubhŒI. If users violate this rule, the kernel may exhibit undefined behavior.”…”�”}”(hj˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KRhj#h²hubeh}”(h]”Œ commit-inputs”ah ]”h"]”Œ commit_inputs”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KHubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ active_mem_bp”h]”hŒ active_mem_bp”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjäh²hh³hÇh´KWubhÞ)�”}”(hŒ;Desired active to [in]active memory ratio in bp (1/10,000).”h]”hŒ;Desired active to [in]active memory ratio in bp (1/10,000).”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KYhjäh²hubhÞ)�”}”(hX/While keeping the caps that set by other quotas, DAMON_LRU_SORT automatically increases and decreases the effective level of the quota aiming the LRU [de]prioritizations of the hot and cold memory resulting in this active to [in]active memory ratio. Value zero means disabling this auto-tuning feature.”h]”hX/While keeping the caps that set by other quotas, DAMON_LRU_SORT automatically increases and decreases the effective level of the quota aiming the LRU [de]prioritizations of the hot and cold memory resulting in this active to [in]active memory ratio. Value zero means disabling this auto-tuning feature.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K[hjäh²hubhÞ)�”}”(hŒDisabled by default.”h]”hŒDisabled by default.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K`hjäh²hubeh}”(h]”Œ active-mem-bp”ah ]”h"]”Œ active_mem_bp”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KWubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒautotune_monitoring_intervals”h]”hŒautotune_monitoring_intervals”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj'h²hh³hÇh´KcubhÞ)�”}”(hXXIf this parameter is set as ``Y``, DAMON_LRU_SORT automatically tunes DAMON's sampling and aggregation intervals. The auto-tuning aims to capture meaningful amount of access events in each DAMON-snapshot, while keeping the sampling interval 5 milliseconds in minimum, and 10 seconds in maximum. Setting this as ``N`` disables the auto-tuning.”h]”(hŒIf this parameter is set as ”…”�”}”(hj8h²hh³Nh´Nubjq)�”}”(hŒ``Y``”h]”hŒY”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj8ubhX, DAMON_LRU_SORT automatically tunes DAMON’s sampling and aggregation intervals. The auto-tuning aims to capture meaningful amount of access events in each DAMON-snapshot, while keeping the sampling interval 5 milliseconds in minimum, and 10 seconds in maximum. Setting this as ”…”�”}”(hj8h²hh³Nh´Nubjq)�”}”(hŒ``N``”h]”hŒN”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj8ubhŒ disables the auto-tuning.”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kehj'h²hubhÞ)�”}”(hŒDisabled by default.”h]”hŒDisabled by default.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kkhj'h²hubeh}”(h]”Œautotune-monitoring-intervals”ah ]”h"]”Œautotune_monitoring_intervals”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KcubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒfilter_young_pages”h]”hŒfilter_young_pages”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj€h²hh³hÇh´KnubhÞ)�”}”(hŒAFilter [non-]young pages accordingly for LRU [de]prioritizations.”h]”hŒAFilter [non-]young pages accordingly for LRU [de]prioritizations.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kphj€h²hubhÞ)�”}”(hX”If this is set, check page level access (youngness) once again before each LRU [de]prioritization operation. LRU prioritization operation is skipped if the page has not accessed since the last check (not young). LRU deprioritization operation is skipped if the page has accessed since the last check (young). The feature is enabled or disabled if this parameter is set as ``Y`` or ``N``, respectively.”h]”(hXwIf this is set, check page level access (youngness) once again before each LRU [de]prioritization operation. LRU prioritization operation is skipped if the page has not accessed since the last check (not young). LRU deprioritization operation is skipped if the page has accessed since the last check (young). The feature is enabled or disabled if this parameter is set as ”…”�”}”(hjŸh²hh³Nh´Nubjq)�”}”(hŒ``Y``”h]”hŒY”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjŸubhŒ or ”…”�”}”(hjŸh²hh³Nh´Nubjq)�”}”(hŒ``N``”h]”hŒN”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjŸubhŒ, respectively.”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Krhj€h²hubhÞ)�”}”(hŒDisabled by default.”h]”hŒDisabled by default.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kyhj€h²hubeh}”(h]”Œfilter-young-pages”ah ]”h"]”Œfilter_young_pages”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KnubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒhot_thres_access_freq”h]”hŒhot_thres_access_freq”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjçh²hh³hÇh´K|ubhÞ)�”}”(hŒKAccess frequency threshold for hot memory regions identification in permil.”h]”hŒKAccess frequency threshold for hot memory regions identification in permil.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K~hjçh²hubhÞ)�”}”(hŒÞIf a memory region is accessed in frequency of this or higher, DAMON_LRU_SORT identifies the region as hot, and mark it as accessed on the LRU list, so that it could not be reclaimed under memory pressure. 50% by default.”h]”hŒÞIf a memory region is accessed in frequency of this or higher, DAMON_LRU_SORT identifies the region as hot, and mark it as accessed on the LRU list, so that it could not be reclaimed under memory pressure. 50% by default.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K€hjçh²hubeh}”(h]”Œhot-thres-access-freq”ah ]”h"]”Œhot_thres_access_freq”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K|ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ cold_min_age”h]”hŒ cold_min_age”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K…ubhÞ)�”}”(hŒFTime threshold for cold memory regions identification in microseconds.”h]”hŒFTime threshold for cold memory regions identification in microseconds.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‡hjh²hubhÞ)�”}”(hŒèIf a memory region is not accessed for this or longer time, DAMON_LRU_SORT identifies the region as cold, and mark it as unaccessed on the LRU list, so that it could be reclaimed first under memory pressure. 120 seconds by default.”h]”hŒèIf a memory region is not accessed for this or longer time, DAMON_LRU_SORT identifies the region as cold, and mark it as unaccessed on the LRU list, so that it could be reclaimed first under memory pressure. 120 seconds by default.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‰hjh²hubeh}”(h]”Œ cold-min-age”ah ]”h"]”Œ cold_min_age”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K…ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒquota_ms”h]”hŒquota_ms”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjQh²hh³hÇh´K�ubhÞ)�”}”(hŒ?Limit of time for trying the LRU lists sorting in milliseconds.”h]”hŒ?Limit of time for trying the LRU lists sorting in milliseconds.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‘hjQh²hubhÞ)�”}”(hŒíDAMON_LRU_SORT tries to use only up to this time within a time window (quota_reset_interval_ms) for trying LRU lists sorting. This can be used for limiting CPU consumption of DAMON_LRU_SORT. If the value is zero, the limit is disabled.”h]”hŒíDAMON_LRU_SORT tries to use only up to this time within a time window (quota_reset_interval_ms) for trying LRU lists sorting. This can be used for limiting CPU consumption of DAMON_LRU_SORT. If the value is zero, the limit is disabled.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K“hjQh²hubhÞ)�”}”(hŒ10 ms by default.”h]”hŒ10 ms by default.”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K˜hjQh²hubeh}”(h]”Œquota-ms”ah ]”h"]”Œquota_ms”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K�ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒquota_reset_interval_ms”h]”hŒquota_reset_interval_ms”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj”h²hh³hÇh´K›ubhÞ)�”}”(hŒ5The time quota charge reset interval in milliseconds.”h]”hŒ5The time quota charge reset interval in milliseconds.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hj”h²hubhÞ)�”}”(hŒÖThe charge reset interval for the quota of time (quota_ms). That is, DAMON_LRU_SORT does not try LRU-lists sorting for more than quota_ms milliseconds or quota_sz bytes within quota_reset_interval_ms milliseconds.”h]”hŒÖThe charge reset interval for the quota of time (quota_ms). That is, DAMON_LRU_SORT does not try LRU-lists sorting for more than quota_ms milliseconds or quota_sz bytes within quota_reset_interval_ms milliseconds.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŸhj”h²hubhÞ)�”}”(hŒ1 second by default.”h]”hŒ1 second by default.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K£hj”h²hubeh}”(h]”Œquota-reset-interval-ms”ah ]”h"]”Œquota_reset_interval_ms”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K›ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒwmarks_interval”h]”hŒwmarks_interval”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj×h²hh³hÇh´K¦ubhÞ)�”}”(hŒ3The watermarks check time interval in microseconds.”h]”hŒ3The watermarks check time interval in microseconds.”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¨hj×h²hubhÞ)�”}”(hŒ“Minimal time to wait before checking the watermarks, when DAMON_LRU_SORT is enabled but inactive due to its watermarks rule. 5 seconds by default.”h]”hŒ“Minimal time to wait before checking the watermarks, when DAMON_LRU_SORT is enabled but inactive due to its watermarks rule. 5 seconds by default.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kªhj×h²hubeh}”(h]”Œwmarks-interval”ah ]”h"]”Œwmarks_interval”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K¦ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ wmarks_high”h]”hŒ wmarks_high”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´K®ubhÞ)�”}”(hŒ7Free memory rate (per thousand) for the high watermark.”h]”hŒ7Free memory rate (per thousand) for the high watermark.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K°hj h²hubhÞ)�”}”(hŒÀIf free memory of the system in bytes per thousand bytes is higher than this, DAMON_LRU_SORT becomes inactive, so it does nothing but periodically checks the watermarks. 200 (20%) by default.”h]”hŒÀIf free memory of the system in bytes per thousand bytes is higher than this, DAMON_LRU_SORT becomes inactive, so it does nothing but periodically checks the watermarks. 200 (20%) by default.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K²hj h²hubeh}”(h]”Œ wmarks-high”ah ]”h"]”Œ wmarks_high”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K®ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ wmarks_mid”h]”hŒ wmarks_mid”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjAh²hh³hÇh´K·ubhÞ)�”}”(hŒ9Free memory rate (per thousand) for the middle watermark.”h]”hŒ9Free memory rate (per thousand) for the middle watermark.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¹hjAh²hubhÞ)�”}”(hŒÉIf free memory of the system in bytes per thousand bytes is between this and the low watermark, DAMON_LRU_SORT becomes active, so starts the monitoring and the LRU-lists sorting. 150 (15%) by default.”h]”hŒÉIf free memory of the system in bytes per thousand bytes is between this and the low watermark, DAMON_LRU_SORT becomes active, so starts the monitoring and the LRU-lists sorting. 150 (15%) by default.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K»hjAh²hubeh}”(h]”Œ wmarks-mid”ah ]”h"]”Œ wmarks_mid”ah$]”h&]”uh1hÈhjWh²hh³hÇh´K·ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ wmarks_low”h]”hŒ wmarks_low”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjvh²hh³hÇh´KÀubhÞ)�”}”(hŒ6Free memory rate (per thousand) for the low watermark.”h]”hŒ6Free memory rate (per thousand) for the low watermark.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÂhjvh²hubhÞ)�”}”(hŒ½If free memory of the system in bytes per thousand bytes is lower than this, DAMON_LRU_SORT becomes inactive, so it does nothing but periodically checks the watermarks. 50 (5%) by default.”h]”hŒ½If free memory of the system in bytes per thousand bytes is lower than this, DAMON_LRU_SORT becomes inactive, so it does nothing but periodically checks the watermarks. 50 (5%) by default.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÄhjvh²hubeh}”(h]”Œ wmarks-low”ah ]”h"]”Œ wmarks_low”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KÀubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒsample_interval”h]”hŒsample_interval”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj«h²hh³hÇh´KÉubhÞ)�”}”(hŒ5Sampling interval for the monitoring in microseconds.”h]”hŒ5Sampling interval for the monitoring in microseconds.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KËhj«h²hubhÞ)�”}”(hŒ˜The sampling interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (:doc:`usage`) for more detail. 5ms by default.”h]”(hŒiThe sampling interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (”…”�”}”(hjÊh²hh³Nh´Nubh)�”}”(hŒ :doc:`usage`”h]”hŒinline”“”)�”}”(hjÔh]”hŒusage”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1jÖhjÒubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œadmin-guide/mm/damon/lru_sort”Œ refdomain”jãŒreftype”Œdoc”Œ refexplicit”‰Œrefwarn”ˆŒ reftarget”Œusage”uh1hh³hÇh´KÍhjÊubhŒ#) for more detail. 5ms by default.”…”�”}”(hjÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÍhj«h²hubeh}”(h]”Œsample-interval”ah ]”h"]”Œsample_interval”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KÉubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ aggr_interval”h]”hŒ aggr_interval”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´KÑubhÞ)�”}”(hŒ8Aggregation interval for the monitoring in microseconds.”h]”hŒ8Aggregation interval for the monitoring in microseconds.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÓhj h²hubhÞ)�”}”(hŒ�The aggregation interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (:doc:`usage`) for more detail. 100ms by default.”h]”(hŒlThe aggregation interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (”…”�”}”(hj(h²hh³Nh´Nubh)�”}”(hŒ :doc:`usage`”h]”j×)�”}”(hj2h]”hŒusage”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”(jâŒstd”Œstd-doc”eh"]”h$]”h&]”uh1jÖhj0ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jïŒ refdomain”j>Œreftype”Œdoc”Œ refexplicit”‰Œrefwarn”ˆjõŒusage”uh1hh³hÇh´KÕhj(ubhŒ%) for more detail. 100ms by default.”…”�”}”(hj(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÕhj h²hubeh}”(h]”Œ aggr-interval”ah ]”h"]”Œ aggr_interval”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KÑubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒmin_nr_regions”h]”hŒmin_nr_regions”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjbh²hh³hÇh´KÚubhÞ)�”}”(hŒ%Minimum number of monitoring regions.”h]”hŒ%Minimum number of monitoring regions.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÜhjbh²hubhÞ)�”}”(hX3The minimal number of monitoring regions of DAMON for the cold memory monitoring. This can be used to set lower-bound of the monitoring quality. But, setting this too high could result in increased monitoring overhead. Please refer to the DAMON documentation (:doc:`usage`) for more detail. 10 by default.”h]”(hXThe minimal number of monitoring regions of DAMON for the cold memory monitoring. This can be used to set lower-bound of the monitoring quality. But, setting this too high could result in increased monitoring overhead. Please refer to the DAMON documentation (”…”�”}”(hj�h²hh³Nh´Nubh)�”}”(hŒ :doc:`usage`”h]”j×)�”}”(hj‹h]”hŒusage”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”(jâŒstd”Œstd-doc”eh"]”h$]”h&]”uh1jÖhj‰ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jïŒ refdomain”j—Œreftype”Œdoc”Œ refexplicit”‰Œrefwarn”ˆjõŒusage”uh1hh³hÇh´KÞhj�ubhŒ") for more detail. 10 by default.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÞhjbh²hubhÞ)�”}”(hŒ­Note that this must be 3 or higher. Please refer to the :ref:`Monitoring ` section of the design document for the rationale behind this lower bound.”h]”(hŒ8Note that this must be 3 or higher. Please refer to the ”…”�”}”(hj³h²hh³Nh´Nubh)�”}”(hŒ+:ref:`Monitoring `”h]”j×)�”}”(hj½h]”hŒ Monitoring”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”(jâŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jÖhj»ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jïŒ refdomain”jÉŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjõŒdamon_design_monitoring”uh1hh³hÇh´Kähj³ubhŒJ section of the design document for the rationale behind this lower bound.”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kähjbh²hubeh}”(h]”Œmin-nr-regions”ah ]”h"]”Œmin_nr_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KÚubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒmax_nr_regions”h]”hŒmax_nr_regions”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjíh²hh³hÇh´KéubhÞ)�”}”(hŒ%Maximum number of monitoring regions.”h]”hŒ%Maximum number of monitoring regions.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Këhjíh²hubhÞ)�”}”(hX4The maximum number of monitoring regions of DAMON for the cold memory monitoring. This can be used to set upper-bound of the monitoring overhead. However, setting this too low could result in bad monitoring quality. Please refer to the DAMON documentation (:doc:`usage`) for more detail. 1000 by defaults.”h]”(hXThe maximum number of monitoring regions of DAMON for the cold memory monitoring. This can be used to set upper-bound of the monitoring overhead. However, setting this too low could result in bad monitoring quality. Please refer to the DAMON documentation (”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ :doc:`usage`”h]”j×)�”}”(hjh]”hŒusage”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jâŒstd”Œstd-doc”eh"]”h$]”h&]”uh1jÖhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jïŒ refdomain”j"Œreftype”Œdoc”Œ refexplicit”‰Œrefwarn”ˆjõŒusage”uh1hh³hÇh´Kíhj ubhŒ%) for more detail. 1000 by defaults.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kíhjíh²hubeh}”(h]”Œmax-nr-regions”ah ]”h"]”Œmax_nr_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KéubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒmonitor_region_start”h]”hŒmonitor_region_start”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjFh²hh³hÇh´KôubhÞ)�”}”(hŒ2Start of target memory region in physical address.”h]”hŒ2Start of target memory region in physical address.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KöhjFh²hubhÞ)�”}”(hŒ�The start physical address of memory region that DAMON_LRU_SORT will do work against. By default, the system's entire physical memory is used as the region.”h]”hŒŸThe start physical address of memory region that DAMON_LRU_SORT will do work against. By default, the system’s entire physical memory is used as the region.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KøhjFh²hubeh}”(h]”Œmonitor-region-start”ah ]”h"]”Œmonitor_region_start”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KôubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒmonitor_region_end”h]”hŒmonitor_region_end”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj{h²hh³hÇh´KýubhÞ)�”}”(hŒ0End of target memory region in physical address.”h]”hŒ0End of target memory region in physical address.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kÿhj{h²hubhÞ)�”}”(hŒ›The end physical address of memory region that DAMON_LRU_SORT will do work against. By default, the system's entire physical memory is used as the region.”h]”hŒ�The end physical address of memory region that DAMON_LRU_SORT will do work against. By default, the system’s entire physical memory is used as the region.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj{h²hubeh}”(h]”Œmonitor-region-end”ah ]”h"]”Œmonitor_region_end”ah$]”h&]”uh1hÈhjWh²hh³hÇh´KýubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ addr_unit”h]”hŒ addr_unit”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj°h²hh³hÇh´MubhÞ)�”}”(hŒ.A scale factor for memory addresses and bytes.”h]”hŒ.A scale factor for memory addresses and bytes.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj°h²hubhÞ)�”}”(hŒ�This parameter is for setting and getting the :ref:`address unit ` parameter of the DAMON instance for DAMON_RECLAIM.”h]”(hŒ.This parameter is for setting and getting the ”…”�”}”(hjÏh²hh³Nh´Nubh)�”}”(hŒ,:ref:`address unit `”h]”j×)�”}”(hjÙh]”hŒ address unit”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”(jâŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jÖhj×ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jïŒ refdomain”jåŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjõŒdamon_design_addr_unit”uh1hh³hÇh´M hjÏubhŒ3 parameter of the DAMON instance for DAMON_RECLAIM.”…”�”}”(hjÏh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hj°h²hubhÞ)�”}”(hXv``monitor_region_start`` and ``monitor_region_end`` should be provided in this unit. For example, let's suppose ``addr_unit``, ``monitor_region_start`` and ``monitor_region_end`` are set as ``1024``, ``0`` and ``10``, respectively. Then DAMON_LRU_SORT will work for 10 KiB length of physical address range that starts from address zero (``[0 * 1024, 10 * 1024)`` in bytes).”h]”(jq)�”}”(hŒ``monitor_region_start``”h]”hŒmonitor_region_start”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubjq)�”}”(hŒ``monitor_region_end``”h]”hŒmonitor_region_end”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ@ should be provided in this unit. For example, let’s suppose ”…”�”}”(hjh²hh³Nh´Nubjq)�”}”(hŒ ``addr_unit``”h]”hŒ addr_unit”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ, ”…”�”}”(hjh²hh³Nh´Nubjq)�”}”(hŒ``monitor_region_start``”h]”hŒmonitor_region_start”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubjq)�”}”(hŒ``monitor_region_end``”h]”hŒmonitor_region_end”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ are set as ”…”�”}”(hjh²hh³Nh´Nubjq)�”}”(hŒ``1024``”h]”hŒ1024”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ, ”…”�”}”hjsbjq)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ and ”…”�”}”hjsbjq)�”}”(hŒ``10``”h]”hŒ10”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒy, respectively. Then DAMON_LRU_SORT will work for 10 KiB length of physical address range that starts from address zero (”…”�”}”(hjh²hh³Nh´Nubjq)�”}”(hŒ``[0 * 1024, 10 * 1024)``”h]”hŒ[0 * 1024, 10 * 1024)”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhŒ in bytes).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hj°h²hubhÞ)�”}”(hXnStat parameters having ``bytes_`` prefix are also in this unit. For example, let's suppose values of ``addr_unit``, ``bytes_lru_sort_tried_hot_regions`` and ``bytes_lru_sorted_hot_regions`` are ``1024``, ``42``, and ``32``, respectively. Then it means DAMON_LRU_SORT tried to LRU-sort 42 KiB of hot memory and successfully LRU-sorted 32 KiB of the memory in total.”h]”(hŒStat parameters having ”…”�”}”(hj­h²hh³Nh´Nubjq)�”}”(hŒ ``bytes_``”h]”hŒbytes_”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj­ubhŒG prefix are also in this unit. For example, let’s suppose values of ”…”�”}”(hj­h²hh³Nh´Nubjq)�”}”(hŒ ``addr_unit``”h]”hŒ addr_unit”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj­ubhŒ, ”…”�”}”(hj­h²hh³Nh´Nubjq)�”}”(hŒ$``bytes_lru_sort_tried_hot_regions``”h]”hŒ bytes_lru_sort_tried_hot_regions”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj­ubhŒ and ”…”�”}”(hj­h²hh³Nh´Nubjq)�”}”(hŒ ``bytes_lru_sorted_hot_regions``”h]”hŒbytes_lru_sorted_hot_regions”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj­ubhŒ are ”…”�”}”(hj­h²hh³Nh´Nubjq)�”}”(hŒ``1024``”h]”hŒ1024”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj­ubhŒ, ”…”�”}”hj­sbjq)�”}”(hŒ``42``”h]”hŒ42”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj­ubhŒ, and ”…”�”}”(hj­h²hh³Nh´Nubjq)�”}”(hŒ``32``”h]”hŒ32”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj­ubhŒ�, respectively. Then it means DAMON_LRU_SORT tried to LRU-sort 42 KiB of hot memory and successfully LRU-sorted 32 KiB of the memory in total.”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj°h²hubhÞ)�”}”(hŒDIf unsure, use only the default value (``1``) and forget about this.”h]”(hŒ'If unsure, use only the default value (”…”�”}”(hj9 h²hh³Nh´Nubjq)�”}”(hŒ``1``”h]”hŒ1”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj9 ubhŒ) and forget about this.”…”�”}”(hj9 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj°h²hubeh}”(h]”Œ addr-unit”ah ]”h"]”Œ addr_unit”ah$]”h&]”uh1hÈhjWh²hh³hÇh´MubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ kdamond_pid”h]”hŒ kdamond_pid”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhja h²hh³hÇh´MubhÞ)�”}”(hŒPID of the DAMON thread.”h]”hŒPID of the DAMON thread.”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhja h²hubhÞ)�”}”(hŒSIf DAMON_LRU_SORT is enabled, this becomes the PID of the worker thread. Else, -1.”h]”hŒSIf DAMON_LRU_SORT is enabled, this becomes the PID of the worker thread. Else, -1.”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hja h²hubeh}”(h]”Œ kdamond-pid”ah ]”h"]”Œ kdamond_pid”ah$]”h&]”uh1hÈhjWh²hh³hÇh´MubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒnr_lru_sort_tried_hot_regions”h]”hŒnr_lru_sort_tried_hot_regions”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj– h²hh³hÇh´M$ubhÞ)�”}”(hŒ9Number of hot memory regions that tried to be LRU-sorted.”h]”hŒ9Number of hot memory regions that tried to be LRU-sorted.”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M&hj– h²hubeh}”(h]”Œnr-lru-sort-tried-hot-regions”ah ]”h"]”Œnr_lru_sort_tried_hot_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´M$ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ bytes_lru_sort_tried_hot_regions”h]”hŒ bytes_lru_sort_tried_hot_regions”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj½ h²hh³hÇh´M)ubhÞ)�”}”(hŒ>Total bytes of hot memory regions that tried to be LRU-sorted.”h]”hŒ>Total bytes of hot memory regions that tried to be LRU-sorted.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M+hj½ h²hubeh}”(h]”Œ bytes-lru-sort-tried-hot-regions”ah ]”h"]”Œ bytes_lru_sort_tried_hot_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´M)ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒnr_lru_sorted_hot_regions”h]”hŒnr_lru_sorted_hot_regions”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjä h²hh³hÇh´M.ubhÞ)�”}”(hŒ=Number of hot memory regions that successfully be LRU-sorted.”h]”hŒ=Number of hot memory regions that successfully be LRU-sorted.”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M0hjä h²hubeh}”(h]”Œnr-lru-sorted-hot-regions”ah ]”h"]”Œnr_lru_sorted_hot_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´M.ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒbytes_lru_sorted_hot_regions”h]”hŒbytes_lru_sorted_hot_regions”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj h²hh³hÇh´M3ubhÞ)�”}”(hŒBTotal bytes of hot memory regions that successfully be LRU-sorted.”h]”hŒBTotal bytes of hot memory regions that successfully be LRU-sorted.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M5hj h²hubeh}”(h]”Œbytes-lru-sorted-hot-regions”ah ]”h"]”Œbytes_lru_sorted_hot_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´M3ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒnr_hot_quota_exceeds”h]”hŒnr_hot_quota_exceeds”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj2 h²hh³hÇh´M8ubhÞ)�”}”(hŒHNumber of times that the time quota limit for hot regions have exceeded.”h]”hŒHNumber of times that the time quota limit for hot regions have exceeded.”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M:hj2 h²hubeh}”(h]”Œnr-hot-quota-exceeds”ah ]”h"]”Œnr_hot_quota_exceeds”ah$]”h&]”uh1hÈhjWh²hh³hÇh´M8ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒnr_lru_sort_tried_cold_regions”h]”hŒnr_lru_sort_tried_cold_regions”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjY h²hh³hÇh´M=ubhÞ)�”}”(hŒ:Number of cold memory regions that tried to be LRU-sorted.”h]”hŒ:Number of cold memory regions that tried to be LRU-sorted.”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M?hjY h²hubeh}”(h]”Œnr-lru-sort-tried-cold-regions”ah ]”h"]”Œnr_lru_sort_tried_cold_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´M=ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ!bytes_lru_sort_tried_cold_regions”h]”hŒ!bytes_lru_sort_tried_cold_regions”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj€ h²hh³hÇh´MBubhÞ)�”}”(hŒ?Total bytes of cold memory regions that tried to be LRU-sorted.”h]”hŒ?Total bytes of cold memory regions that tried to be LRU-sorted.”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MDhj€ h²hubeh}”(h]”Œ!bytes-lru-sort-tried-cold-regions”ah ]”h"]”Œ!bytes_lru_sort_tried_cold_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´MBubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒnr_lru_sorted_cold_regions”h]”hŒnr_lru_sorted_cold_regions”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj§ h²hh³hÇh´MGubhÞ)�”}”(hŒ>Number of cold memory regions that successfully be LRU-sorted.”h]”hŒ>Number of cold memory regions that successfully be LRU-sorted.”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MIhj§ h²hubeh}”(h]”Œnr-lru-sorted-cold-regions”ah ]”h"]”Œnr_lru_sorted_cold_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´MGubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒbytes_lru_sorted_cold_regions”h]”hŒbytes_lru_sorted_cold_regions”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÎ h²hh³hÇh´MLubhÞ)�”}”(hŒCTotal bytes of cold memory regions that successfully be LRU-sorted.”h]”hŒCTotal bytes of cold memory regions that successfully be LRU-sorted.”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MNhjÎ h²hubeh}”(h]”Œbytes-lru-sorted-cold-regions”ah ]”h"]”Œbytes_lru_sorted_cold_regions”ah$]”h&]”uh1hÈhjWh²hh³hÇh´MLubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒnr_cold_quota_exceeds”h]”hŒnr_cold_quota_exceeds”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjõ h²hh³hÇh´MQubhÞ)�”}”(hŒINumber of times that the time quota limit for cold regions have exceeded.”h]”hŒINumber of times that the time quota limit for cold regions have exceeded.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MShjõ h²hubeh}”(h]”Œnr-cold-quota-exceeds”ah ]”h"]”Œnr_cold_quota_exceeds”ah$]”h&]”uh1hÈhjWh²hh³hÇh´MQubeh}”(h]”Œinterface-module-parameters”ah ]”h"]”Œinterface: module parameters”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K1ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒExample”h]”hŒExample”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj$ h²hh³hÇh´MVubhÞ)�”}”(hXåBelow runtime example commands make DAMON_LRU_SORT to find memory regions having >=50% access frequency and LRU-prioritize while LRU-deprioritizing memory regions that not accessed for 120 seconds. The prioritization and deprioritization is limited to be done using only up to 1% CPU time to avoid DAMON_LRU_SORT consuming too much CPU time for the (de)prioritization. It also asks DAMON_LRU_SORT to do nothing if the system's free memory rate is more than 50%, but start the real works if it becomes lower than 40%. If DAMON_RECLAIM doesn't make progress and therefore the free memory rate becomes lower than 20%, it asks DAMON_LRU_SORT to do nothing again, so that we can fall back to the LRU-list based page granularity reclamation. ::”h]”hXæBelow runtime example commands make DAMON_LRU_SORT to find memory regions having >=50% access frequency and LRU-prioritize while LRU-deprioritizing memory regions that not accessed for 120 seconds. The prioritization and deprioritization is limited to be done using only up to 1% CPU time to avoid DAMON_LRU_SORT consuming too much CPU time for the (de)prioritization. It also asks DAMON_LRU_SORT to do nothing if the system’s free memory rate is more than 50%, but start the real works if it becomes lower than 40%. If DAMON_RECLAIM doesn’t make progress and therefore the free memory rate becomes lower than 20%, it asks DAMON_LRU_SORT to do nothing again, so that we can fall back to the LRU-list based page granularity reclamation.”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MXhj$ h²hubhŒ literal_block”“”)�”}”(hX# cd /sys/module/damon_lru_sort/parameters # echo 500 > hot_thres_access_freq # echo 120000000 > cold_min_age # echo 10 > quota_ms # echo 1000 > quota_reset_interval_ms # echo 500 > wmarks_high # echo 400 > wmarks_mid # echo 200 > wmarks_low # echo Y > enabled”h]”hX# cd /sys/module/damon_lru_sort/parameters # echo 500 > hot_thres_access_freq # echo 120000000 > cold_min_age # echo 10 > quota_ms # echo 1000 > quota_reset_interval_ms # echo 500 > wmarks_high # echo 400 > wmarks_mid # echo 200 > wmarks_low # echo Y > enabled”…”�”}”hjE sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jC h³hÇh´Mchj$ h²hubhÞ)�”}”(hŒ÷Note that this module (damon_lru_sort) cannot run simultaneously with other DAMON-based special-purpose modules. Refer to :ref:`DAMON design special purpose modules exclusivity ` for more details.”h]”(hŒ{Note that this module (damon_lru_sort) cannot run simultaneously with other DAMON-based special-purpose modules. Refer to ”…”�”}”(hjS h²hh³Nh´Nubh)�”}”(hŒj:ref:`DAMON design special purpose modules exclusivity `”h]”j×)�”}”(hj] h]”hŒ0DAMON design special purpose modules exclusivity”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”(jâŒstd”Œstd-ref”eh"]”h$]”h&]”uh1jÖhj[ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jïŒ refdomain”ji Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjõŒ0damon_design_special_purpose_modules_exclusivity”uh1hh³hÇh´MmhjS ubhŒ for more details.”…”�”}”(hjS h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mmhj$ h²hubeh}”(h]”Œexample”ah ]”h"]”Œexample”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´MVubeh}”(h]”Œdamon-based-lru-lists-sorting”ah ]”h"]”Œdamon-based lru-lists sorting”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j¸ Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j’ j� jjjTjQj! j j jjájÞj$j!j}jzjäjájjjNjKj‘jŽjÔjÑj jj>j;jsjpj¨j¥jjj_j\jêjçjCj@jxjuj­jªj^ j[ j“ j� jº j· já jÞ j j j/ j, jV jS j} jz j¤ j¡ jË jÈ jò jï j j jŠ j‡ uŒ nametypes”}”(j’ ‰j‰jT‰j! ‰j ‰já‰j$‰j}‰jä‰j‰jN‰j‘‰jÔ‰j ‰j>‰js‰j¨‰j‰j_‰jê‰jC‰jx‰j­‰j^ ‰j“ ‰jº ‰já ‰j ‰j/ ‰jV ‰j} ‰j¤ ‰jË ‰jò ‰j ‰jŠ ‰uh}”(j� hÊjhíjQj"j jWjjÊjÞj#j!jäjzj'jáj€jjçjKjjŽjQjÑj”jj×j;j jpjAj¥jvjj«j\j jçjbj@jíjujFjªj{j[ j°j� ja j· j– jÞ j½ j jä j, j jS j2 jz jY j¡ j€ jÈ j§ jï jÎ j jõ j‡ j$ uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.