čsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/admin-guide/mm/damon/reclaimmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/zh_TW/admin-guide/mm/damon/reclaimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/it_IT/admin-guide/mm/damon/reclaimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ja_JP/admin-guide/mm/damon/reclaimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/ko_KR/admin-guide/mm/damon/reclaimmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget0/translations/sp_SP/admin-guide/mm/damon/reclaimmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh]/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/admin-guide/mm/damon/reclaim.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h/Documentation/admin-guide/mm/damon/reclaim.rst h]h)}(h.Documentation/admin-guide/mm/damon/reclaim.rsth]h.Documentation/admin-guide/mm/damon/reclaim.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hj hhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h基于DAMON的回收h]h基于DAMON的回收}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjxhhhhhKubh)}(hX基于DAMON的回收(DAMON_RECLAIM)是一个静态的内核模块,旨在用于轻度内存压力下的主动和轻 量级的回收。它的目的不是取代基于LRU列表的页面回收,而是有选择地用于不同程度的内存压力和要 求。h]hX基于DAMON的回收(DAMON_RECLAIM)是一个静态的内核模块,旨在用于轻度内存压力下的主动和轻 量级的回收。它的目的不是取代基于LRU列表的页面回收,而是有选择地用于不同程度的内存压力和要 求。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjxhhubjw)}(hhh](j|)}(h!哪些地方需要主动回收?h]h!哪些地方需要主动回收?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(hX在一般的内存超量使用(over-committed systems,虚拟化相关术语)的系统上,主动回收冷页 有助于节省内存和减少延迟高峰,这些延迟是由直接回收进程或kswapd的CPU消耗引起的,同时只产 生最小的性能下降 [1]_ [2]_ 。h](hX 在一般的内存超量使用(over-committed systems,虚拟化相关术语)的系统上,主动回收冷页 有助于节省内存和减少延迟高峰,这些延迟是由直接回收进程或kswapd的CPU消耗引起的,同时只产 生最小的性能下降 }(hjhhhNhNubhfootnote_reference)}(h[1]_h]h1}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]refidid8docname/translations/zh_CN/admin-guide/mm/damon/reclaimuh1jhjresolvedKubh }(hjhhhNhNubj)}(h[2]_h]h2}(hjhhhNhNubah}(h]id3ah ]h"]h$]h&]jid9jjuh1jhjjKubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXS基于空闲页报告 [3]_ 的内存过度承诺的虚拟化系统就是很好的例子。在这样的系统中,客户机 向主机报告他们的空闲内存,而主机则将报告的内存重新分配给其他客户。因此,系统的内存得到了充 分的利用。然而,客户可能不那么节省内存,主要是因为一些内核子系统和用户空间应用程序被设计为 使用尽可能多的内存。然后,客户机可能只向主机报告少量的内存是空闲的,导致系统的内存利用率下降。 在客户中运行主动回收可以缓解这个问题。h](h基于空闲页报告 }(hjhhhNhNubj)}(h[3]_h]h3}(hjhhhNhNubah}(h]id4ah ]h"]h$]h&]jid10jjuh1jhjjKubhX9 的内存过度承诺的虚拟化系统就是很好的例子。在这样的系统中,客户机 向主机报告他们的空闲内存,而主机则将报告的内存重新分配给其他客户。因此,系统的内存得到了充 分的利用。然而,客户可能不那么节省内存,主要是因为一些内核子系统和用户空间应用程序被设计为 使用尽可能多的内存。然后,客户机可能只向主机报告少量的内存是空闲的,导致系统的内存利用率下降。 在客户中运行主动回收可以缓解这个问题。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id1ah ]h"]!哪些地方需要主动回收?ah$]h&]uh1jvhjxhhhhhKubjw)}(hhh](j|)}(h它是如何工作的?h]h它是如何工作的?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK"ubh)}(hXqDAMON_RECLAIM找到在特定时间内没有被访问的内存区域并分页。为了避免它在分页操作中消耗过多 的CPU,可以配置一个速度限制。在这个速度限制下,它首先分页出那些没有被访问过的内存区域。系 统管理员还可以配置在什么情况下这个方案应该自动激活和停用三个内存压力水位。h]hXqDAMON_RECLAIM找到在特定时间内没有被访问的内存区域并分页。为了避免它在分页操作中消耗过多 的CPU,可以配置一个速度限制。在这个速度限制下,它首先分页出那些没有被访问过的内存区域。系 统管理员还可以配置在什么情况下这个方案应该自动激活和停用三个内存压力水位。}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjhhubeh}(h]id5ah ]h"]它是如何工作的?ah$]h&]uh1jvhjxhhhhhK"ubjw)}(hhh](j|)}(h接口: 模块参数h]h接口: 模块参数}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj7hhhhhK)ubh)}(hz要使用这个功能,你首先要确保你的系统运行在一个以 ``CONFIG_DAMON_RECLAIM=y`` 构建的内 核上。h](hI要使用这个功能,你首先要确保你的系统运行在一个以 }(hjHhhhNhNubhliteral)}(h``CONFIG_DAMON_RECLAIM=y``h]hCONFIG_DAMON_RECLAIM=y}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jPhjHubh 构建的内 核上。}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK+hj7hhubh)}(hX5为了让系统管理员启用或禁用它,并为给定的系统进行调整,DAMON_RECLAIM利用了模块参数。也就 是说,你可以把 ``damon_reclaim.=`` 放在内核启动命令行上,或者把 适当的值写入 ``/sys/module/damon_reclaim/parameters/`` 文件。h](h为了让系统管理员启用或禁用它,并为给定的系统进行调整,DAMON_RECLAIM利用了模块参数。也就 是说,你可以把 }(hjjhhhNhNubjQ)}(h%``damon_reclaim.=``h]h!damon_reclaim.=}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jPhjjubh? 放在内核启动命令行上,或者把 适当的值写入 }(hjjhhhNhNubjQ)}(h4``/sys/module/damon_reclaim/parameters/``h]h0/sys/module/damon_reclaim/parameters/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jPhjjubh 文件。}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK.hj7hhubh)}(h!下面是每个参数的描述。h]h!下面是每个参数的描述。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hj7hhubjw)}(hhh](j|)}(henabledh]henabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK5ubh)}(h启用或禁用DAMON_RECLAIM。h]h启用或禁用DAMON_RECLAIM。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubh)}(hX你可以通过把这个参数的值设置为 ``Y`` 来启用DAMON_RCLAIM,把它设置为 ``N`` 可以禁用 DAMON_RECLAIM。注意,由于基于水位的激活条件,DAMON_RECLAIM不能进行真正的监测和回收。 这一点请参考下面关于水位参数的描述。h](h.你可以通过把这个参数的值设置为 }(hjhhhNhNubjQ)}(h``Y``h]hY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jPhjubh) 来启用DAMON_RCLAIM,把它设置为 }(hjhhhNhNubjQ)}(h``N``h]hN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jPhjubh 可以禁用 DAMON_RECLAIM。注意,由于基于水位的激活条件,DAMON_RECLAIM不能进行真正的监测和回收。 这一点请参考下面关于水位参数的描述。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK9hjhhubeh}(h]enabledah ]h"]enabledah$]h&]uh1jvhj7hhhhhK5ubjw)}(hhh](j|)}(hmin_ageh]hmin_age}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK>ubh)}(h9识别冷内存区域的时间阈值,单位是微秒。h]h9识别冷内存区域的时间阈值,单位是微秒。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hjhhubh)}(h如果一个内存区域在这个时间或更长的时间内没有被访问,DAMON_RECLAIM会将该区域识别为冷的, 并回收它。h]h如果一个内存区域在这个时间或更长的时间内没有被访问,DAMON_RECLAIM会将该区域识别为冷的, 并回收它。}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjhhubh)}(h默认为120秒。h]h默认为120秒。}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjhhubeh}(h]min-ageah ]h"]min_ageah$]h&]uh1jvhj7hhhhhK>ubjw)}(hhh](j|)}(hquota_msh]hquota_ms}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjFhhhhhKHubh)}(h-回收的时间限制,以毫秒为单位。h]h-回收的时间限制,以毫秒为单位。}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjFhhubh)}(hDAMON_RECLAIM 试图在一个时间窗口(quota_reset_interval_ms)内只使用到这个时间,以 尝试回收冷页。这可以用来限制DAMON_RECLAIM的CPU消耗。如果该值为零,则该限制被禁用。h]hDAMON_RECLAIM 试图在一个时间窗口(quota_reset_interval_ms)内只使用到这个时间,以 尝试回收冷页。这可以用来限制DAMON_RECLAIM的CPU消耗。如果该值为零,则该限制被禁用。}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjFhhubh)}(h默认为10ms。h]h默认为10ms。}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjFhhubeh}(h]quota-msah ]h"]quota_msah$]h&]uh1jvhj7hhhhhKHubjw)}(hhh](j|)}(hquota_szh]hquota_sz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKRubh)}(h0回收的内存大小限制,单位为字节。h]h0回收的内存大小限制,单位为字节。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjhhubh)}(hDAMON_RECLAIM 收取在一个时间窗口(quota_reset_interval_ms)内试图回收的内存量,并 使其不超过这个限制。这可以用来限制CPU和IO的消耗。如果该值为零,则限制被禁用。h]hDAMON_RECLAIM 收取在一个时间窗口(quota_reset_interval_ms)内试图回收的内存量,并 使其不超过这个限制。这可以用来限制CPU和IO的消耗。如果该值为零,则限制被禁用。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjhhubh)}(h默认情况下是128 MiB。h]h默认情况下是128 MiB。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjhhubeh}(h]quota-szah ]h"]quota_szah$]h&]uh1jvhj7hhhhhKRubjw)}(hhh](j|)}(hquota_reset_interval_msh]hquota_reset_interval_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK\ubh)}(h:时间/大小配额收取重置间隔,单位为毫秒。h]h:时间/大小配额收取重置间隔,单位为毫秒。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjhhubh)}(h时间(quota_ms)和大小(quota_sz)的配额的目标重置间隔。也就是说,DAMON_RECLAIM在 尝试回收‘不’超过quota_ms毫秒或quota_sz字节的内存。h]h时间(quota_ms)和大小(quota_sz)的配额的目标重置间隔。也就是说,DAMON_RECLAIM在 尝试回收‘不’超过quota_ms毫秒或quota_sz字节的内存。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjhhubh)}(h默认为1秒。h]h默认为1秒。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchjhhubeh}(h]quota-reset-interval-msah ]h"]quota_reset_interval_msah$]h&]uh1jvhj7hhhhhK\ubjw)}(hhh](j|)}(hwmarks_intervalh]hwmarks_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKfubh)}(hp当DAMON_RECLAIM被启用但由于其水位规则而不活跃时,在检查水位之前的最小等待时间。h]hp当DAMON_RECLAIM被启用但由于其水位规则而不活跃时,在检查水位之前的最小等待时间。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjhhubeh}(h]wmarks-intervalah ]h"]wmarks_intervalah$]h&]uh1jvhj7hhhhhKfubjw)}(hhh](j|)}(h wmarks_highh]h wmarks_high}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj6hhhhhKkubh)}(h0高水位的可用内存率(每千字节)。h]h0高水位的可用内存率(每千字节)。}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhj6hhubh)}(h如果系统的可用内存(以每千字节为单位)高于这个数值,DAMON_RECLAIM就会变得不活跃,所以 它什么也不做,只是定期检查水位。h]h如果系统的可用内存(以每千字节为单位)高于这个数值,DAMON_RECLAIM就会变得不活跃,所以 它什么也不做,只是定期检查水位。}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohj6hhubeh}(h] wmarks-highah ]h"] wmarks_highah$]h&]uh1jvhj7hhhhhKkubjw)}(hhh](j|)}(h wmarks_midh]h wmarks_mid}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjkhhhhhKsubh)}(h3中间水位的可用内存率(每千字节)。h]h3中间水位的可用内存率(每千字节)。}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhjkhhubh)}(h如果系统的空闲内存(以每千字节为单位)在这个和低水位线之间,DAMON_RECLAIM就会被激活, 因此开始监测和回收。h]h如果系统的空闲内存(以每千字节为单位)在这个和低水位线之间,DAMON_RECLAIM就会被激活, 因此开始监测和回收。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKwhjkhhubeh}(h] wmarks-midah ]h"] wmarks_midah$]h&]uh1jvhj7hhhhhKsubjw)}(hhh](j|)}(h wmarks_lowh]h wmarks_low}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhK{ubh)}(h0低水位的可用内存率(每千字节)。h]h0低水位的可用内存率(每千字节)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hjhhubh)}(h如果系统的空闲内存(以每千字节为单位)低于这个数值,DAMON_RECLAIM就会变得不活跃,所以 它除了定期检查水位外什么都不做。在这种情况下,系统会退回到基于LRU列表的页面粒度回收逻辑。h]h如果系统的空闲内存(以每千字节为单位)低于这个数值,DAMON_RECLAIM就会变得不活跃,所以 它除了定期检查水位外什么都不做。在这种情况下,系统会退回到基于LRU列表的页面粒度回收逻辑。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] wmarks-lowah ]h"] wmarks_lowah$]h&]uh1jvhj7hhhhhK{ubjw)}(hhh](j|)}(hsample_intervalh]hsample_interval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(h*监测的采样间隔,单位是微秒。h]h*监测的采样间隔,单位是微秒。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h_DAMON用于监测冷内存的采样间隔。更多细节请参考DAMON文档 (:doc:`usage`) 。h](hNDAMON用于监测冷内存的采样间隔。更多细节请参考DAMON文档 (}(hjhhhNhNubh)}(h :doc:`usage`h]hinline)}(hjh]husage}(hjhhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainj reftypedoc refexplicitrefwarn reftargetusageuh1hhhhKhjubh) 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]sample-intervalah ]h"]sample_intervalah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(h aggr_intervalh]h aggr_interval}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj2hhhhhKubh)}(h*监测的聚集间隔,单位是微秒。h]h*监测的聚集间隔,单位是微秒。}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj2hhubh)}(h[DAMON对冷内存监测的聚集间隔。更多细节请参考DAMON文档 (:doc:`usage`)。h](hKDAMON对冷内存监测的聚集间隔。更多细节请参考DAMON文档 (}(hjQhhhNhNubh)}(h :doc:`usage`h]j)}(hj[h]husage}(hj]hhhNhNubah}(h]h ](j stdstd-doceh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj refdomainjgreftypedoc refexplicitrefwarnjusageuh1hhhhKhjQubh)。}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj2hhubeh}(h] aggr-intervalah ]h"] aggr_intervalah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hmin_nr_regionsh]hmin_nr_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(h监测区域的最小数量。h]h监测区域的最小数量。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hDAMON用于冷内存监测的最小监测区域数。这可以用来设置监测质量的下限。但是,设 置的太高可能会导致监测开销的增加。更多细节请参考DAMON文档 (:doc:`usage`) 。h](hDAMON用于冷内存监测的最小监测区域数。这可以用来设置监测质量的下限。但是,设 置的太高可能会导致监测开销的增加。更多细节请参考DAMON文档 (}(hjhhhNhNubh)}(h :doc:`usage`h]j)}(hjh]husage}(hjhhhNhNubah}(h]h ](j stdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypedoc refexplicitrefwarnjusageuh1hhhhKhjubh) 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]min-nr-regionsah ]h"]min_nr_regionsah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hmax_nr_regionsh]hmax_nr_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(h监测区域的最大数量。h]h监测区域的最大数量。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hDAMON用于冷内存监测的最大监测区域数。这可以用来设置监测开销的上限值。但是, 设置得太低可能会导致监测质量不好。更多细节请参考DAMON文档 (:doc:`usage`) 。h](hDAMON用于冷内存监测的最大监测区域数。这可以用来设置监测开销的上限值。但是, 设置得太低可能会导致监测质量不好。更多细节请参考DAMON文档 (}(hjhhhNhNubh)}(h :doc:`usage`h]j)}(hj h]husage}(hjhhhNhNubah}(h]h ](j stdstd-doceh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypedoc refexplicitrefwarnjusageuh1hhhhKhjubh) 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]max-nr-regionsah ]h"]max_nr_regionsah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hmonitor_region_starth]hmonitor_region_start}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj=hhhhhKubh)}(h*目标内存区域的物理地址起点。h]h*目标内存区域的物理地址起点。}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubh)}(hDAMON_RECLAIM将对其进行工作的内存区域的起始物理地址。也就是说,DAMON_RECLAIM 将在这个区域中找到冷的内存区域并进行回收。默认情况下,该区域使用最大系统内存区。h]hDAMON_RECLAIM将对其进行工作的内存区域的起始物理地址。也就是说,DAMON_RECLAIM 将在这个区域中找到冷的内存区域并进行回收。默认情况下,该区域使用最大系统内存区。}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubeh}(h]monitor-region-startah ]h"]monitor_region_startah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hmonitor_region_endh]hmonitor_region_end}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjrhhhhhKubh)}(h*目标内存区域的结束物理地址。h]h*目标内存区域的结束物理地址。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubh)}(hDAMON_RECLAIM将对其进行工作的内存区域的末端物理地址。也就是说,DAMON_RECLAIM将 在这个区域内找到冷的内存区域并进行回收。默认情况下,该区域使用最大系统内存区。h]hDAMON_RECLAIM将对其进行工作的内存区域的末端物理地址。也就是说,DAMON_RECLAIM将 在这个区域内找到冷的内存区域并进行回收。默认情况下,该区域使用最大系统内存区。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubeh}(h]monitor-region-endah ]h"]monitor_region_endah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(h kdamond_pidh]h kdamond_pid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(hDAMON线程的PID。h]hDAMON线程的PID。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hQ如果DAMON_RECLAIM被启用,这将成为工作线程的PID。否则,为-1。h]hQ如果DAMON_RECLAIM被启用,这将成为工作线程的PID。否则,为-1。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] kdamond-pidah ]h"] kdamond_pidah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hnr_reclaim_tried_regionsh]hnr_reclaim_tried_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(h:试图通过DAMON_RECLAIM回收的内存区域的数量。h]h:试图通过DAMON_RECLAIM回收的内存区域的数量。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]nr-reclaim-tried-regionsah ]h"]nr_reclaim_tried_regionsah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hbytes_reclaim_tried_regionsh]hbytes_reclaim_tried_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(h@试图通过DAMON_RECLAIM回收的内存区域的总字节数。h]h@试图通过DAMON_RECLAIM回收的内存区域的总字节数。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]bytes-reclaim-tried-regionsah ]h"]bytes_reclaim_tried_regionsah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hnr_reclaimed_regionsh]hnr_reclaimed_regions}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hj*hhhhhKubh)}(h:通过DAMON_RECLAIM成功回收的内存区域的数量。h]h:通过DAMON_RECLAIM成功回收的内存区域的数量。}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj*hhubeh}(h]nr-reclaimed-regionsah ]h"]nr_reclaimed_regionsah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hbytes_reclaimed_regionsh]hbytes_reclaimed_regions}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjQhhhhhKubh)}(h@通过DAMON_RECLAIM成功回收的内存区域的总字节数。h]h@通过DAMON_RECLAIM成功回收的内存区域的总字节数。}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjQhhubeh}(h]bytes-reclaimed-regionsah ]h"]bytes_reclaimed_regionsah$]h&]uh1jvhj7hhhhhKubjw)}(hhh](j|)}(hnr_quota_exceedsh]hnr_quota_exceeds}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjxhhhhhKubh)}(h+超过时间/空间配额限制的次数。h]h+超过时间/空间配额限制的次数。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjxhhubeh}(h]nr-quota-exceedsah ]h"]nr_quota_exceedsah$]h&]uh1jvhj7hhhhhKubeh}(h]id6ah ]h"]接口: 模块参数ah$]h&]uh1jvhjxhhhhhK)ubjw)}(hhh](j|)}(h例子h]h例子}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j{hjhhhhhKubh)}(hX*下面的运行示例命令使DAMON_RECLAIM找到30秒或更长时间没有访问的内存区域并“回收”? 为了避免DAMON_RECLAIM在分页操作中消耗过多的CPU时间,回收被限制在每秒1GiB以内。 它还要求DAMON_RECLAIM在系统的可用内存率超过50%时不做任何事情,但如果它低于40%时 就开始真正的工作。如果DAMON_RECLAIM没有取得进展,因此空闲内存率低于20%,它会要求 DAMON_RECLAIM再次什么都不做,这样我们就可以退回到基于LRU列表的页面粒度回收了::h]hX)下面的运行示例命令使DAMON_RECLAIM找到30秒或更长时间没有访问的内存区域并“回收”? 为了避免DAMON_RECLAIM在分页操作中消耗过多的CPU时间,回收被限制在每秒1GiB以内。 它还要求DAMON_RECLAIM在系统的可用内存率超过50%时不做任何事情,但如果它低于40%时 就开始真正的工作。如果DAMON_RECLAIM没有取得进展,因此空闲内存率低于20%,它会要求 DAMON_RECLAIM再次什么都不做,这样我们就可以退回到基于LRU列表的页面粒度回收了:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh literal_block)}(h# cd /sys/module/damon_reclaim/parameters # echo 30000000 > min_age # echo $((1 * 1024 * 1024 * 1024)) > quota_sz # echo 1000 > quota_reset_interval_ms # echo 500 > wmarks_high # echo 400 > wmarks_mid # echo 200 > wmarks_low # echo Y > enabledh]h# cd /sys/module/damon_reclaim/parameters # echo 30000000 > min_age # echo $((1 * 1024 * 1024 * 1024)) > quota_sz # echo 1000 > quota_reset_interval_ms # echo 500 > wmarks_high # echo 400 > wmarks_mid # echo 200 > wmarks_low # echo Y > enabled}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubhfootnote)}(h&https://research.google/pubs/pub48551/h](hlabel)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjh]j))}(hjh]h&https://research.google/pubs/pub48551/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j(hjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]jah ]h"]1ah$]h&]jajjuh1jhhhKhjhhjKubj)}(h https://lwn.net/Articles/787611/h](j)}(h2h]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(hj h]j))}(hj h]h https://lwn.net/Articles/787611/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurij uh1j(hjubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubeh}(h]jah ]h"]2ah$]h&]jajjuh1jhhhKhjhhjKubj)}(hBhttps://www.kernel.org/doc/html/latest/mm/free_page_reporting.htmlh](j)}(h3h]h3}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh)}(hj<h]j))}(hj<h]hBhttps://www.kernel.org/doc/html/latest/mm/free_page_reporting.html}(hjOhhhNhNubah}(h]h ]h"]h$]h&]refurij<uh1j(hjLubah}(h]h ]h"]h$]h&]uh1hhhhKhj:ubeh}(h]jah ]h"]3ah$]h&]jajjuh1jhhhKhjhhjKubeh}(h]id7ah ]h"]例子ah$]h&]uh1jvhjxhhhhhKubeh}(h]damonah ]h"]基于damon的回收ah$]h&]uh1jvhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j{N 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_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _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}(1]ja2]ja3]jaurefids}nameids}(jwjtj j j4j1jjjjjCj@jjjjj j j3j0jhjejjjjj/j,jjjjj:j7jojljjjjjjj'j$jNjKjujrjjjojljjj7jjgju nametypes}(jwj j4jjjCjjj j3jhjjj/jjj:jojjjj'jNjujjojj7jguh}(jtjxj jjjjjjjj1jjj7jjj@jjjFjjj jj0jjej6jjkjjj,jjj2jjj7jjlj=jjrjjjjj$jjKj*jrjQjjxjljjjjj jj:u footnote_refs}(j]jaj]jaj]jau citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes](jj j:e citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jK sRparse_messages]transform_messages] transformerN include_log]ADocumentation/translations/zh_CN/admin-guide/mm/damon/reclaim.rst(NNNNta decorationNhhub.