Asphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget1/translations/zh_CN/admin-guide/mm/damon/lru_sortmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/zh_TW/admin-guide/mm/damon/lru_sortmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/it_IT/admin-guide/mm/damon/lru_sortmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ja_JP/admin-guide/mm/damon/lru_sortmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ko_KR/admin-guide/mm/damon/lru_sortmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/pt_BR/admin-guide/mm/damon/lru_sortmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/sp_SP/admin-guide/mm/damon/lru_sortmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhK/var/lib/git/docbuild/linux/Documentation/admin-guide/mm/damon/lru_sort.rsthKubhsection)}(hhh](htitle)}(hDAMON-based LRU-lists Sortingh]hDAMON-based LRU-lists Sorting}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh 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.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h.Where Proactive LRU-lists Sorting is Required?h]h.Where Proactive LRU-lists Sorting is Required?}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh)}(hXAs 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]hXAs 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.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]-where-proactive-lru-lists-sorting-is-requiredah ]h"].where proactive lru-lists sorting is required?ah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h How It Works?h]h How It Works?}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hhhhhKubh)}(hXDAMON_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]hXDAMON_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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj"hhubh)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hj"hhubeh}(h] how-it-worksah ]h"] how it works?ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hInterface: Module Parametersh]hInterface: Module Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhhhhhK1ubh)}(hTo use this feature, you should first ensure your system is running on a kernel that is built with ``CONFIG_DAMON_LRU_SORT=y``.h](hcTo use this feature, you should first ensure your system is running on a kernel that is built with }(hjhhhhNhNubhliteral)}(h``CONFIG_DAMON_LRU_SORT=y``h]hCONFIG_DAMON_LRU_SORT=y}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjWhhubh)}(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](hTo let sysadmins enable or disable it and tune for the given system, DAMON_LRU_SORT utilizes module parameters. That is, you can put }(hjhhhNhNubjq)}(h&``damon_lru_sort.=``h]h"damon_lru_sort.=}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh; on the kernel boot command line or write proper values to }(hjhhhNhNubjq)}(h5``/sys/module/damon_lru_sort/parameters/``h]h1/sys/module/damon_lru_sort/parameters/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh files.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK6hjWhhubh)}(h,Below are the description of each parameter.h]h,Below are the description of each parameter.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjWhhubh)}(hhh](h)}(henabledh]henabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK>ubh)}(h!Enable or disable DAMON_LRU_SORT.h]h!Enable or disable DAMON_LRU_SORT.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjhhubh)}(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](hHYou can enable DAMON_LRU_SORT by setting the value of this parameter as }(hjhhhNhNubjq)}(h``Y``h]hY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh. Setting it as }(hjhhhNhNubjq)}(h``N``h]hN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKBhjhhubeh}(h]enabledah ]h"]enabledah$]h&]uh1hhjWhhhhhK>ubh)}(hhh](h)}(h commit_inputsh]h commit_inputs}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhKHubh)}(hIMake DAMON_LRU_SORT reads the input parameters again, except ``enabled``.h](h=Make DAMON_LRU_SORT reads the input parameters again, except }(hj4hhhNhNubjq)}(h ``enabled``h]henabled}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jphj4ubh.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKJhj#hhubh)}(hXXInput 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 parametrs 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](hyInput parameters that updated while DAMON_LRU_SORT is running are not applied by default. Once this parameter is set as }(hjThhhNhNubjq)}(h``Y``h]hY}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjTubh2, DAMON_LRU_SORT reads values of parametrs except }(hjThhhNhNubjq)}(h ``enabled``h]henabled}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjTubh? again. Once the re-reading is done, this parameter is set as }(hjThhhNhNubjq)}(h``N``h]hN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjTubhY. If invalid parameters are found while the re-reading, DAMON_LRU_SORT will be disabled.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKLhj#hhubh)}(hOnce ``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](hOnce }(hjhhhNhNubjq)}(h``Y``h]hY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubhW is written to this parameter, the user must not write to any parameters until reading }(hjhhhNhNubjq)}(h``commit_inputs``h]h commit_inputs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh again returns }(hjhhhNhNubjq)}(h``N``h]hN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubhI. If users violate this rule, the kernel may exhibit undefined behavior.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKRhj#hhubeh}(h] commit-inputsah ]h"] commit_inputsah$]h&]uh1hhjWhhhhhKHubh)}(hhh](h)}(h active_mem_bph]h active_mem_bp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKWubh)}(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).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjhhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjhhubh)}(hDisabled by default.h]hDisabled by default.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjhhubeh}(h] active-mem-bpah ]h"] active_mem_bpah$]h&]uh1hhjWhhhhhKWubh)}(hhh](h)}(hautotune_monitoring_intervalsh]hautotune_monitoring_intervals}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhKcubh)}(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](hIf this parameter is set as }(hj8hhhNhNubjq)}(h``Y``h]hY}(hj@hhhNhNubah}(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 }(hj8hhhNhNubjq)}(h``N``h]hN}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jphj8ubh disables the auto-tuning.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKehj'hhubh)}(hDisabled by default.h]hDisabled by default.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhj'hhubeh}(h]autotune-monitoring-intervalsah ]h"]autotune_monitoring_intervalsah$]h&]uh1hhjWhhhhhKcubh)}(hhh](h)}(hfilter_young_pagesh]hfilter_young_pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKnubh)}(hAFilter [non-]young pages accordingly for LRU [de]prioritizations.h]hAFilter [non-]young pages accordingly for LRU [de]prioritizations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjhhubh)}(hXIf 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 }(hjhhhNhNubjq)}(h``Y``h]hY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh or }(hjhhhNhNubjq)}(h``N``h]hN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh, respectively.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhjhhubh)}(hDisabled by default.h]hDisabled by default.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjhhubeh}(h]filter-young-pagesah ]h"]filter_young_pagesah$]h&]uh1hhjWhhhhhKnubh)}(hhh](h)}(hhot_thres_access_freqh]hhot_thres_access_freq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK|ubh)}(hKAccess frequency threshold for hot memory regions identification in permil.h]hKAccess frequency threshold for hot memory regions identification in permil.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjhhubh)}(hIf 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]hIf 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]hot-thres-access-freqah ]h"]hot_thres_access_freqah$]h&]uh1hhjWhhhhhK|ubh)}(hhh](h)}(h cold_min_ageh]h cold_min_age}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hFTime threshold for cold memory regions identification in microseconds.h]hFTime threshold for cold memory regions identification in microseconds.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hIf 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]hIf 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;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] cold-min-ageah ]h"] cold_min_ageah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hquota_msh]hquota_ms}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhhhhhKubh)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjQhhubh)}(hDAMON_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]hDAMON_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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjQhhubh)}(h10 ms by default.h]h10 ms by default.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjQhhubeh}(h]quota-msah ]h"]quota_msah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hquota_reset_interval_msh]hquota_reset_interval_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h5The time quota charge reset interval in milliseconds.h]h5The time quota charge reset interval in milliseconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hThe 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]hThe 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h1 second by default.h]h1 second by default.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]quota-reset-interval-msah ]h"]quota_reset_interval_msah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hwmarks_intervalh]hwmarks_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h3The watermarks check time interval in microseconds.h]h3The watermarks check time interval in microseconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hMinimal 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]hMinimal time to wait before checking the watermarks, when DAMON_LRU_SORT is enabled but inactive due to its watermarks rule. 5 seconds by default.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmarks-intervalah ]h"]wmarks_intervalah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(h wmarks_highh]h wmarks_high}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(h7Free memory rate (per thousand) for the high watermark.h]h7Free memory rate (per thousand) for the high watermark.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hIf 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]hIf 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+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] wmarks-highah ]h"] wmarks_highah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(h wmarks_midh]h wmarks_mid}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhhhhhKubh)}(h9Free memory rate (per thousand) for the middle watermark.h]h9Free memory rate (per thousand) for the middle watermark.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjAhhubh)}(hIf 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]hIf 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`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjAhhubeh}(h] wmarks-midah ]h"] wmarks_midah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(h wmarks_lowh]h wmarks_low}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhhhhhKubh)}(h6Free memory rate (per thousand) for the low watermark.h]h6Free memory rate (per thousand) for the low watermark.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjvhhubh)}(hIf 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]hIf 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjvhhubeh}(h] wmarks-lowah ]h"] wmarks_lowah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hsample_intervalh]hsample_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h5Sampling interval for the monitoring in microseconds.h]h5Sampling interval for the monitoring in microseconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hThe sampling interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (:doc:`usage`) for more detail. 5ms by default.h](hiThe sampling interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (}(hjhhhNhNubh)}(h :doc:`usage`h]hinline)}(hjh]husage}(hjhhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocadmin-guide/mm/damon/lru_sort refdomainjreftypedoc refexplicitrefwarn reftargetusageuh1hhhhKhjubh#) for more detail. 5ms by default.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]sample-intervalah ]h"]sample_intervalah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(h aggr_intervalh]h aggr_interval}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(h8Aggregation interval for the monitoring in microseconds.h]h8Aggregation interval for the monitoring in microseconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hThe aggregation interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (:doc:`usage`) for more detail. 100ms by default.h](hlThe aggregation interval of DAMON for the cold memory monitoring. Please refer to the DAMON documentation (}(hj(hhhNhNubh)}(h :doc:`usage`h]j)}(hj2h]husage}(hj4hhhNhNubah}(h]h ](jstdstd-doceh"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainj>reftypedoc refexplicitrefwarnjusageuh1hhhhKhj(ubh%) for more detail. 100ms by default.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] aggr-intervalah ]h"] aggr_intervalah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hmin_nr_regionsh]hmin_nr_regions}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhhhhhKubh)}(h%Minimum number of monitoring regions.h]h%Minimum number of monitoring regions.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjbhhubh)}(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 (}(hjhhhNhNubh)}(h :doc:`usage`h]j)}(hjh]husage}(hjhhhNhNubah}(h]h ](jstdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypedoc refexplicitrefwarnjusageuh1hhhhKhjubh") for more detail. 10 by default.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjbhhubh)}(hNote 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](h8Note that this must be 3 or higher. Please refer to the }(hjhhhNhNubh)}(h+:ref:`Monitoring `h]j)}(hjh]h Monitoring}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjdamon_design_monitoringuh1hhhhKhjubhJ section of the design document for the rationale behind this lower bound.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjbhhubeh}(h]min-nr-regionsah ]h"]min_nr_regionsah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hmax_nr_regionsh]hmax_nr_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h%Maximum number of monitoring regions.h]h%Maximum number of monitoring regions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(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 hhhNhNubh)}(h :doc:`usage`h]j)}(hjh]husage}(hjhhhNhNubah}(h]h ](jstdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainj"reftypedoc refexplicitrefwarnjusageuh1hhhhKhj ubh%) for more detail. 1000 by defaults.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]max-nr-regionsah ]h"]max_nr_regionsah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hmonitor_region_starth]hmonitor_region_start}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhhhhKubh)}(h2Start of target memory region in physical address.h]h2Start of target memory region in physical address.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubh)}(hThe start physical address of memory region that DAMON_LRU_SORT will do work against. By default, biggest System RAM is used as the region.h]hThe start physical address of memory region that DAMON_LRU_SORT will do work against. By default, biggest System RAM is used as the region.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubeh}(h]monitor-region-startah ]h"]monitor_region_startah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(hmonitor_region_endh]hmonitor_region_end}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hhhhhKubh)}(h0End of target memory region in physical address.h]h0End of target memory region in physical address.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{hhubh)}(hThe end physical address of memory region that DAMON_LRU_SORT will do work against. By default, biggest System RAM is used as the region.h]hThe end physical address of memory region that DAMON_LRU_SORT will do work against. By default, biggest System RAM is used as the region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj{hhubeh}(h]monitor-region-endah ]h"]monitor_region_endah$]h&]uh1hhjWhhhhhKubh)}(hhh](h)}(h addr_unith]h addr_unit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(h.A scale factor for memory addresses and bytes.h]h.A scale factor for memory addresses and bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hThis 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 }(hjhhhNhNubh)}(h,:ref:`address unit `h]j)}(hjh]h address unit}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjdamon_design_addr_unituh1hhhhMhjubh3 parameter of the DAMON instance for DAMON_RECLAIM.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(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]hmonitor_region_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh and }(hjhhhNhNubjq)}(h``monitor_region_end``h]hmonitor_region_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh@ should be provided in this unit. For example, let’s suppose }(hjhhhNhNubjq)}(h ``addr_unit``h]h addr_unit}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh, }(hjhhhNhNubjq)}(h``monitor_region_start``h]hmonitor_region_start}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh and }(hjhhhNhNubjq)}(h``monitor_region_end``h]hmonitor_region_end}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh are set as }(hjhhhNhNubjq)}(h``1024``h]h1024}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh, }hjsbjq)}(h``0``h]h0}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh and }hjsbjq)}(h``10``h]h10}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubhy, respectively. Then DAMON_LRU_SORT will work for 10 KiB length of physical address range that starts from address zero (}(hjhhhNhNubjq)}(h``[0 * 1024, 10 * 1024)``h]h[0 * 1024, 10 * 1024)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh in bytes).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjhhubh)}(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](hStat parameters having }(hjhhhNhNubjq)}(h ``bytes_``h]hbytes_}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubhG prefix are also in this unit. For example, let’s suppose values of }(hjhhhNhNubjq)}(h ``addr_unit``h]h addr_unit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh, }(hjhhhNhNubjq)}(h$``bytes_lru_sort_tried_hot_regions``h]h bytes_lru_sort_tried_hot_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh and }(hjhhhNhNubjq)}(h ``bytes_lru_sorted_hot_regions``h]hbytes_lru_sorted_hot_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh are }(hjhhhNhNubjq)}(h``1024``h]h1024}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh, }hjsbjq)}(h``42``h]h42}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh, and }(hjhhhNhNubjq)}(h``32``h]h32}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jphjubh, 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hDIf unsure, use only the default value (``1``) and forget about this.h](h'If unsure, use only the default value (}(hj9 hhhNhNubjq)}(h``1``h]h1}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jphj9 ubh) and forget about this.}(hj9 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h] addr-unitah ]h"] addr_unitah$]h&]uh1hhjWhhhhhMubh)}(hhh](h)}(h kdamond_pidh]h kdamond_pid}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja hhhhhMubh)}(hPID of the DAMON thread.h]hPID of the DAMON thread.}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhja hhubh)}(hSIf DAMON_LRU_SORT is enabled, this becomes the PID of the worker thread. Else, -1.h]hSIf DAMON_LRU_SORT is enabled, this becomes the PID of the worker thread. Else, -1.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhja hhubeh}(h] kdamond-pidah ]h"] kdamond_pidah$]h&]uh1hhjWhhhhhMubh)}(hhh](h)}(hnr_lru_sort_tried_hot_regionsh]hnr_lru_sort_tried_hot_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM"ubh)}(h9Number of hot memory regions that tried to be LRU-sorted.h]h9Number of hot memory regions that tried to be LRU-sorted.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM$hj hhubeh}(h]nr-lru-sort-tried-hot-regionsah ]h"]nr_lru_sort_tried_hot_regionsah$]h&]uh1hhjWhhhhhM"ubh)}(hhh](h)}(h bytes_lru_sort_tried_hot_regionsh]h bytes_lru_sort_tried_hot_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM'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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hj hhubeh}(h] bytes-lru-sort-tried-hot-regionsah ]h"] bytes_lru_sort_tried_hot_regionsah$]h&]uh1hhjWhhhhhM'ubh)}(hhh](h)}(hnr_lru_sorted_hot_regionsh]hnr_lru_sorted_hot_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM,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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM.hj hhubeh}(h]nr-lru-sorted-hot-regionsah ]h"]nr_lru_sorted_hot_regionsah$]h&]uh1hhjWhhhhhM,ubh)}(hhh](h)}(hbytes_lru_sorted_hot_regionsh]hbytes_lru_sorted_hot_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM1ubh)}(hBTotal bytes of hot memory regions that successfully be LRU-sorted.h]hBTotal bytes of hot memory regions that successfully be LRU-sorted.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM3hj hhubeh}(h]bytes-lru-sorted-hot-regionsah ]h"]bytes_lru_sorted_hot_regionsah$]h&]uh1hhjWhhhhhM1ubh)}(hhh](h)}(hnr_hot_quota_exceedsh]hnr_hot_quota_exceeds}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hhhhhM6ubh)}(hHNumber of times that the time quota limit for hot regions have exceeded.h]hHNumber of times that the time quota limit for hot regions have exceeded.}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hj2 hhubeh}(h]nr-hot-quota-exceedsah ]h"]nr_hot_quota_exceedsah$]h&]uh1hhjWhhhhhM6ubh)}(hhh](h)}(hnr_lru_sort_tried_cold_regionsh]hnr_lru_sort_tried_cold_regions}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY hhhhhM;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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM=hjY hhubeh}(h]nr-lru-sort-tried-cold-regionsah ]h"]nr_lru_sort_tried_cold_regionsah$]h&]uh1hhjWhhhhhM;ubh)}(hhh](h)}(h!bytes_lru_sort_tried_cold_regionsh]h!bytes_lru_sort_tried_cold_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM@ubh)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMBhj hhubeh}(h]!bytes-lru-sort-tried-cold-regionsah ]h"]!bytes_lru_sort_tried_cold_regionsah$]h&]uh1hhjWhhhhhM@ubh)}(hhh](h)}(hnr_lru_sorted_cold_regionsh]hnr_lru_sorted_cold_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMEubh)}(h>Number of cold memory regions that successfully be LRU-sorted.h]h>Number of cold memory regions that successfully be LRU-sorted.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMGhj hhubeh}(h]nr-lru-sorted-cold-regionsah ]h"]nr_lru_sorted_cold_regionsah$]h&]uh1hhjWhhhhhMEubh)}(hhh](h)}(hbytes_lru_sorted_cold_regionsh]hbytes_lru_sorted_cold_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMJubh)}(hCTotal bytes of cold memory regions that successfully be LRU-sorted.h]hCTotal bytes of cold memory regions that successfully be LRU-sorted.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMLhj hhubeh}(h]bytes-lru-sorted-cold-regionsah ]h"]bytes_lru_sorted_cold_regionsah$]h&]uh1hhjWhhhhhMJubh)}(hhh](h)}(hnr_cold_quota_exceedsh]hnr_cold_quota_exceeds}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMOubh)}(hINumber of times that the time quota limit for cold regions have exceeded.h]hINumber of times that the time quota limit for cold regions have exceeded.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMQhj hhubeh}(h]nr-cold-quota-exceedsah ]h"]nr_cold_quota_exceedsah$]h&]uh1hhjWhhhhhMOubeh}(h]interface-module-parametersah ]h"]interface: module parametersah$]h&]uh1hhhhhhhhK1ubh)}(hhh](h)}(hExampleh]hExample}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ hhhhhMTubh)}(hXBelow 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]hXBelow 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMVhj$ hhubh 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 > enabledh]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&]hhuh1jC hhhMahj$ hhubh)}(hNote 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 hhhNhNubh)}(hj:ref:`DAMON design special purpose modules exclusivity `h]j)}(hj] h]h0DAMON design special purpose modules exclusivity}(hj_ hhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhj[ ubah}(h]h ]h"]h$]h&]refdocj refdomainji reftyperef refexplicitrefwarnj0damon_design_special_purpose_modules_exclusivityuh1hhhhMkhjS ubh for more details.}(hjS hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMkhj$ hhubeh}(h]exampleah ]h"]exampleah$]h&]uh1hhhhhhhhMTubeh}(h]damon-based-lru-lists-sortingah ]h"]damon-based lru-lists sortingah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jjjTjQj! j j jjjj$j!j}jzjjjjjNjKjjjjj jj>j;jsjpjjjjj_j\jjjCj@jxjujjj^ 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 jjTj! j jj$j}jjjNjjj j>jsjjj_jjCjxjj^ j j j j j/ jV j} j j j j j uh}(j hjhjQj"j jWjjjj#j!jjzj'jjjjjKjjjQjjjjj;j jpjAjjvjjj\j jjbj@jjujFjj{j[ jj 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_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.