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 (Simplified)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/zh_CN/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]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 (Traditional)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_TW/admin-guide/mm/damon/usage.rsthKubhwarning)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]h paragraph)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_TW/disclaimer-zh_TW.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubhnote)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h]h)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h](h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<}(hhhhhNhNubh reference)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1hhhubh>。}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhhhKubh 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}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h翻譯h]h翻譯}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;hhhKubj)}(h-司延騰 Yanteng Si h]h)}(h,司延騰 Yanteng Si h](h司延騰 Yanteng Si <}(hjPhhhNhNubh)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1hhjPubh>}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjLubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h校譯h]h校譯}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~hhhKubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhhhK hjhhubeh}(h]h ]h"]h$]h&]uh1jhhhhhhhKubhsection)}(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 }(hjhhhNhNubh)}(h*`這 `_h]h這}(hjhhhNhNubah}(h]h ]h"]h$]h&]name這refuri!https://github.com/damonitor/damouh1hhjubhtarget)}(h$ h]h}(h]id2ah ]h"]這ah$]h&]refurijuh1j referencedKhjubhXC 爲有這特權的人, 如系統管理員,希望有一個剛好 可以工作的人性化界面。 使用它,用戶可以以人性化的方式使用DAMON的主要功能。不過,它可能不會爲特殊情況進行高度調整。 它同時支持虛擬和物理地址空間的監測。更多細節,請參考它的 }(hjhhhNhNubh)}(hF`使用文檔 `_h]h 使用文檔}(hjhhhNhNubah}(h]h ]h"]h$]h&]name 使用文檔j4https://github.com/damonitor/damo/blob/next/USAGE.mduh1hhjubj)}(h7 h]h}(h]id3ah ]h"] 使用文檔ah$]h&]refurij uh1jj Khjubh。}(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接口。}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh }(hjBhhhNhNubh)}(h:ref:`這 `h]hinline)}(hjZh]h這}(hj^hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j\hjXubah}(h]h ]h"]h$]h&]refdoc-translations/zh_TW/admin-guide/mm/damon/usage refdomainjireftyperef refexplicitrefwarn reftargetsysfs_interfaceuh1hhhhKhjBubhX! 是爲那些希望更高級的使用DAMON的特權用戶空間程序員準備的。 使用它,用戶可以通過讀取和寫入特殊的sysfs文件來使用DAMON的主要功能。因此,你可以編寫和使 用你個性化的DAMON sysfs包裝程序,代替你讀/寫sysfs文件。 }(hjBhhhNhNubh)}(h>`DAMON用戶空間工具 `_h]hDAMON用戶空間工具}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameDAMON用戶空間工具j!https://github.com/damonitor/damouh1hhjBubj)}(h$ h]h}(h]damonah ]h"]damon用戶空間工具ah$]h&]refurijuh1jj KhjBubh[ 就是這種程序的一個例子 它同時支持虛擬和物理地址 空間的監測。}(hjBhhhNhNubeh}(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]j])}(hjh]h這}(hjhhhNhNubah}(h]h ](jhstdstd-doceh"]h$]h&]uh1j\hjubah}(h]h ]h"]h$]h&]refdocju refdomainjreftypedoc refexplicitrefwarnj{ /mm/damon/apiuh1hhhhKhjubh 這是爲內核空間程序員準備的。使用它,用戶可以通過爲你編寫內 核空間的DAMON應用程序,最靈活有效地利用DAMON的每一個功能。你甚至可以爲各種地址空間擴展DAMON。 詳細情況請參考接口 }(hjhhhNhNubh)}(h:doc:`文件 `h]j])}(hjh]h文件}(hjhhhNhNubah}(h]h ](jhstdstd-doceh"]h$]h&]uh1j\hjubah}(h]h ]h"]h$]h&]refdocju refdomainjreftypedoc refexplicitrefwarnj{ /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接口}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%hhhhhK$ubh)}(hDAMON的sysfs接口是在定義 ``CONFIG_DAMON_SYSFS`` 時建立的。它在其sysfs目錄下創建多 個目錄和文件, ``/kernel/mm/damon/`` 。你可以通過對該目錄下的文件進行寫入和 讀取來控制DAMON。h](h DAMON的sysfs接口是在定義 }(hj6hhhNhNubhliteral)}(h``CONFIG_DAMON_SYSFS``h]hCONFIG_DAMON_SYSFS}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubhG 時建立的。它在其sysfs目錄下創建多 個目錄和文件, }(hj6hhhNhNubj?)}(h``/kernel/mm/damon/``h]h/kernel/mm/damon/}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj6ubhR 。你可以通過對該目錄下的文件進行寫入和 讀取來控制DAMON。}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK%hj%hhubh)}(hn對於一個簡短的例子,用戶可以監測一個給定工作負載的虛擬地址空間,如下所示::h]hm對於一個簡短的例子,用戶可以監測一個給定工作負載的虛擬地址空間,如下所示:}(hjjhhhNhNubah}(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}hjzsbah}(h]h ]h"]h$]h&]hhuh1jxhhhK+hj%hhubj)}(hhh](j)}(h文件層次結構h]h文件層次結構}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK3ubh)}(hDAMON sysfs接口的文件層次結構如下圖所示。在下圖中,父子關係用縮進表示,每個目錄有 ``/`` 後綴,每個目錄中的文件用逗號(",")分開。 ::h](huDAMON sysfs接口的文件層次結構如下圖所示。在下圖中,父子關係用縮進表示,每個目錄有 }(hjhhhNhNubj?)}(h``/``h]h/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhA 後綴,每個目錄中的文件用逗號(”,”)分開。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hjhhubjy)}(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&]hhuh1jxhhhK8hjhhubeh}(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可以並行運行。}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjhhubh)}(hX/在 ``admin`` 目錄下,有一個目錄,即``kdamonds``,它有控制kdamonds的文件存在。在開始 時,這個目錄只有一個文件,``nr_kdamonds``。向該文件寫入一個數字(``N``),就會創建名爲 ``0`` 到 ``N-1`` 的子目錄數量。每個目錄代表每個kdamond。h](h在 }(hj9hhhNhNubj?)}(h ``admin``h]hadmin}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh 目錄下,有一個目錄,即``kdamonds``,它有控制kdamonds的文件存在。在開始 時,這個目錄只有一個文件,}(hj9hhhNhNubj?)}(h``nr_kdamonds``h]h nr_kdamonds}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh$。向該文件寫入一個數字(}(hj9hhhNhNubj?)}(h``N``h]hN}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh),就會創建名爲 }(hj9hhhNhNubj?)}(h``0``h]h0}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh 到 }(hj9hhhNhNubj?)}(h``N-1``h]hN-1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh8 的子目錄數量。每個目錄代表每個kdamond。}(hj9hhhNhNubeh}(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}(hj*hhhNhNubah}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 使kdamond處於狀態。向 }(hjhhhNhNubj?)}(h ``state``h]hstate}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 文件寫 }(hjhhhNhNubj?)}(h``update_schemes_stats``h]hupdate_schemes_stats}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhx , 更新kdamond的每個基於DAMON的操作方案的統計文件的內容。關於統計信息的細節,請參考 }(hjhhhNhNubh)}(h*:ref:`stats section `h]j])}(hjh]h stats section}(hjhhhNhNubah}(h]h ](jhstdstd-refeh"]h$]h&]uh1j\hjubah}(h]h ]h"]h$]h&]refdocju refdomainjreftyperef refexplicitrefwarnj{sysfs_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/}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhK{ubh)}(hX9在開始時,這個目錄只有一個文件,即 ``nr_contexts`` 。向該文件寫入一個數字( ``N`` ),就會創 建名爲``0`` 到 ``N-1`` 的子目錄數量。每個目錄代表每個監測背景。目前,每個kdamond只支持 一個上下文,所以只有 ``0`` 或 ``1`` 可以被寫入文件。h](h4在開始時,這個目錄只有一個文件,即 }(hj9hhhNhNubj?)}(h``nr_contexts``h]h nr_contexts}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh$ 。向該文件寫入一個數字( }(hj9hhhNhNubj?)}(h``N``h]hN}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh" ),就會創 建名爲``0`` 到 }(hj9hhhNhNubj?)}(h``N-1``h]hN-1}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh| 的子目錄數量。每個目錄代表每個監測背景。目前,每個kdamond只支持 一個上下文,所以只有 }(hj9hhhNhNubj?)}(h``0``h]h0}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh 或 }(hj9hhhNhNubj?)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj9ubh 可以被寫入文件。}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK}hj(hhubeh}(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)}(hj)h]h.vaddr: 監測特定進程的虛擬地址空間}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj'ubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(h)paddr: 監視系統的物理地址空間 h]h)}(h(paddr: 監視系統的物理地址空間h]h(paddr: 監視系統的物理地址空間}(hjBhhhNhNubah}(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&]uh1jhhhKhjhhubeh}(h] contexts-nah ]h"] contexts//ah$]h&]uh1jhj%hhhhhKubj)}(hhh](j)}(hcontexts//monitoring_attrs/h]hcontexts//monitoring_attrs/}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjhhhhhKubh)}(h用於指定監測屬性的文件,包括所需的監測質量和效率,都在 ``monitoring_attrs`` 目錄中。 具體來說,這個目錄下有兩個目錄,即 ``intervals`` 和 ``nr_regions`` 。h](hR用於指定監測屬性的文件,包括所需的監測質量和效率,都在 }(hj{hhhNhNubj?)}(h``monitoring_attrs``h]hmonitoring_attrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubhB 目錄中。 具體來說,這個目錄下有兩個目錄,即 }(hj{hhhNhNubj?)}(h ``intervals``h]h intervals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh 和 }(hj{hhhNhNubj?)}(h``nr_regions``h]h nr_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh 。}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjjhhubh)}(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&]uh1hhhhKhjjhhubh)}(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}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 和 }(hjhhhNhNubj?)}(h``max``h]hmax}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh ), 這兩個文件控制着監測的開銷。你可以通過向這些文件的寫入和讀出來設置和獲取這些值。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjjhhubh)}(he關於間隔和監測區域範圍的更多細節,請參考設計文件 (:doc:`/mm/damon/design`)。h](hJ關於間隔和監測區域範圍的更多細節,請參考設計文件 (}(hjYhhhNhNubh)}(h:doc:`/mm/damon/design`h]j])}(hjch]h/mm/damon/design}(hjehhhNhNubah}(h]h ](jhstdstd-doceh"]h$]h&]uh1j\hjaubah}(h]h ]h"]h$]h&]refdocju refdomainjoreftypedoc refexplicitrefwarnj{/mm/damon/designuh1hhhhKhjYubh)。}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjjhhubeh}(h]contexts-n-monitoring-attrsah ]h"]contexts//monitoring_attrs/ah$]h&]uh1jhj%hhhhhKubj)}(hhh](j)}(hcontexts//targets/h]hcontexts//targets/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(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&]uh1hhhhKhjhhubeh}(h]contexts-n-targetsah ]h"]contexts//targets/ah$]h&]uh1jhj%hhhhhKubj)}(hhh](j)}(h targets//h]h targets//}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(h\在每個目標目錄中,存在一個文件(``pid_target``)和一個目錄(``regions``)。h](h.在每個目標目錄中,存在一個文件(}(hj hhhNhNubj?)}(h``pid_target``h]h pid_target}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubh)和一個目錄(}(hj hhhNhNubj?)}(h ``regions``h]hregions}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubh)。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h如果你把 ``vaddr`` 寫到 ``contexts//operations`` 中,每個目標應該是一個進程。你 可以通過將進程的pid寫到 ``pid_target`` 文件中來指定DAMON的進程。h](h 如果你把 }(hjE hhhNhNubj?)}(h ``vaddr``h]hvaddr}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjE ubh 寫到 }(hjE hhhNhNubj?)}(h``contexts//operations``h]hcontexts//operations}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjE ubhQ 中,每個目標應該是一個進程。你 可以通過將進程的pid寫到 }(hjE hhhNhNubj?)}(h``pid_target``h]h pid_target}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjE ubh$ 文件中來指定DAMON的進程。}(hjE hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] targets-nah ]h"] targets//ah$]h&]uh1jhj%hhhhhKubj)}(hhh](j)}(htargets//regionsh]htargets//regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 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&]uh1hhhhKhj 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&]uh1hhhhKhj hhubh)}(h在這種情況下,用戶可以按照自己的意願明確設置初始監測目標區域,將適當的值寫入該目錄下的文件。h]h在這種情況下,用戶可以按照自己的意願明確設置初始監測目標區域,將適當的值寫入該目錄下的文件。}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h開始時,這個目錄只有一個文件, ``nr_regions`` 。向該文件寫入一個數字(``N``),就可以創 建名爲 ``0`` 到 ``N-1`` 的子目錄。每個目錄代表每個初始監測目標區域。h](h.開始時,這個目錄只有一個文件, }(hj8 hhhNhNubj?)}(h``nr_regions``h]h nr_regions}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8 ubh# 。向該文件寫入一個數字(}(hj8 hhhNhNubj?)}(h``N``h]hN}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8 ubh),就可以創 建名爲 }(hj8 hhhNhNubj?)}(h``0``h]h0}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8 ubh 到 }(hj8 hhhNhNubj?)}(h``N-1``h]hN-1}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8 ubhC 的子目錄。每個目錄代表每個初始監測目標區域。}(hj8 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj 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//}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH hhhhhKubh)}(h在每個方案目錄中,存在五個目錄(``access_pattern``、``quotas``、``watermarks``、 ``stats`` 和 ``tried_regions``)和一個文件(``action``)。h](h.在每個方案目錄中,存在五個目錄(}(hjY hhhNhNubj?)}(h``access_pattern``h]haccess_pattern}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY ubh、}(hjY hhhNhNubj?)}(h ``quotas``h]hquotas}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY ubh、}hjY sbj?)}(h``watermarks``h]h watermarks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY ubh、 }(hjY hhhNhNubj?)}(h ``stats``h]hstats}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY ubh 和 }(hjY hhhNhNubj?)}(h``tried_regions``h]h tried_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY ubh)和一個文件(}(hjY hhhNhNubj?)}(h ``action``h]haction}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjY ubh)。}(hjY hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjH 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&]uh1hhhhKhjH 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)}(hjA h](j?)}(h``cold``h]hcold}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjC ubh : 對具有 }(hjC hhhNhNubj?)}(h ``MADV_COLD``h]h MADV_COLD}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjC ubh 的區域調用 }(hjC hhhNhNubj?)}(h ``madvise()``h]h madvise()}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjC ubh 。}(hjC hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj? ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hI``pageout``: 爲具有 ``MADV_PAGEOUT`` 的區域調用 ``madvise()`` 。h]h)}(hj h](j?)}(h ``pageout``h]hpageout}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubh : 爲具有 }(hj hhhNhNubj?)}(h``MADV_PAGEOUT``h]h MADV_PAGEOUT}(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)}(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}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubh 的區域調用 }(hj hhhNhNubj?)}(h ``madvise()``h]h madvise()}(hjE 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)}(hje h](j?)}(h ``lru_prio``h]hlru_prio}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjg ubh2: 在其LRU列表上對區域進行優先排序。}(hjg hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjc ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h@``lru_deprio``: 對區域的LRU列表進行降低優先處理。h]h)}(hj h](j?)}(h``lru_deprio``h]h lru_deprio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj ubh2: 對區域的LRU列表進行降低優先處理。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj 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&]uh1jhhhKhjH 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在 }(hjhhhNhNubj?)}(h``access_pattern``h]haccess_pattern}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh# 目錄下,存在三個目錄( }(hjhhhNhNubj?)}(h``sz``h]hsz}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh, }(hjhhhNhNubj?)}(h``nr_accesses``h]h nr_accesses}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh, 和 }(hjhhhNhNubj?)}(h``age``h]hage}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh& ), 每個目錄有兩個文件(}(hjhhhNhNubj?)}(h``min``h]hmin}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 和 }(hjhhhNhNubj?)}(h``max``h]hmax}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh )。你可以通過向 }(hjhhhNhNubj?)}(h``sz``h]hsz}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh, }hjsbj?)}(h``nr_accesses``h]h nr_accesses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh, 和 }(hjhhhNhNubj?)}(h``age``h]hage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 目錄下的 }(hjhhhNhNubj?)}(h``min``h]hmin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 和 }hjsbj?)}(h``max``h]hmax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhL 文件分別寫入和讀取來設置和獲取給定方案的訪問模式。}(hjhhhNhNubeh}(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目標訪問模式}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhX( 取決於工作負載,所以不容易找到。更糟糕的是,將某些動作 的方案設置得過於激進會造成嚴重的開銷。爲了避免這種開銷,用戶可以爲每個方案限制時間和大小配額。 具體來說,用戶可以要求DAMON儘量只使用特定的時間(}(hjhhhNhNubj?)}(h``時間配額``h]h 時間配額}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh7)來應用動作,並且在給定的時間間 隔(}(hjhhhNhNubj?)}(h``重置間隔``h]h 重置間隔}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh`)內,只對具有目標訪問模式的內存區域應用動作,而不使用特定數量(}(hjhhhNhNubj?)}(h``大小配額``h]h 大小配額}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h當預計超過配額限制時,DAMON會根據 ``目標訪問模式`` 的大小、訪問頻率和年齡,對找到的內存區域 進行優先排序。爲了進行個性化的優先排序,用戶可以爲這三個屬性設置權重。h](h0當預計超過配額限制時,DAMON會根據 }(hj[hhhNhNubj?)}(h``目標訪問模式``h]h目標訪問模式}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj[ubh 的大小、訪問頻率和年齡,對找到的內存區域 進行優先排序。爲了進行個性化的優先排序,用戶可以爲這三個屬性設置權重。}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h在 ``quotas`` 目錄下,存在三個文件(``ms``, ``bytes``, ``reset_interval_ms``)和一個 目錄(``weights``),其中有三個文件(``sz_permil``, ``nr_accesses_permil``, 和 ``age_permil``)。h](h在 }(hj{hhhNhNubj?)}(h ``quotas``h]hquotas}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh" 目錄下,存在三個文件(}(hj{hhhNhNubj?)}(h``ms``h]hms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh, }(hj{hhhNhNubj?)}(h ``bytes``h]hbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh, }hj{sbj?)}(h``reset_interval_ms``h]hreset_interval_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh)和一個 目錄(}(hj{hhhNhNubj?)}(h ``weights``h]hweights}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh),其中有三個文件(}(hj{hhhNhNubj?)}(h ``sz_permil``h]h sz_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh, }hj{sbj?)}(h``nr_accesses_permil``h]hnr_accesses_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh, 和 }(hj{hhhNhNubj?)}(h``age_permil``h]h age_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj{ubh)。}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXP你可以設置以毫秒爲單位的 ``時間配額`` ,以字節爲單位的 ``大小配額`` ,以及以毫秒爲單位的 ``重 置間隔`` ,分別向這三個文件寫入數值。你還可以通過向 ``weights`` 目錄下的三個文件寫入數值來設 置大小、訪問頻率和年齡的優先權,單位爲千分之一。h](h%你可以設置以毫秒爲單位的 }(hjhhhNhNubj?)}(h``時間配額``h]h 時間配額}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh ,以字節爲單位的 }(hjhhhNhNubj?)}(h``大小配額``h]h 大小配額}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh ,以及以毫秒爲單位的 }(hjhhhNhNubj?)}(h``重 置間隔``h]h 重 置間隔}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhA ,分別向這三個文件寫入數值。你還可以通過向 }(hjhhhNhNubj?)}(h ``weights``h]hweights}(hjWhhhNhNubah}(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/}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwhhhhhKubh)}(hX爲了便於根據系統狀態激活和停用每個方案,DAMON提供了一個稱爲水位的功能。該功能接收五個值,稱爲 ``度量`` 、``間隔`` 、``高`` 、``中`` 、``低`` 。``度量值`` 是指可以測量的系統度量值,如 自由內存比率。如果系統的度量值 ``高`` 於memoent的高值或 ``低`` 於低值,則該方案被停用。如果 該值低於 ``中`` ,則該方案被激活。h](h爲了便於根據系統狀態激活和停用每個方案,DAMON提供了一個稱爲水位的功能。該功能接收五個值,稱爲 }(hjhhhNhNubj?)}(h ``度量``h]h度量}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 、}(hjhhhNhNubj?)}(h ``間隔``h]h間隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 、}hjsbj?)}(h``高``h]h高}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 、}hjsbj?)}(h``中``h]h中}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 、}hjsbj?)}(h``低``h]h低}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 。}(hjhhhNhNubj?)}(h ``度量值``h]h 度量值}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhZ 是指可以測量的系統度量值,如 自由內存比率。如果系統的度量值 }(hjhhhNhNubj?)}(h``高``h]h高}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 於memoent的高值或 }(hjhhhNhNubj?)}(h``低``h]h低}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh9 於低值,則該方案被停用。如果 該值低於 }(hjhhhNhNubj?)}(h``中``h]h中}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh ,則該方案被激活。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubh)}(h在水位目錄下,存在五個文件(``metric``, ``interval_us``,``high``, ``mid``, and ``low``) 用於設置每個值。你可以通過向這些文件的寫入來分別設置和獲取這五個值。h](h(在水位目錄下,存在五個文件(}(hj8hhhNhNubj?)}(h ``metric``h]hmetric}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubh, }(hj8hhhNhNubj?)}(h``interval_us``h]h interval_us}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubh ,``high``, }(hj8hhhNhNubj?)}(h``mid``h]hmid}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubh, and }(hj8hhhNhNubj?)}(h``low``h]hlow}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj8ubhh) 用於設置每個值。你可以通過向這些文件的寫入來分別設置和獲取這五個值。}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjwhhubh)}(h<可以寫入 ``metric`` 文件的關鍵詞和含義如下。h](h 可以寫入 }(hjhhhNhNubj?)}(h ``metric``h]hmetric}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh% 文件的關鍵詞和含義如下。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjwhhubj)}(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&]uh1jhhhMhjwhhubh)}(h+``interval`` 應以微秒爲單位寫入。h](j?)}(h ``interval``h]hinterval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 應以微秒爲單位寫入。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjwhhubeh}(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可以通過讀取 }(hj3hhhNhNubj?)}(h ``stats``h]hstats}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh 目錄下的文件(}(hj3hhhNhNubj?)}(h ``nr_tried``h]hnr_tried}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh, }(hj3hhhNhNubj?)}(h ``sz_tried``h]hsz_tried}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh, }hj3sbj?)}(h``nr_applied``h]h nr_applied}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh, }(hj3hhhNhNubj?)}(h``sz_applied``h]h sz_applied}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh, 和 }(hj3hhhNhNubj?)}(h``qt_exceeds``h]h qt_exceeds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh))分別檢索這些統計數據。這些文件不是實時更新的,所以 你應該要求DAMON sysfs接口通過在相關的 }(hj3hhhNhNubj?)}(h``kdamonds//state``h]hkdamonds//state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh) 文件中寫入一個特殊的關鍵字 }(hj3hhhNhNubj?)}(h``update_schemes_stats``h]hupdate_schemes_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hj3ubh( 來更新統計信息的文件內容。}(hj3hhhNhNubeh}(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]j])}(hj*h]h 聚集區間}(hj,hhhNhNubah}(h]h ](jhstdstd-refeh"]h$]h&]uh1j\hj(ubah}(h]h ]h"]h$]h&]refdocju refdomainj6reftyperef refexplicitrefwarnj{sysfs_monitoring_attrsuh1hhhhMhjubh,相應的方案的 }(hjhhhNhNubj?)}(h ``動作``h]h動作}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubhI 已經嘗試在這個目錄下應用。這些信息包括地址範圍、}(hjhhhNhNubj?)}(h``nr_accesses``h]h nr_accesses}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 以及區域的 }(hjhhhNhNubj?)}(h ``年齡``h]h年齡}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h當另一個特殊的關鍵字 ``clear_schemes_tried_regions`` 被寫入相關的 ``kdamonds//state`` 文件時,這些目錄將被刪除。h](h當另一個特殊的關鍵字 }(hjhhhNhNubj?)}(h``clear_schemes_tried_regions``h]hclear_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>hjubh( 文件時,這些目錄將被刪除。}(hjhhhNhNubeh}(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}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 和 }(hjhhhNhNubj?)}(h ``年齡``h]h年齡}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j>hjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM%hjhhubj)}(hhh](j)}(h用例h]h用例}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_hhhhhM*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%,則停 止監測。“}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hj_hhubjy)}(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}hj~sbah}(h]h ]h"]h$]h&]hhuh1jxhhhM2hj_hhubh)}(h請注意,我們強烈建議使用用戶空間的工具,如 `damo `_ , 而不是像上面那樣手動讀寫文件。以上只是一個例子。h](h@請注意,我們強烈建議使用用戶空間的工具,如 }(hjhhhNhNubh)}(h+`damo `_h]hdamo}(hjhhhNhNubah}(h]h ]h"]h$]h&]namedamoj!https://github.com/damonitor/damouh1hhjubj)}(h$ h]h}(h]damoah ]h"]damoah$]h&]refurijuh1jj KhjubhM , 而不是像上面那樣手動讀寫文件。以上只是一個例子。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMJhj_hhubeh}(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&]uh1hhhhMQhjhhubjy)}(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&]hhuh1jxhhhMThjhhubeh}(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_handlerjFerror_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}refids}nameids}(j jjjj*j'jjjjjjjjjjj%j"jjjgjdjjjjj j j j j j jE jB j j jjjtjqjjjjjjjjjjjjjju nametypes}(j jj*jjjjjj%jjgjjj j j jE j jjtjjjjjjjuh}(jjjjj'j!jjjj%jjjjjjj"jjj(jdjjjjjjj j j j j j jB j j jH jj jqjjjwjjjjjjjj_jjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jTKsRparse_messages]transform_messages] transformerN include_log]?Documentation/translations/zh_TW/admin-guide/mm/damon/usage.rst(NNNNta decorationNhhub.