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/usagemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/zh_TW/admin-guide/mm/damon/usagemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/it_IT/admin-guide/mm/damon/usagemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ja_JP/admin-guide/mm/damon/usagemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ko_KR/admin-guide/mm/damon/usagemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/pt_BR/admin-guide/mm/damon/usagemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/sp_SP/admin-guide/mm/damon/usagemodnameN 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/usage.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/usage.rst h]h)}(h,Documentation/admin-guide/mm/damon/usage.rsth]h,Documentation/admin-guide/mm/damon/usage.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubj)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hj4hhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j<hj4ubh>}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj0ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h 详细用法h]h 详细用法}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h6DAMON 为不同的用户提供了下面这些接口。h]h6DAMON 为不同的用户提供了下面这些接口。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh bullet_list)}(hhh](h list_item)}(hX*DAMON用户空间工具。* `这 `_ 为有这特权的人, 如系统管理员,希望有一个刚好 可以工作的人性化界面。 使用它,用户可以以人性化的方式使用DAMON的主要功能。不过,它可能不会为特殊情况进行高度调整。 它同时支持虚拟和物理地址空间的监测。更多细节,请参考它的 `使用文档 `_。h]h)}(hX*DAMON用户空间工具。* `这 `_ 为有这特权的人, 如系统管理员,希望有一个刚好 可以工作的人性化界面。 使用它,用户可以以人性化的方式使用DAMON的主要功能。不过,它可能不会为特殊情况进行高度调整。 它同时支持虚拟和物理地址空间的监测。更多细节,请参考它的 `使用文档 `_。h](hemphasis)}(h*DAMON用户空间工具。*h]hDAMON用户空间工具。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubj=)}(h*`这 `_h]h这}(hjhhhNhNubah}(h]h ]h"]h$]h&]name这refuri!https://github.com/damonitor/damouh1j<hjubhtarget)}(h$ h]h}(h]id2ah ]h"]这ah$]h&]refurijuh1j referencedKhjubhXC 为有这特权的人, 如系统管理员,希望有一个刚好 可以工作的人性化界面。 使用它,用户可以以人性化的方式使用DAMON的主要功能。不过,它可能不会为特殊情况进行高度调整。 它同时支持虚拟和物理地址空间的监测。更多细节,请参考它的 }(hjhhhNhNubj=)}(hF`使用文档 `_h]h 使用文档}(hjhhhNhNubah}(h]h ]h"]h$]h&]name 使用文档j4https://github.com/damonitor/damo/blob/next/USAGE.mduh1j<hjubj)}(h7 h]h}(h]id3ah ]h"] 使用文档ah$]h&]refurijuh1jjKhjubh。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hX*sysfs接口。* :ref:`这 ` 是为那些希望更高级的使用DAMON的特权用户空间程序员准备的。 使用它,用户可以通过读取和写入特殊的sysfs文件来使用DAMON的主要功能。因此,你可以编写和使 用你个性化的DAMON sysfs包装程序,代替你读/写sysfs文件。 `DAMON用户空间工具 `_ 就是这种程序的一个例子 它同时支持虚拟和物理地址 空间的监测。h]h)}(hX*sysfs接口。* :ref:`这 ` 是为那些希望更高级的使用DAMON的特权用户空间程序员准备的。 使用它,用户可以通过读取和写入特殊的sysfs文件来使用DAMON的主要功能。因此,你可以编写和使 用你个性化的DAMON sysfs包装程序,代替你读/写sysfs文件。 `DAMON用户空间工具 `_ 就是这种程序的一个例子 它同时支持虚拟和物理地址 空间的监测。h](j)}(h*sysfs接口。*h]hsysfs接口。}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh }(hj(hhhNhNubh)}(h:ref:`这 `h]hinline)}(hj@h]h这}(hjDhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jBhj>ubah}(h]h ]h"]h$]h&]refdoc-translations/zh_CN/admin-guide/mm/damon/usage refdomainjOreftyperef refexplicitrefwarn reftargetsysfs_interfaceuh1hhhhKhj(ubhX! 是为那些希望更高级的使用DAMON的特权用户空间程序员准备的。 使用它,用户可以通过读取和写入特殊的sysfs文件来使用DAMON的主要功能。因此,你可以编写和使 用你个性化的DAMON sysfs包装程序,代替你读/写sysfs文件。 }(hj(hhhNhNubj=)}(h>`DAMON用户空间工具 `_h]hDAMON用户空间工具}(hjghhhNhNubah}(h]h ]h"]h$]h&]nameDAMON用户空间工具j!https://github.com/damonitor/damouh1j<hj(ubj)}(h$ h]h}(h]damonah ]h"]damon用户空间工具ah$]h&]refurijwuh1jjKhj(ubh[ 就是这种程序的一个例子 它同时支持虚拟和物理地址 空间的监测。}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj$ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hXS*内核空间编程接口。* :doc:`这 ` 这是为内核空间程序员准备的。使用它,用户可以通过为你编写内 核空间的DAMON应用程序,最灵活有效地利用DAMON的每一个功能。你甚至可以为各种地址空间扩展DAMON。 详细情况请参考接口 :doc:`文件 `。 h]h)}(hXR*内核空间编程接口。* :doc:`这 ` 这是为内核空间程序员准备的。使用它,用户可以通过为你编写内 核空间的DAMON应用程序,最灵活有效地利用DAMON的每一个功能。你甚至可以为各种地址空间扩展DAMON。 详细情况请参考接口 :doc:`文件 `。h](j)}(h*内核空间编程接口。*h]h内核空间编程接口。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubh)}(h:doc:`这 `h]jC)}(hjh]h这}(hjhhhNhNubah}(h]h ](jNstdstd-doceh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj[ refdomainjreftypedoc refexplicitrefwarnja /mm/damon/apiuh1hhhhKhjubh 这是为内核空间程序员准备的。使用它,用户可以通过为你编写内 核空间的DAMON应用程序,最灵活有效地利用DAMON的每一个功能。你甚至可以为各种地址空间扩展DAMON。 详细情况请参考接口 }(hjhhhNhNubh)}(h:doc:`文件 `h]jC)}(hjh]h文件}(hjhhhNhNubah}(h]h ](jNstdstd-doceh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj[ refdomainjreftypedoc refexplicitrefwarnja /mm/damon/apiuh1hhhhKhjubh。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjhhubj)}(hhh](j)}(h sysfs接口h]h sysfs接口}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhK$ubh)}(hDAMON的sysfs接口是在定义 ``CONFIG_DAMON_SYSFS`` 时建立的。它在其sysfs目录下创建多 个目录和文件, ``/kernel/mm/damon/`` 。你可以通过对该目录下的文件进行写入和 读取来控制DAMON。h](h DAMON的sysfs接口是在定义 }(hjhhhNhNubhliteral)}(h``CONFIG_DAMON_SYSFS``h]hCONFIG_DAMON_SYSFS}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhG 时建立的。它在其sysfs目录下创建多 个目录和文件, }(hjhhhNhNubj%)}(h``/kernel/mm/damon/``h]h/kernel/mm/damon/}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhR 。你可以通过对该目录下的文件进行写入和 读取来控制DAMON。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK%hj hhubh)}(hn对于一个简短的例子,用户可以监测一个给定工作负载的虚拟地址空间,如下所示::h]hm对于一个简短的例子,用户可以监测一个给定工作负载的虚拟地址空间,如下所示:}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hj hhubh literal_block)}(hX5# cd /sys/kernel/mm/damon/admin/ # echo 1 > kdamonds/nr_kdamonds && echo 1 > kdamonds/0/contexts/nr_contexts # echo vaddr > kdamonds/0/contexts/0/operations # echo 1 > kdamonds/0/contexts/0/targets/nr_targets # echo $(pidof ) > kdamonds/0/contexts/0/targets/0/pid_target # echo on > kdamonds/0/stateh]hX5# cd /sys/kernel/mm/damon/admin/ # echo 1 > kdamonds/nr_kdamonds && echo 1 > kdamonds/0/contexts/nr_contexts # echo vaddr > kdamonds/0/contexts/0/operations # echo 1 > kdamonds/0/contexts/0/targets/nr_targets # echo $(pidof ) > kdamonds/0/contexts/0/targets/0/pid_target # echo on > kdamonds/0/state}hj`sbah}(h]h ]h"]h$]h&]hhuh1j^hhhK+hj hhubj)}(hhh](j)}(h文件层次结构h]h文件层次结构}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnhhhhhK3ubh)}(hDAMON sysfs接口的文件层次结构如下图所示。在下图中,父子关系用缩进表示,每个目录有 ``/`` 后缀,每个目录中的文件用逗号(",")分开。 ::h](huDAMON sysfs接口的文件层次结构如下图所示。在下图中,父子关系用缩进表示,每个目录有 }(hjhhhNhNubj%)}(h``/``h]h/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhA 后缀,每个目录中的文件用逗号(”,”)分开。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hjnhhubj_)}(hX/sys/kernel/mm/damon/admin │ kdamonds/nr_kdamonds │ │ 0/state,pid │ │ │ contexts/nr_contexts │ │ │ │ 0/operations │ │ │ │ │ monitoring_attrs/ │ │ │ │ │ │ intervals/sample_us,aggr_us,update_us │ │ │ │ │ │ nr_regions/min,max │ │ │ │ │ targets/nr_targets │ │ │ │ │ │ 0/pid_target │ │ │ │ │ │ │ regions/nr_regions │ │ │ │ │ │ │ │ 0/start,end │ │ │ │ │ │ │ │ ... │ │ │ │ │ │ ... │ │ │ │ │ schemes/nr_schemes │ │ │ │ │ │ 0/action │ │ │ │ │ │ │ access_pattern/ │ │ │ │ │ │ │ │ sz/min,max │ │ │ │ │ │ │ │ nr_accesses/min,max │ │ │ │ │ │ │ │ age/min,max │ │ │ │ │ │ │ quotas/ms,bytes,reset_interval_ms │ │ │ │ │ │ │ │ weights/sz_permil,nr_accesses_permil,age_permil │ │ │ │ │ │ │ watermarks/metric,interval_us,high,mid,low │ │ │ │ │ │ │ stats/nr_tried,sz_tried,nr_applied,sz_applied,qt_exceeds │ │ │ │ │ │ │ tried_regions/ │ │ │ │ │ │ │ │ 0/start,end,nr_accesses,age │ │ │ │ │ │ │ │ ... │ │ │ │ │ │ ... │ │ │ │ ... │ │ ...h]hX/sys/kernel/mm/damon/admin │ kdamonds/nr_kdamonds │ │ 0/state,pid │ │ │ contexts/nr_contexts │ │ │ │ 0/operations │ │ │ │ │ monitoring_attrs/ │ │ │ │ │ │ intervals/sample_us,aggr_us,update_us │ │ │ │ │ │ nr_regions/min,max │ │ │ │ │ targets/nr_targets │ │ │ │ │ │ 0/pid_target │ │ │ │ │ │ │ regions/nr_regions │ │ │ │ │ │ │ │ 0/start,end │ │ │ │ │ │ │ │ ... │ │ │ │ │ │ ... │ │ │ │ │ schemes/nr_schemes │ │ │ │ │ │ 0/action │ │ │ │ │ │ │ access_pattern/ │ │ │ │ │ │ │ │ sz/min,max │ │ │ │ │ │ │ │ nr_accesses/min,max │ │ │ │ │ │ │ │ age/min,max │ │ │ │ │ │ │ quotas/ms,bytes,reset_interval_ms │ │ │ │ │ │ │ │ weights/sz_permil,nr_accesses_permil,age_permil │ │ │ │ │ │ │ watermarks/metric,interval_us,high,mid,low │ │ │ │ │ │ │ stats/nr_tried,sz_tried,nr_applied,sz_applied,qt_exceeds │ │ │ │ │ │ │ tried_regions/ │ │ │ │ │ │ │ │ 0/start,end,nr_accesses,age │ │ │ │ │ │ │ │ ... │ │ │ │ │ │ ... │ │ │ │ ... │ │ ...}hjsbah}(h]h ]h"]h$]h&]hhuh1j^hhhK8hjnhhubeh}(h]id4ah ]h"]文件层次结构ah$]h&]uh1jhj hhhhhK3ubj)}(hhh](j)}(h根h]h根}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKXubh)}(hDAMON sysfs接口的根是 ``/kernel/mm/damon/`` ,它有一个名为 ``admin`` 的 目录。该目录包含特权用户空间程序控制DAMON的文件。拥有根权限的用户空间工具或deamons可以 使用这个目录。h](hDAMON sysfs接口的根是 }(hjhhhNhNubj%)}(h``/kernel/mm/damon/``h]h/kernel/mm/damon/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh ,它有一个名为 }(hjhhhNhNubj%)}(h ``admin``h]hadmin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 的 目录。该目录包含特权用户空间程序控制DAMON的文件。拥有根权限的用户空间工具或deamons可以 使用这个目录。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKZhjhhubeh}(h]id5ah ]h"]根ah$]h&]uh1jhj hhhhhKXubj)}(hhh](j)}(h kdamonds/h]h kdamonds/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK_ubh)}(h与监测相关的信息包括请求规格和结果被称为DAMON上下文。DAMON用一个叫做kdamond的内核线程 执行每个上下文,多个kdamonds可以并行运行。h]h与监测相关的信息包括请求规格和结果被称为DAMON上下文。DAMON用一个叫做kdamond的内核线程 执行每个上下文,多个kdamonds可以并行运行。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjhhubh)}(hX/在 ``admin`` 目录下,有一个目录,即``kdamonds``,它有控制kdamonds的文件存在。在开始 时,这个目录只有一个文件,``nr_kdamonds``。向该文件写入一个数字(``N``),就会创建名为 ``0`` 到 ``N-1`` 的子目录数量。每个目录代表每个kdamond。h](h在 }(hjhhhNhNubj%)}(h ``admin``h]hadmin}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 目录下,有一个目录,即``kdamonds``,它有控制kdamonds的文件存在。在开始 时,这个目录只有一个文件,}(hjhhhNhNubj%)}(h``nr_kdamonds``h]h nr_kdamonds}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh$。向该文件写入一个数字(}(hjhhhNhNubj%)}(h``N``h]hN}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh),就会创建名为 }(hjhhhNhNubj%)}(h``0``h]h0}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 到 }(hjhhhNhNubj%)}(h``N-1``h]hN-1}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh8 的子目录数量。每个目录代表每个kdamond。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKdhjhhubeh}(h]kdamondsah ]h"] kdamonds/ah$]h&]uh1jhj hhhhhK_ubj)}(hhh](j)}(h kdamonds//h]h kdamonds//}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKiubh)}(hl在每个kdamond目录中,存在两个文件(``state`` 和 ``pid`` )和一个目录( ``contexts`` )。h](h1在每个kdamond目录中,存在两个文件(}(hjhhhNhNubj%)}(h ``state``h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 和 }(hjhhhNhNubj%)}(h``pid``h]hpid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh )和一个目录( }(hjhhhNhNubj%)}(h ``contexts``h]hcontexts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh )。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKkhjhhubh)}(hX8读取 ``state`` 时,如果kdamond当前正在运行,则返回 ``on`` ,如果没有运行则返回 ``off`` 。 写入 ``on`` 或 ``off`` 使kdamond处于状态。向 ``state`` 文件写 ``update_schemes_stats`` , 更新kdamond的每个基于DAMON的操作方案的统计文件的内容。关于统计信息的细节,请参考 :ref:`stats section `. 将 ``update_schemes_tried_regions`` 写到 ``state`` 文件,为kdamond的每个基于DAMON的操作方案,更新基于DAMON的操作方案动作的尝试区域目录。 将`clear_schemes_tried_regions`写入`state`文件,清除kdamond的每个基于DAMON的操作方案的动作 尝试区域目录。 关于基于DAMON的操作方案动作尝试区域目录的细节,请参考:ref:tried_regions 部分 `。h](h读取 }(hjhhhNhNubj%)}(h ``state``h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh3 时,如果kdamond当前正在运行,则返回 }(hjhhhNhNubj%)}(h``on``h]hon}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh ,如果没有运行则返回 }(hjhhhNhNubj%)}(h``off``h]hoff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 。 写入 }(hjhhhNhNubj%)}(h``on``h]hon}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 或 }(hjhhhNhNubj%)}(h``off``h]hoff}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 使kdamond处于状态。向 }(hjhhhNhNubj%)}(h ``state``h]hstate}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 文件写 }(hjhhhNhNubj%)}(h``update_schemes_stats``h]hupdate_schemes_stats}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhx , 更新kdamond的每个基于DAMON的操作方案的统计文件的内容。关于统计信息的细节,请参考 }(hjhhhNhNubh)}(h*:ref:`stats section `h]jC)}(hjlh]h stats section}(hjnhhhNhNubah}(h]h ](jNstdstd-refeh"]h$]h&]uh1jBhjjubah}(h]h ]h"]h$]h&]refdocj[ refdomainjxreftyperef refexplicitrefwarnjasysfs_schemes_statsuh1hhhhKmhjubh. 将 }(hjhhhNhNubj%)}(h ``update_schemes_tried_regions``h]hupdate_schemes_tried_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 写到 }(hjhhhNhNubj%)}(h ``state``h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhX 文件,为kdamond的每个基于DAMON的操作方案,更新基于DAMON的操作方案动作的尝试区域目录。 将`clear_schemes_tried_regions`写入`state`文件,清除kdamond的每个基于DAMON的操作方案的动作 尝试区域目录。 关于基于DAMON的操作方案动作尝试区域目录的细节,请参考:ref:tried_regions 部分 `。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKmhjhhubh)}(hD如果状态为 ``on``,读取 ``pid`` 显示kdamond线程的pid。h](h如果状态为 }(hjhhhNhNubj%)}(h``on``h]hon}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh ,读取 }(hjhhhNhNubj%)}(h``pid``h]hpid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 显示kdamond线程的pid。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKvhjhhubh)}(hS``contexts`` 目录包含控制这个kdamond要执行的监测上下文的文件。h](j%)}(h ``contexts``h]hcontexts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhG 目录包含控制这个kdamond要执行的监测上下文的文件。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhjhhubeh}(h] kdamonds-nah ]h"] kdamonds//ah$]h&]uh1jhj hhhhhKiubj)}(hhh](j)}(hkdamonds//contexts/h]hkdamonds//contexts/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK{ubh)}(hX9在开始时,这个目录只有一个文件,即 ``nr_contexts`` 。向该文件写入一个数字( ``N`` ),就会创 建名为``0`` 到 ``N-1`` 的子目录数量。每个目录代表每个监测背景。目前,每个kdamond只支持 一个上下文,所以只有 ``0`` 或 ``1`` 可以被写入文件。h](h4在开始时,这个目录只有一个文件,即 }(hjhhhNhNubj%)}(h``nr_contexts``h]h nr_contexts}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh$ 。向该文件写入一个数字( }(hjhhhNhNubj%)}(h``N``h]hN}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh" ),就会创 建名为``0`` 到 }(hjhhhNhNubj%)}(h``N-1``h]hN-1}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh| 的子目录数量。每个目录代表每个监测背景。目前,每个kdamond只支持 一个上下文,所以只有 }(hjhhhNhNubj%)}(h``0``h]h0}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 或 }(hjhhhNhNubj%)}(h``1``h]h1}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 可以被写入文件。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK}hjhhubeh}(h]kdamonds-n-contextsah ]h"]kdamonds//contexts/ah$]h&]uh1jhj hhhhhK{ubj)}(hhh](j)}(h contexts//h]h contexts//}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h在每个上下文目录中,存在一个文件(``operations``)和三个目录(``monitoring_attrs``, ``targets``, 和 ``schemes``)。h](h1在每个上下文目录中,存在一个文件(}(hjhhhNhNubj%)}(h``operations``h]h operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh)和三个目录(}(hjhhhNhNubj%)}(h``monitoring_attrs``h]hmonitoring_attrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h ``targets``h]htargets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, 和 }(hjhhhNhNubj%)}(h ``schemes``h]hschemes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXDAMON支持多种类型的监测操作,包括对虚拟地址空间和物理地址空间的监测。你可以通过向文件 中写入以下关键词之一,并从文件中读取,来设置和获取DAMON将为上下文使用何种类型的监测操作。h]hXDAMON支持多种类型的监测操作,包括对虚拟地址空间和物理地址空间的监测。你可以通过向文件 中写入以下关键词之一,并从文件中读取,来设置和获取DAMON将为上下文使用何种类型的监测操作。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh block_quote)}(h\- vaddr: 监测特定进程的虚拟地址空间 - paddr: 监视系统的物理地址空间 h]j)}(hhh](j)}(h.vaddr: 监测特定进程的虚拟地址空间h]h)}(hjh]h.vaddr: 监测特定进程的虚拟地址空间}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h)paddr: 监视系统的物理地址空间 h]h)}(h(paddr: 监视系统的物理地址空间h]h(paddr: 监视系统的物理地址空间}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj$ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]j j uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h] contexts-nah ]h"] contexts//ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hcontexts//monitoring_attrs/h]hcontexts//monitoring_attrs/}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPhhhhhKubh)}(h用于指定监测属性的文件,包括所需的监测质量和效率,都在 ``monitoring_attrs`` 目录中。 具体来说,这个目录下有两个目录,即 ``intervals`` 和 ``nr_regions`` 。h](hR用于指定监测属性的文件,包括所需的监测质量和效率,都在 }(hjahhhNhNubj%)}(h``monitoring_attrs``h]hmonitoring_attrs}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubhB 目录中。 具体来说,这个目录下有两个目录,即 }(hjahhhNhNubj%)}(h ``intervals``h]h intervals}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh 和 }(hjahhhNhNubj%)}(h``nr_regions``h]h nr_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh 。}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjPhhubh)}(h在 ``intervals`` 目录下,存在DAMON的采样间隔(``sample_us``)、聚集间隔(``aggr_us``) 和更新间隔(``update_us``)三个文件。你可以通过写入和读出这些文件来设置和获取微秒级的值。h](h在 }(hjhhhNhNubj%)}(h ``intervals``h]h intervals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh( 目录下,存在DAMON的采样间隔(}(hjhhhNhNubj%)}(h ``sample_us``h]h sample_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh)、聚集间隔(}(hjhhhNhNubj%)}(h ``aggr_us``h]haggr_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh) 和更新间隔(}(hjhhhNhNubj%)}(h ``update_us``h]h update_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh^)三个文件。你可以通过写入和读出这些文件来设置和获取微秒级的值。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjPhhubh)}(h在 ``nr_regions`` 目录下,有两个文件分别用于DAMON监测区域的下限和上限(``min`` 和 ``max`` ), 这两个文件控制着监测的开销。你可以通过向这些文件的写入和读出来设置和获取这些值。h](h在 }(hjhhhNhNubj%)}(h``nr_regions``h]h nr_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhN 目录下,有两个文件分别用于DAMON监测区域的下限和上限(}(hjhhhNhNubj%)}(h``min``h]hmin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 和 }(hjhhhNhNubj%)}(h``max``h]hmax}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh ), 这两个文件控制着监测的开销。你可以通过向这些文件的写入和读出来设置和获取这些值。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjPhhubh)}(he关于间隔和监测区域范围的更多细节,请参考设计文件 (:doc:`/mm/damon/design`)。h](hJ关于间隔和监测区域范围的更多细节,请参考设计文件 (}(hj?hhhNhNubh)}(h:doc:`/mm/damon/design`h]jC)}(hjIh]h/mm/damon/design}(hjKhhhNhNubah}(h]h ](jNstdstd-doceh"]h$]h&]uh1jBhjGubah}(h]h ]h"]h$]h&]refdocj[ refdomainjUreftypedoc refexplicitrefwarnja/mm/damon/designuh1hhhhKhj?ubh)。}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjPhhubeh}(h]contexts-n-monitoring-attrsah ]h"]contexts//monitoring_attrs/ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hcontexts//targets/h]hcontexts//targets/}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyhhhhhKubh)}(h在开始时,这个目录只有一个文件 ``nr_targets`` 。向该文件写入一个数字(``N``),就可以创建 名为 ``0`` 到 ``N-1`` 的子目录的数量。每个目录代表每个监测目标。h](h.在开始时,这个目录只有一个文件 }(hjhhhNhNubj%)}(h``nr_targets``h]h nr_targets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh# 。向该文件写入一个数字(}(hjhhhNhNubj%)}(h``N``h]hN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh),就可以创建 名为 }(hjhhhNhNubj%)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 到 }(hjhhhNhNubj%)}(h``N-1``h]hN-1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh@ 的子目录的数量。每个目录代表每个监测目标。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjyhhubeh}(h]contexts-n-targetsah ]h"]contexts//targets/ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(h targets//h]h targets//}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h\在每个目标目录中,存在一个文件(``pid_target``)和一个目录(``regions``)。h](h.在每个目标目录中,存在一个文件(}(hjhhhNhNubj%)}(h``pid_target``h]h pid_target}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh)和一个目录(}(hjhhhNhNubj%)}(h ``regions``h]hregions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h如果你把 ``vaddr`` 写到 ``contexts//operations`` 中,每个目标应该是一个进程。你 可以通过将进程的pid写到 ``pid_target`` 文件中来指定DAMON的进程。h](h 如果你把 }(hj+ hhhNhNubj%)}(h ``vaddr``h]hvaddr}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ ubh 写到 }(hj+ hhhNhNubj%)}(h``contexts//operations``h]hcontexts//operations}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ ubhQ 中,每个目标应该是一个进程。你 可以通过将进程的pid写到 }(hj+ hhhNhNubj%)}(h``pid_target``h]h pid_target}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj+ ubh$ 文件中来指定DAMON的进程。}(hj+ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] targets-nah ]h"] targets//ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(htargets//regionsh]htargets//regions}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw hhhhhKubh)}(hX!当使用 ``vaddr`` 监测操作集时( ``vaddr`` 被写入 ``contexts//operations`` 文 件),DAMON自动设置和更新监测目标区域,这样就可以覆盖目标进程的整个内存映射。然而,用户可 能希望将初始监测区域设置为特定的地址范围。h](h 当使用 }(hj hhhNhNubj%)}(h ``vaddr``h]hvaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 监测操作集时( }(hj hhhNhNubj%)}(h ``vaddr``h]hvaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 被写入 }(hj hhhNhNubj%)}(h``contexts//operations``h]hcontexts//operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 文 件),DAMON自动设置和更新监测目标区域,这样就可以覆盖目标进程的整个内存映射。然而,用户可 能希望将初始监测区域设置为特定的地址范围。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjw hhubh)}(h相反,当使用 ``paddr`` 监测操作集时,DAMON不会自动设置和更新监测目标区域( ``paddr`` 被写入 ``contexts//operations`` 中)。因此,在这种情况下,用户应该自己设置监测目标 区域。h](h相反,当使用 }(hj hhhNhNubj%)}(h ``paddr``h]hpaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhL 监测操作集时,DAMON不会自动设置和更新监测目标区域( }(hj hhhNhNubj%)}(h ``paddr``h]hpaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 被写入 }(hj hhhNhNubj%)}(h``contexts//operations``h]hcontexts//operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhV 中)。因此,在这种情况下,用户应该自己设置监测目标 区域。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjw hhubh)}(h在这种情况下,用户可以按照自己的意愿明确设置初始监测目标区域,将适当的值写入该目录下的文件。h]h在这种情况下,用户可以按照自己的意愿明确设置初始监测目标区域,将适当的值写入该目录下的文件。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjw hhubh)}(h开始时,这个目录只有一个文件, ``nr_regions`` 。向该文件写入一个数字(``N``),就可以创 建名为 ``0`` 到 ``N-1`` 的子目录。每个目录代表每个初始监测目标区域。h](h.开始时,这个目录只有一个文件, }(hj hhhNhNubj%)}(h``nr_regions``h]h nr_regions}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh# 。向该文件写入一个数字(}(hj hhhNhNubj%)}(h``N``h]hN}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh),就可以创 建名为 }(hj hhhNhNubj%)}(h``0``h]h0}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 到 }(hj hhhNhNubj%)}(h``N-1``h]hN-1}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhC 的子目录。每个目录代表每个初始监测目标区域。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjw hhubeh}(h]targets-n-regionsah ]h"]targets//regionsah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(h regions//h]h regions//}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj| hhhhhKubh)}(h在每个区域目录中,你会发现两个文件( ``start`` 和 ``end`` )。你可以通过向文件写入 和从文件中读出,分别设置和获得初始监测目标区域的起始和结束地址。h](h7在每个区域目录中,你会发现两个文件( }(hj hhhNhNubj%)}(h ``start``h]hstart}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 和 }(hj hhhNhNubj%)}(h``end``h]hend}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh )。你可以通过向文件写入 和从文件中读出,分别设置和获得初始监测目标区域的起始和结束地址。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj| hhubh)}(h}每个区域不应该与其他区域重叠。 目录“N”的“结束”应等于或小于目录“N+1”的“开始”。h]h}每个区域不应该与其他区域重叠。 目录“N”的“结束”应等于或小于目录“N+1”的“开始”。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj| hhubeh}(h] regions-nah ]h"] regions//ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hcontexts//schemes/h]hcontexts//schemes/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(hXe对于一版的基于DAMON的数据访问感知的内存管理优化,用户通常希望系统对特定访问模式的内存区 域应用内存管理操作。DAMON从用户那里接收这种形式化的操作方案,并将这些方案应用于目标内存 区域。用户可以通过读取和写入这个目录下的文件来获得和设置这些方案。h]hXe对于一版的基于DAMON的数据访问感知的内存管理优化,用户通常希望系统对特定访问模式的内存区 域应用内存管理操作。DAMON从用户那里接收这种形式化的操作方案,并将这些方案应用于目标内存 区域。用户可以通过读取和写入这个目录下的文件来获得和设置这些方案。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h在开始时,这个目录只有一个文件,``nr_schemes``。向该文件写入一个数字(``N``),就可以 创建名为``0``到``N-1``的子目录的数量。每个目录代表每个基于DAMON的操作方案。h](h0在开始时,这个目录只有一个文件,}(hj hhhNhNubj%)}(h``nr_schemes``h]h nr_schemes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh"。向该文件写入一个数字(}(hj hhhNhNubj%)}(h``N``h]hN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhv),就可以 创建名为``0``到``N-1``的子目录的数量。每个目录代表每个基于DAMON的操作方案。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]contexts-n-schemesah ]h"]contexts//schemes/ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(h schemes//h]h schemes//}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. hhhhhKubh)}(h在每个方案目录中,存在五个目录(``access_pattern``、``quotas``、``watermarks``、 ``stats`` 和 ``tried_regions``)和一个文件(``action``)。h](h.在每个方案目录中,存在五个目录(}(hj? hhhNhNubj%)}(h``access_pattern``h]haccess_pattern}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj? ubh、}(hj? hhhNhNubj%)}(h ``quotas``h]hquotas}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj? ubh、}hj? sbj%)}(h``watermarks``h]h watermarks}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj? ubh、 }(hj? hhhNhNubj%)}(h ``stats``h]hstats}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj? ubh 和 }(hj? hhhNhNubj%)}(h``tried_regions``h]h tried_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj? ubh)和一个文件(}(hj? hhhNhNubj%)}(h ``action``h]haction}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj? ubh)。}(hj? hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj. hhubh)}(h``action`` 文件用于设置和获取你想应用于具有特定访问模式的内存区域的动作。可以写入文件 和从文件中读取的关键词及其含义如下。h](j%)}(h ``action``h]haction}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 文件用于设置和获取你想应用于具有特定访问模式的内存区域的动作。可以写入文件 和从文件中读取的关键词及其含义如下。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj. hhubj)}(hX4- ``willneed``: 对有 ``MADV_WILLNEED`` 的区域调用 ``madvise()`` 。 - ``cold``: 对具有 ``MADV_COLD`` 的区域调用 ``madvise()`` 。 - ``pageout``: 为具有 ``MADV_PAGEOUT`` 的区域调用 ``madvise()`` 。 - ``hugepage``: 为带有 ``MADV_HUGEPAGE`` 的区域调用 ``madvise()`` 。 - ``nohugepage``: 为带有 ``MADV_NOHUGEPAGE`` 的区域调用 ``madvise()``。 - ``lru_prio``: 在其LRU列表上对区域进行优先排序。 - ``lru_deprio``: 对区域的LRU列表进行降低优先处理。 - ``stat``: 什么都不做,只计算统计数据 h]j)}(hhh](j)}(hH``willneed``: 对有 ``MADV_WILLNEED`` 的区域调用 ``madvise()`` 。h]h)}(hj h](j%)}(h ``willneed``h]hwillneed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh : 对有 }(hj hhhNhNubj%)}(h``MADV_WILLNEED``h]h MADV_WILLNEED}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 的区域调用 }(hj hhhNhNubj%)}(h ``madvise()``h]h madvise()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hC``cold``: 对具有 ``MADV_COLD`` 的区域调用 ``madvise()`` 。h]h)}(hj' h](j%)}(h``cold``h]hcold}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj) ubh : 对具有 }(hj) hhhNhNubj%)}(h ``MADV_COLD``h]h MADV_COLD}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj) ubh 的区域调用 }(hj) hhhNhNubj%)}(h ``madvise()``h]h madvise()}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj) ubh 。}(hj) hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj% ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hI``pageout``: 为具有 ``MADV_PAGEOUT`` 的区域调用 ``madvise()`` 。h]h)}(hjp h](j%)}(h ``pageout``h]hpageout}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjr ubh : 为具有 }(hjr hhhNhNubj%)}(h``MADV_PAGEOUT``h]h MADV_PAGEOUT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjr ubh 的区域调用 }(hjr hhhNhNubj%)}(h ``madvise()``h]h madvise()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjr ubh 。}(hjr hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjn ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hK``hugepage``: 为带有 ``MADV_HUGEPAGE`` 的区域调用 ``madvise()`` 。h]h)}(hj h](j%)}(h ``hugepage``h]hhugepage}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh : 为带有 }(hj hhhNhNubj%)}(h``MADV_HUGEPAGE``h]h MADV_HUGEPAGE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 的区域调用 }(hj hhhNhNubj%)}(h ``madvise()``h]h madvise()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hN``nohugepage``: 为带有 ``MADV_NOHUGEPAGE`` 的区域调用 ``madvise()``。h]h)}(hj h](j%)}(h``nohugepage``h]h nohugepage}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh : 为带有 }(hj hhhNhNubj%)}(h``MADV_NOHUGEPAGE``h]hMADV_NOHUGEPAGE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 的区域调用 }(hj hhhNhNubj%)}(h ``madvise()``h]h madvise()}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h>``lru_prio``: 在其LRU列表上对区域进行优先排序。h]h)}(hjK h](j%)}(h ``lru_prio``h]hlru_prio}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjM ubh2: 在其LRU列表上对区域进行优先排序。}(hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjI ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h@``lru_deprio``: 对区域的LRU列表进行降低优先处理。h]h)}(hjp h](j%)}(h``lru_deprio``h]h lru_deprio}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjr ubh2: 对区域的LRU列表进行降低优先处理。}(hjr hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjn ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h2``stat``: 什么都不做,只计算统计数据 h]h)}(h1``stat``: 什么都不做,只计算统计数据h](j%)}(h``stat``h]hstat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh): 什么都不做,只计算统计数据}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]j j uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj. hhubeh}(h] schemes-nah ]h"] schemes//ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hschemes//access_pattern/h]hschemes//access_pattern/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(h每个基于DAMON的操作方案的目标访问模式由三个范围构成,包括以字节为单位的区域大小、每个 聚合区间的监测访问次数和区域年龄的聚合区间数。h]h每个基于DAMON的操作方案的目标访问模式由三个范围构成,包括以字节为单位的区域大小、每个 聚合区间的监测访问次数和区域年龄的聚合区间数。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hXC在 ``access_pattern`` 目录下,存在三个目录( ``sz``, ``nr_accesses``, 和 ``age`` ), 每个目录有两个文件(``min`` 和 ``max`` )。你可以通过向 ``sz``, ``nr_accesses``, 和 ``age`` 目录下的 ``min`` 和 ``max`` 文件分别写入和读取来设置和获取给定方案的访问模式。h](h在 }(hj hhhNhNubj%)}(h``access_pattern``h]haccess_pattern}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh# 目录下,存在三个目录( }(hj hhhNhNubj%)}(h``sz``h]hsz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh, }(hj hhhNhNubj%)}(h``nr_accesses``h]h nr_accesses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh, 和 }(hj hhhNhNubj%)}(h``age``h]hage}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh& ), 每个目录有两个文件(}(hj hhhNhNubj%)}(h``min``h]hmin}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 和 }(hj hhhNhNubj%)}(h``max``h]hmax}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh )。你可以通过向 }(hj hhhNhNubj%)}(h``sz``h]hsz}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh, }hj sbj%)}(h``nr_accesses``h]h nr_accesses}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh, 和 }(hj hhhNhNubj%)}(h``age``h]hage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 目录下的 }(hj hhhNhNubj%)}(h``min``h]hmin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubh 和 }hj sbj%)}(h``max``h]hmax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hj ubhL 文件分别写入和读取来设置和获取给定方案的访问模式。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]schemes-n-access-patternah ]h"]schemes//access_pattern/ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hschemes//quotas/h]hschemes//quotas/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hX'每个 ``动作`` 的最佳 ``目标访问模式`` 取决于工作负载,所以不容易找到。更糟糕的是,将某些动作 的方案设置得过于激进会造成严重的开销。为了避免这种开销,用户可以为每个方案限制时间和大小配额。 具体来说,用户可以要求DAMON尽量只使用特定的时间(``时间配额``)来应用动作,并且在给定的时间间 隔(``重置间隔``)内,只对具有目标访问模式的内存区域应用动作,而不使用特定数量(``大小配额``)。h](h每个 }(hjhhhNhNubj%)}(h ``动作``h]h动作}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 的最佳 }(hjhhhNhNubj%)}(h``目标访问模式``h]h目标访问模式}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhX( 取决于工作负载,所以不容易找到。更糟糕的是,将某些动作 的方案设置得过于激进会造成严重的开销。为了避免这种开销,用户可以为每个方案限制时间和大小配额。 具体来说,用户可以要求DAMON尽量只使用特定的时间(}(hjhhhNhNubj%)}(h``时间配额``h]h 时间配额}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh7)来应用动作,并且在给定的时间间 隔(}(hjhhhNhNubj%)}(h``重置间隔``h]h 重置间隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh`)内,只对具有目标访问模式的内存区域应用动作,而不使用特定数量(}(hjhhhNhNubj%)}(h``大小配额``h]h 大小配额}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h当预计超过配额限制时,DAMON会根据 ``目标访问模式`` 的大小、访问频率和年龄,对找到的内存区域 进行优先排序。为了进行个性化的优先排序,用户可以为这三个属性设置权重。h](h0当预计超过配额限制时,DAMON会根据 }(hjAhhhNhNubj%)}(h``目标访问模式``h]h目标访问模式}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjAubh 的大小、访问频率和年龄,对找到的内存区域 进行优先排序。为了进行个性化的优先排序,用户可以为这三个属性设置权重。}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h在 ``quotas`` 目录下,存在三个文件(``ms``, ``bytes``, ``reset_interval_ms``)和一个 目录(``weights``),其中有三个文件(``sz_permil``, ``nr_accesses_permil``, 和 ``age_permil``)。h](h在 }(hjahhhNhNubj%)}(h ``quotas``h]hquotas}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh" 目录下,存在三个文件(}(hjahhhNhNubj%)}(h``ms``h]hms}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh, }(hjahhhNhNubj%)}(h ``bytes``h]hbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh, }hjasbj%)}(h``reset_interval_ms``h]hreset_interval_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh)和一个 目录(}(hjahhhNhNubj%)}(h ``weights``h]hweights}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh),其中有三个文件(}(hjahhhNhNubj%)}(h ``sz_permil``h]h sz_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh, }hjasbj%)}(h``nr_accesses_permil``h]hnr_accesses_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh, 和 }(hjahhhNhNubj%)}(h``age_permil``h]h age_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjaubh)。}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXP你可以设置以毫秒为单位的 ``时间配额`` ,以字节为单位的 ``大小配额`` ,以及以毫秒为单位的 ``重 置间隔`` ,分别向这三个文件写入数值。你还可以通过向 ``weights`` 目录下的三个文件写入数值来设 置大小、访问频率和年龄的优先权,单位为千分之一。h](h%你可以设置以毫秒为单位的 }(hjhhhNhNubj%)}(h``时间配额``h]h 时间配额}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh ,以字节为单位的 }(hjhhhNhNubj%)}(h``大小配额``h]h 大小配额}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh ,以及以毫秒为单位的 }(hjhhhNhNubj%)}(h``重 置间隔``h]h 重 置间隔}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhA ,分别向这三个文件写入数值。你还可以通过向 }(hjhhhNhNubj%)}(h ``weights``h]hweights}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubht 目录下的三个文件写入数值来设 置大小、访问频率和年龄的优先权,单位为千分之一。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]schemes-n-quotasah ]h"]schemes//quotas/ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hschemes//watermarks/h]hschemes//watermarks/}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]hhhhhKubh)}(hX为了便于根据系统状态激活和停用每个方案,DAMON提供了一个称为水位的功能。该功能接收五个值,称为 ``度量`` 、``间隔`` 、``高`` 、``中`` 、``低`` 。``度量值`` 是指可以测量的系统度量值,如 自由内存比率。如果系统的度量值 ``高`` 于memoent的高值或 ``低`` 于低值,则该方案被停用。如果 该值低于 ``中`` ,则该方案被激活。h](h为了便于根据系统状态激活和停用每个方案,DAMON提供了一个称为水位的功能。该功能接收五个值,称为 }(hjnhhhNhNubj%)}(h ``度量``h]h度量}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh 、}(hjnhhhNhNubj%)}(h ``间隔``h]h间隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh 、}hjnsbj%)}(h``高``h]h高}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh 、}hjnsbj%)}(h``中``h]h中}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh 、}hjnsbj%)}(h``低``h]h低}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh 。}(hjnhhhNhNubj%)}(h ``度量值``h]h 度量值}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubhZ 是指可以测量的系统度量值,如 自由内存比率。如果系统的度量值 }(hjnhhhNhNubj%)}(h``高``h]h高}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh 于memoent的高值或 }(hjnhhhNhNubj%)}(h``低``h]h低}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh9 于低值,则该方案被停用。如果 该值低于 }(hjnhhhNhNubj%)}(h``中``h]h中}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh ,则该方案被激活。}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj]hhubh)}(h在水位目录下,存在五个文件(``metric``, ``interval_us``,``high``, ``mid``, and ``low``) 用于设置每个值。你可以通过向这些文件的写入来分别设置和获取这五个值。h](h(在水位目录下,存在五个文件(}(hjhhhNhNubj%)}(h ``metric``h]hmetric}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h``interval_us``h]h interval_us}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh ,``high``, }(hjhhhNhNubj%)}(h``mid``h]hmid}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, and }(hjhhhNhNubj%)}(h``low``h]hlow}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhh) 用于设置每个值。你可以通过向这些文件的写入来分别设置和获取这五个值。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj]hhubh)}(h<可以写入 ``metric`` 文件的关键词和含义如下。h](h 可以写入 }(hjthhhNhNubj%)}(h ``metric``h]hmetric}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjtubh% 文件的关键词和含义如下。}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj]hhubj)}(hQ- none: 忽略水位 - free_mem_rate: 系统的自由内存率(千分比)。 h]j)}(hhh](j)}(hnone: 忽略水位h]h)}(hjh]hnone: 忽略水位}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h:free_mem_rate: 系统的自由内存率(千分比)。 h]h)}(h9free_mem_rate: 系统的自由内存率(千分比)。h]h9free_mem_rate: 系统的自由内存率(千分比)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j j uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhhhMhj]hhubh)}(h+``interval`` 应以微秒为单位写入。h](j%)}(h ``interval``h]hinterval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 应以微秒为单位写入。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hj]hhubeh}(h]schemes-n-watermarksah ]h"]schemes//watermarks/ah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hschemes//stats/h]hschemes//stats/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhM ubh)}(hDAMON统计每个方案被尝试应用的区域的总数量和字节数,每个方案被成功应用的区域的两个数字,以及 超过配额限制的总数量。这些统计数据可用于在线分析或调整方案。h]hDAMON统计每个方案被尝试应用的区域的总数量和字节数,每个方案被成功应用的区域的两个数字,以及 超过配额限制的总数量。这些统计数据可用于在线分析或调整方案。;}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hX可以通过读取 ``stats`` 目录下的文件(``nr_tried``, ``sz_tried``, ``nr_applied``, ``sz_applied``, 和 ``qt_exceeds``))分别检索这些统计数据。这些文件不是实时更新的,所以 你应该要求DAMON sysfs接口通过在相关的 ``kdamonds//state`` 文件中写入一个特殊的关键字 ``update_schemes_stats`` 来更新统计信息的文件内容。h](h可以通过读取 }(hjhhhNhNubj%)}(h ``stats``h]hstats}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 目录下的文件(}(hjhhhNhNubj%)}(h ``nr_tried``h]hnr_tried}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h ``sz_tried``h]hsz_tried}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }hjsbj%)}(h``nr_applied``h]h nr_applied}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h``sz_applied``h]h sz_applied}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, 和 }(hjhhhNhNubj%)}(h``qt_exceeds``h]h qt_exceeds}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh))分别检索这些统计数据。这些文件不是实时更新的,所以 你应该要求DAMON sysfs接口通过在相关的 }(hjhhhNhNubj%)}(h``kdamonds//state``h]hkdamonds//state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh) 文件中写入一个特殊的关键字 }(hjhhhNhNubj%)}(h``update_schemes_stats``h]hupdate_schemes_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh( 来更新统计信息的文件内容。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]schemes-n-statsah ]h"]schemes//stats/ah$]h&]uh1jhj hhhhhM ubj)}(hhh](j)}(hschemes//tried_regions/h]hschemes//tried_regions/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMubh)}(hX当一个特殊的关键字 ``update_schemes_tried_regions`` 被写入相关的 ``kdamonds//state`` 文件时,DAMON会在这个目录下创建从 ``0`` 开始命名的整数目录。每个目录包含的文件暴露了关于每个 内存区域的详细信息,在下一个 :ref:`聚集区间 `,相应的方案的 ``动作`` 已经尝试在这个目录下应用。这些信息包括地址范围、``nr_accesses`` 以及区域的 ``年龄`` 。h](h当一个特殊的关键字 }(hjhhhNhNubj%)}(h ``update_schemes_tried_regions``h]hupdate_schemes_tried_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 被写入相关的 }(hjhhhNhNubj%)}(h``kdamonds//state``h]hkdamonds//state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh1 文件时,DAMON会在这个目录下创建从 }(hjhhhNhNubj%)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh{ 开始命名的整数目录。每个目录包含的文件暴露了关于每个 内存区域的详细信息,在下一个 }(hjhhhNhNubh)}(h,:ref:`聚集区间 `h]jC)}(hjh]h 聚集区间}(hjhhhNhNubah}(h]h ](jNstdstd-refeh"]h$]h&]uh1jBhjubah}(h]h ]h"]h$]h&]refdocj[ refdomainjreftyperef refexplicitrefwarnjasysfs_monitoring_attrsuh1hhhhMhjubh,相应的方案的 }(hjhhhNhNubj%)}(h ``动作``h]h动作}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhI 已经尝试在这个目录下应用。这些信息包括地址范围、}(hjhhhNhNubj%)}(h``nr_accesses``h]h nr_accesses}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 以及区域的 }(hjhhhNhNubj%)}(h ``年龄``h]h年龄}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h当另一个特殊的关键字 ``clear_schemes_tried_regions`` 被写入相关的 ``kdamonds//state`` 文件时,这些目录将被删除。h](h当另一个特殊的关键字 }(hjnhhhNhNubj%)}(h``clear_schemes_tried_regions``h]hclear_schemes_tried_regions}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh 被写入相关的 }(hjnhhhNhNubj%)}(h``kdamonds//state``h]hkdamonds//state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjnubh( 文件时,这些目录将被删除。}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]schemes-n-tried-regionsah ]h"]schemes//tried_regions/ah$]h&]uh1jhj hhhhhMubj)}(hhh](j)}(htried_regions//h]htried_regions//}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhM#ubh)}(hX在每个区域目录中,你会发现四个文件(``start``, ``end``, ``nr_accesses``, and ``age``)。 读取这些文件将显示相应的基于DAMON的操作方案 ``动作`` 试图应用的区域的开始和结束地址、``nr_accesses`` 和 ``年龄`` 。h](h4在每个区域目录中,你会发现四个文件(}(hjhhhNhNubj%)}(h ``start``h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }(hjhhhNhNubj%)}(h``end``h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, }hjsbj%)}(h``nr_accesses``h]h nr_accesses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh, and }(hjhhhNhNubj%)}(h``age``h]hage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubhD)。 读取这些文件将显示相应的基于DAMON的操作方案 }(hjhhhNhNubj%)}(h ``动作``h]h动作}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh1 试图应用的区域的开始和结束地址、}(hjhhhNhNubj%)}(h``nr_accesses``h]h nr_accesses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 和 }(hjhhhNhNubj%)}(h ``年龄``h]h年龄}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM%hjhhubj)}(hhh](j)}(h用例h]h用例}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEhhhhhM*ubh)}(hX%下面的命令应用了一个方案:”如果一个大小为[4KiB, 8KiB]的内存区域在[10, 20]的聚合时间间隔内 显示出每一个聚合时间间隔[0, 5]的访问量,请分页该区域。对于分页,每秒最多只能使用10ms,而且每 秒分页不能超过1GiB。在这一限制下,首先分页出具有较长年龄的内存区域。另外,每5秒钟检查一次系统 的可用内存率,当可用内存率低于50%时开始监测和分页,但如果可用内存率大于60%,或低于30%,则停 止监测。“ ::h]hX"下面的命令应用了一个方案:”如果一个大小为[4KiB, 8KiB]的内存区域在[10, 20]的聚合时间间隔内 显示出每一个聚合时间间隔[0, 5]的访问量,请分页该区域。对于分页,每秒最多只能使用10ms,而且每 秒分页不能超过1GiB。在这一限制下,首先分页出具有较长年龄的内存区域。另外,每5秒钟检查一次系统 的可用内存率,当可用内存率低于50%时开始监测和分页,但如果可用内存率大于60%,或低于30%,则停 止监测。“}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hjEhhubj_)}(hX7# cd /kernel/mm/damon/admin # # populate directories # echo 1 > kdamonds/nr_kdamonds; echo 1 > kdamonds/0/contexts/nr_contexts; # echo 1 > kdamonds/0/contexts/0/schemes/nr_schemes # cd kdamonds/0/contexts/0/schemes/0 # # set the basic access pattern and the action # echo 4096 > access_pattern/sz/min # echo 8192 > access_pattern/sz/max # echo 0 > access_pattern/nr_accesses/min # echo 5 > access_pattern/nr_accesses/max # echo 10 > access_pattern/age/min # echo 20 > access_pattern/age/max # echo pageout > action # # set quotas # echo 10 > quotas/ms # echo $((1024*1024*1024)) > quotas/bytes # echo 1000 > quotas/reset_interval_ms # # set watermark # echo free_mem_rate > watermarks/metric # echo 5000000 > watermarks/interval_us # echo 600 > watermarks/high # echo 500 > watermarks/mid # echo 300 > watermarks/lowh]hX7# cd /kernel/mm/damon/admin # # populate directories # echo 1 > kdamonds/nr_kdamonds; echo 1 > kdamonds/0/contexts/nr_contexts; # echo 1 > kdamonds/0/contexts/0/schemes/nr_schemes # cd kdamonds/0/contexts/0/schemes/0 # # set the basic access pattern and the action # echo 4096 > access_pattern/sz/min # echo 8192 > access_pattern/sz/max # echo 0 > access_pattern/nr_accesses/min # echo 5 > access_pattern/nr_accesses/max # echo 10 > access_pattern/age/min # echo 20 > access_pattern/age/max # echo pageout > action # # set quotas # echo 10 > quotas/ms # echo $((1024*1024*1024)) > quotas/bytes # echo 1000 > quotas/reset_interval_ms # # set watermark # echo free_mem_rate > watermarks/metric # echo 5000000 > watermarks/interval_us # echo 600 > watermarks/high # echo 500 > watermarks/mid # echo 300 > watermarks/low}hjdsbah}(h]h ]h"]h$]h&]hhuh1j^hhhM2hjEhhubh)}(h请注意,我们强烈建议使用用户空间的工具,如 `damo `_ , 而不是像上面那样手动读写文件。以上只是一个例子。h](h@请注意,我们强烈建议使用用户空间的工具,如 }(hjrhhhNhNubj=)}(h+`damo `_h]hdamo}(hjzhhhNhNubah}(h]h ]h"]h$]h&]namedamoj!https://github.com/damonitor/damouh1j<hjrubj)}(h$ h]h}(h]damoah ]h"]damoah$]h&]refurijuh1jjKhjrubhM , 而不是像上面那样手动读写文件。以上只是一个例子。}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMJhjEhhubeh}(h]id6ah ]h"]用例ah$]h&]uh1jhjhhhhhM*ubeh}(h]tried-regions-nah ]h"]tried_regions//ah$]h&]uh1jhj hhhhhM#ubeh}(h]sysfsah ]h"] sysfs接口ah$]h&]uh1jhjhhhhhK$ubj)}(hhh](j)}(h监测结果的监测点h]h监测结果的监测点}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhMOubh)}(hDAMON通过一个tracepoint ``damon:damon_aggregated`` 提供监测结果. 当监测开启时,你可 以记录追踪点事件,并使用追踪点支持工具如perf显示结果。比如说::h](hDAMON通过一个tracepoint }(hjhhhNhNubj%)}(h``damon:damon_aggregated``h]hdamon:damon_aggregated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j$hjubh 提供监测结果. 当监测开启时,你可 以记录追踪点事件,并使用追踪点支持工具如perf显示结果。比如说:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMQhjhhubj_)}(h# echo on > monitor_on_DEPRECATED # perf record -e damon:damon_aggregated & # sleep 5 # kill 9 $(pidof perf) # echo off > monitor_on_DEPRECATED # perf scripth]h# echo on > monitor_on_DEPRECATED # perf record -e damon:damon_aggregated & # sleep 5 # kill 9 $(pidof perf) # echo off > monitor_on_DEPRECATED # perf script}hjsbah}(h]h ]h"]h$]h&]hhuh1j^hhhMThjhhubeh}(h]id7ah ]h"]监测结果的监测点ah$]h&]uh1jhjhhhhhMOubeh}(h]id1ah ]h"] 详细用法ah$]h&]uh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN 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}(jjjjjj jj~jjjjjjjjj jjjjMjJjvjsjjjt jq jy jv j j j+ j( j j jjjZjWjjjjjjjjjjjjjju nametypes}(jjjjjjjjj jjMjvjjt jy j j+ j jjZjjjjjjjuh}(jjjjj jj~jxjj jjnjjjjjjjjjJjjsjPjjyjq jjv jw j j| j( j j j. jj jWjjj]jjjjjjjjEjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j:KsRparse_messages]transform_messages] transformerN include_log]?Documentation/translations/zh_CN/admin-guide/mm/damon/usage.rst(NNNNta decorationNhhub.