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]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 (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&]uh1jhjhhhKubh 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}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj1ubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h翻譯h]h翻譯}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOhhhKubj0)}(h-司延騰 Yanteng Si h]h)}(h,司延騰 Yanteng Si h](h司延騰 Yanteng Si <}(hjdhhhNhNubh)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1hhjdubh>}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1j/hjOubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h校譯h]h校譯}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhKubj0)}(hhh]h}(h]h ]h"]h$]h&]uh1j/hjubeh}(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 使用文檔}(hj$hhhNhNubah}(h]h ]h"]h$]h&]name 使用文檔j4https://github.com/damonitor/damo/blob/next/USAGE.mduh1hhjubj)}(h7 h]h}(h]id3ah ]h"] 使用文檔ah$]h&]refurij4uh1jjKhjubh。}(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接口。}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh }(hjVhhhNhNubh)}(h:ref:`這 `h]hinline)}(hjnh]h這}(hjrhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jphjlubah}(h]h ]h"]h$]h&]refdoc-translations/zh_TW/admin-guide/mm/damon/usage refdomainj}reftyperef refexplicitrefwarn reftargetsysfs_interfaceuh1hhhhKhjVubhX! 是爲那些希望更高級的使用DAMON的特權用戶空間程序員準備的。 使用它,用戶可以通過讀取和寫入特殊的sysfs文件來使用DAMON的主要功能。因此,你可以編寫和使 用你個性化的DAMON sysfs包裝程序,代替你讀/寫sysfs文件。 }(hjVhhhNhNubh)}(h>`DAMON用戶空間工具 `_h]hDAMON用戶空間工具}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameDAMON用戶空間工具j!https://github.com/damonitor/damouh1hhjVubj)}(h$ h]h}(h]damonah ]h"]damon用戶空間工具ah$]h&]refurijuh1jjKhjVubh[ 就是這種程序的一個例子 它同時支持虛擬和物理地址 空間的監測。}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjRubah}(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]jq)}(hjh]h這}(hjhhhNhNubah}(h]h ](j|stdstd-doceh"]h$]h&]uh1jphjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypedoc refexplicitrefwarnj /mm/damon/apiuh1hhhhKhjubh 這是爲內核空間程序員準備的。使用它,用戶可以通過爲你編寫內 核空間的DAMON應用程序,最靈活有效地利用DAMON的每一個功能。你甚至可以爲各種地址空間擴展DAMON。 詳細情況請參考接口 }(hjhhhNhNubh)}(h:doc:`文件 `h]jq)}(hjh]h文件}(hjhhhNhNubah}(h]h ](j|stdstd-doceh"]h$]h&]uh1jphjubah}(h]h ]h"]h$]h&]refdocj 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&]uh1jhj9hhhhhK$ubh)}(hDAMON的sysfs接口是在定義 ``CONFIG_DAMON_SYSFS`` 時建立的。它在其sysfs目錄下創建多 個目錄和文件, ``/kernel/mm/damon/`` 。你可以通過對該目錄下的文件進行寫入和 讀取來控制DAMON。h](h DAMON的sysfs接口是在定義 }(hjJhhhNhNubhliteral)}(h``CONFIG_DAMON_SYSFS``h]hCONFIG_DAMON_SYSFS}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubhG 時建立的。它在其sysfs目錄下創建多 個目錄和文件, }(hjJhhhNhNubjS)}(h``/kernel/mm/damon/``h]h/kernel/mm/damon/}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjJubhR 。你可以通過對該目錄下的文件進行寫入和 讀取來控制DAMON。}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK%hj9hhubh)}(hn對於一個簡短的例子,用戶可以監測一個給定工作負載的虛擬地址空間,如下所示::h]hm對於一個簡短的例子,用戶可以監測一個給定工作負載的虛擬地址空間,如下所示:}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hj9hhubh 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}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK+hj9hhubj)}(hhh](j)}(h文件層次結構h]h文件層次結構}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK3ubh)}(hDAMON sysfs接口的文件層次結構如下圖所示。在下圖中,父子關係用縮進表示,每個目錄有 ``/`` 後綴,每個目錄中的文件用逗號(",")分開。 ::h](huDAMON sysfs接口的文件層次結構如下圖所示。在下圖中,父子關係用縮進表示,每個目錄有 }(hjhhhNhNubjS)}(h``/``h]h/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhA 後綴,每個目錄中的文件用逗號(”,”)分開。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hjhhubj)}(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&]hhuh1jhhhK8hjhhubeh}(h]id4ah ]h"]文件層次結構ah$]h&]uh1jhj9hhhhhK3ubj)}(hhh](j)}(h根h]h根}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKXubh)}(hDAMON sysfs接口的根是 ``/kernel/mm/damon/`` ,它有一個名爲 ``admin`` 的 目錄。該目錄包含特權用戶空間程序控制DAMON的文件。擁有根權限的用戶空間工具或deamons可以 使用這個目錄。h](hDAMON sysfs接口的根是 }(hjhhhNhNubjS)}(h``/kernel/mm/damon/``h]h/kernel/mm/damon/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh ,它有一個名爲 }(hjhhhNhNubjS)}(h ``admin``h]hadmin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 的 目錄。該目錄包含特權用戶空間程序控制DAMON的文件。擁有根權限的用戶空間工具或deamons可以 使用這個目錄。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKZhjhhubeh}(h]id5ah ]h"]根ah$]h&]uh1jhj9hhhhhKXubj)}(hhh](j)}(h kdamonds/h]h kdamonds/}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.hhhhhK_ubh)}(h與監測相關的信息包括請求規格和結果被稱爲DAMON上下文。DAMON用一個叫做kdamond的內核線程 執行每個上下文,多個kdamonds可以並行運行。h]h與監測相關的信息包括請求規格和結果被稱爲DAMON上下文。DAMON用一個叫做kdamond的內核線程 執行每個上下文,多個kdamonds可以並行運行。}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahj.hhubh)}(hX/在 ``admin`` 目錄下,有一個目錄,即``kdamonds``,它有控制kdamonds的文件存在。在開始 時,這個目錄只有一個文件,``nr_kdamonds``。向該文件寫入一個數字(``N``),就會創建名爲 ``0`` 到 ``N-1`` 的子目錄數量。每個目錄代表每個kdamond。h](h在 }(hjMhhhNhNubjS)}(h ``admin``h]hadmin}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh 目錄下,有一個目錄,即``kdamonds``,它有控制kdamonds的文件存在。在開始 時,這個目錄只有一個文件,}(hjMhhhNhNubjS)}(h``nr_kdamonds``h]h nr_kdamonds}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh$。向該文件寫入一個數字(}(hjMhhhNhNubjS)}(h``N``h]hN}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh),就會創建名爲 }(hjMhhhNhNubjS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh 到 }(hjMhhhNhNubjS)}(h``N-1``h]hN-1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh8 的子目錄數量。每個目錄代表每個kdamond。}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKdhj.hhubeh}(h]kdamondsah ]h"] kdamonds/ah$]h&]uh1jhj9hhhhhK_ubj)}(hhh](j)}(h kdamonds//h]h kdamonds//}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKiubh)}(hl在每個kdamond目錄中,存在兩個文件(``state`` 和 ``pid`` )和一個目錄( ``contexts`` )。h](h1在每個kdamond目錄中,存在兩個文件(}(hjhhhNhNubjS)}(h ``state``h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 和 }(hjhhhNhNubjS)}(h``pid``h]hpid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh )和一個目錄( }(hjhhhNhNubjS)}(h ``contexts``h]hcontexts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh )。}(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讀取 }(hjhhhNhNubjS)}(h ``state``h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh3 時,如果kdamond當前正在運行,則返回 }(hjhhhNhNubjS)}(h``on``h]hon}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh ,如果沒有運行則返回 }(hjhhhNhNubjS)}(h``off``h]hoff}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 。 寫入 }(hjhhhNhNubjS)}(h``on``h]hon}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 或 }(hjhhhNhNubjS)}(h``off``h]hoff}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 使kdamond處於狀態。向 }(hjhhhNhNubjS)}(h ``state``h]hstate}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 文件寫 }(hjhhhNhNubjS)}(h``update_schemes_stats``h]hupdate_schemes_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhx , 更新kdamond的每個基於DAMON的操作方案的統計文件的內容。關於統計信息的細節,請參考 }(hjhhhNhNubh)}(h*:ref:`stats section `h]jq)}(hjh]h stats section}(hjhhhNhNubah}(h]h ](j|stdstd-refeh"]h$]h&]uh1jphjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjsysfs_schemes_statsuh1hhhhKmhjubh. 將 }(hjhhhNhNubjS)}(h ``update_schemes_tried_regions``h]hupdate_schemes_tried_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 寫到 }(hjhhhNhNubjS)}(h ``state``h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhX 文件,爲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如果狀態爲 }(hjhhhNhNubjS)}(h``on``h]hon}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh ,讀取 }(hjhhhNhNubjS)}(h``pid``h]hpid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 顯示kdamond線程的pid。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKvhjhhubh)}(hS``contexts`` 目錄包含控制這個kdamond要執行的監測上下文的文件。h](jS)}(h ``contexts``h]hcontexts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhG 目錄包含控制這個kdamond要執行的監測上下文的文件。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhjhhubeh}(h] kdamonds-nah ]h"] kdamonds//ah$]h&]uh1jhj9hhhhhKiubj)}(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在開始時,這個目錄只有一個文件,即 }(hjMhhhNhNubjS)}(h``nr_contexts``h]h nr_contexts}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh$ 。向該文件寫入一個數字( }(hjMhhhNhNubjS)}(h``N``h]hN}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh" ),就會創 建名爲``0`` 到 }(hjMhhhNhNubjS)}(h``N-1``h]hN-1}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh| 的子目錄數量。每個目錄代表每個監測背景。目前,每個kdamond只支持 一個上下文,所以只有 }(hjMhhhNhNubjS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh 或 }(hjMhhhNhNubjS)}(h``1``h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjMubh 可以被寫入文件。}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK}hj<hhubeh}(h]kdamonds-n-contextsah ]h"]kdamonds//contexts/ah$]h&]uh1jhj9hhhhhK{ubj)}(hhh](j)}(h contexts//h]h contexts//}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h在每個上下文目錄中,存在一個文件(``operations``)和三個目錄(``monitoring_attrs``, ``targets``, 和 ``schemes``)。h](h1在每個上下文目錄中,存在一個文件(}(hjhhhNhNubjS)}(h``operations``h]h operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh)和三個目錄(}(hjhhhNhNubjS)}(h``monitoring_attrs``h]hmonitoring_attrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }(hjhhhNhNubjS)}(h ``targets``h]htargets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, 和 }(hjhhhNhNubjS)}(h ``schemes``h]hschemes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXDAMON支持多種類型的監測操作,包括對虛擬地址空間和物理地址空間的監測。你可以通過向文件 中寫入以下關鍵詞之一,並從文件中讀取,來設置和獲取DAMON將爲上下文使用何種類型的監測操作。h]hXDAMON支持多種類型的監測操作,包括對虛擬地址空間和物理地址空間的監測。你可以通過向文件 中寫入以下關鍵詞之一,並從文件中讀取,來設置和獲取DAMON將爲上下文使用何種類型的監測操作。}(hj$hhhNhNubah}(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&]uh1jhj8ubj)}(h)paddr: 監視系統的物理地址空間 h]h)}(h(paddr: 監視系統的物理地址空間h]h(paddr: 監視系統的物理地址空間}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjRubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]j7j8uh1jhhhKhj4ubah}(h]h ]h"]h$]h&]uh1j2hhhKhjhhubeh}(h] contexts-nah ]h"] contexts//ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(hcontexts//monitoring_attrs/h]hcontexts//monitoring_attrs/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~hhhhhKubh)}(h用於指定監測屬性的文件,包括所需的監測質量和效率,都在 ``monitoring_attrs`` 目錄中。 具體來說,這個目錄下有兩個目錄,即 ``intervals`` 和 ``nr_regions`` 。h](hR用於指定監測屬性的文件,包括所需的監測質量和效率,都在 }(hjhhhNhNubjS)}(h``monitoring_attrs``h]hmonitoring_attrs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhB 目錄中。 具體來說,這個目錄下有兩個目錄,即 }(hjhhhNhNubjS)}(h ``intervals``h]h intervals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 和 }(hjhhhNhNubjS)}(h``nr_regions``h]h nr_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj~hhubh)}(h在 ``intervals`` 目錄下,存在DAMON的採樣間隔(``sample_us``)、聚集間隔(``aggr_us``) 和更新間隔(``update_us``)三個文件。你可以通過寫入和讀出這些文件來設置和獲取微秒級的值。h](h在 }(hjhhhNhNubjS)}(h ``intervals``h]h intervals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh( 目錄下,存在DAMON的採樣間隔(}(hjhhhNhNubjS)}(h ``sample_us``h]h sample_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh)、聚集間隔(}(hjhhhNhNubjS)}(h ``aggr_us``h]haggr_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh) 和更新間隔(}(hjhhhNhNubjS)}(h ``update_us``h]h update_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh^)三個文件。你可以通過寫入和讀出這些文件來設置和獲取微秒級的值。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj~hhubh)}(h在 ``nr_regions`` 目錄下,有兩個文件分別用於DAMON監測區域的下限和上限(``min`` 和 ``max`` ), 這兩個文件控制着監測的開銷。你可以通過向這些文件的寫入和讀出來設置和獲取這些值。h](h在 }(hj)hhhNhNubjS)}(h``nr_regions``h]h nr_regions}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubhN 目錄下,有兩個文件分別用於DAMON監測區域的下限和上限(}(hj)hhhNhNubjS)}(h``min``h]hmin}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubh 和 }(hj)hhhNhNubjS)}(h``max``h]hmax}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj)ubh ), 這兩個文件控制着監測的開銷。你可以通過向這些文件的寫入和讀出來設置和獲取這些值。}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj~hhubh)}(he關於間隔和監測區域範圍的更多細節,請參考設計文件 (:doc:`/mm/damon/design`)。h](hJ關於間隔和監測區域範圍的更多細節,請參考設計文件 (}(hjmhhhNhNubh)}(h:doc:`/mm/damon/design`h]jq)}(hjwh]h/mm/damon/design}(hjyhhhNhNubah}(h]h ](j|stdstd-doceh"]h$]h&]uh1jphjuubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypedoc refexplicitrefwarnj/mm/damon/designuh1hhhhKhjmubh)。}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj~hhubeh}(h]contexts-n-monitoring-attrsah ]h"]contexts//monitoring_attrs/ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(hcontexts//targets/h]hcontexts//targets/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h在開始時,這個目錄只有一個文件 ``nr_targets`` 。向該文件寫入一個數字(``N``),就可以創建 名爲 ``0`` 到 ``N-1`` 的子目錄的數量。每個目錄代表每個監測目標。h](h.在開始時,這個目錄只有一個文件 }(hjhhhNhNubjS)}(h``nr_targets``h]h nr_targets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh# 。向該文件寫入一個數字(}(hjhhhNhNubjS)}(h``N``h]hN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh),就可以創建 名爲 }(hjhhhNhNubjS)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 到 }(hjhhhNhNubjS)}(h``N-1``h]hN-1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh@ 的子目錄的數量。每個目錄代表每個監測目標。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]contexts-n-targetsah ]h"]contexts//targets/ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(h targets//h]h targets//}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(h\在每個目標目錄中,存在一個文件(``pid_target``)和一個目錄(``regions``)。h](h.在每個目標目錄中,存在一個文件(}(hj' hhhNhNubjS)}(h``pid_target``h]h pid_target}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj' ubh)和一個目錄(}(hj' hhhNhNubjS)}(h ``regions``h]hregions}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj' ubh)。}(hj' hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h如果你把 ``vaddr`` 寫到 ``contexts//operations`` 中,每個目標應該是一個進程。你 可以通過將進程的pid寫到 ``pid_target`` 文件中來指定DAMON的進程。h](h 如果你把 }(hjY hhhNhNubjS)}(h ``vaddr``h]hvaddr}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjY ubh 寫到 }(hjY hhhNhNubjS)}(h``contexts//operations``h]hcontexts//operations}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjY ubhQ 中,每個目標應該是一個進程。你 可以通過將進程的pid寫到 }(hjY hhhNhNubjS)}(h``pid_target``h]h pid_target}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjY ubh$ 文件中來指定DAMON的進程。}(hjY hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] targets-nah ]h"] targets//ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(htargets//regionsh]htargets//regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(hX!當使用 ``vaddr`` 監測操作集時( ``vaddr`` 被寫入 ``contexts//operations`` 文 件),DAMON自動設置和更新監測目標區域,這樣就可以覆蓋目標進程的整個內存映射。然而,用戶可 能希望將初始監測區域設置爲特定的地址範圍。h](h 當使用 }(hj hhhNhNubjS)}(h ``vaddr``h]hvaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 監測操作集時( }(hj hhhNhNubjS)}(h ``vaddr``h]hvaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 被寫入 }(hj hhhNhNubjS)}(h``contexts//operations``h]hcontexts//operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 文 件),DAMON自動設置和更新監測目標區域,這樣就可以覆蓋目標進程的整個內存映射。然而,用戶可 能希望將初始監測區域設置爲特定的地址範圍。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h相反,當使用 ``paddr`` 監測操作集時,DAMON不會自動設置和更新監測目標區域( ``paddr`` 被寫入 ``contexts//operations`` 中)。因此,在這種情況下,用戶應該自己設置監測目標 區域。h](h相反,當使用 }(hj hhhNhNubjS)}(h ``paddr``h]hpaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubhL 監測操作集時,DAMON不會自動設置和更新監測目標區域( }(hj hhhNhNubjS)}(h ``paddr``h]hpaddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 被寫入 }(hj hhhNhNubjS)}(h``contexts//operations``h]hcontexts//operations}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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.開始時,這個目錄只有一個文件, }(hjL hhhNhNubjS)}(h``nr_regions``h]h nr_regions}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjL ubh# 。向該文件寫入一個數字(}(hjL hhhNhNubjS)}(h``N``h]hN}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjL ubh),就可以創 建名爲 }(hjL hhhNhNubjS)}(h``0``h]h0}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjL ubh 到 }(hjL hhhNhNubjS)}(h``N-1``h]hN-1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjL ubhC 的子目錄。每個目錄代表每個初始監測目標區域。}(hjL hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]targets-n-regionsah ]h"]targets//regionsah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(h regions//h]h regions//}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(h在每個區域目錄中,你會發現兩個文件( ``start`` 和 ``end`` )。你可以通過向文件寫入 和從文件中讀出,分別設置和獲得初始監測目標區域的起始和結束地址。h](h7在每個區域目錄中,你會發現兩個文件( }(hj hhhNhNubjS)}(h ``start``h]hstart}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 和 }(hj hhhNhNubjS)}(h``end``h]hend}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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&]uh1jhj9hhhhhKubj)}(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" hhhNhNubjS)}(h``nr_schemes``h]h nr_schemes}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj" ubh"。向該文件寫入一個數字(}(hj" hhhNhNubjS)}(h``N``h]hN}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj" ubhv),就可以 創建名爲``0``到``N-1``的子目錄的數量。每個目錄代表每個基於DAMON的操作方案。}(hj" hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]contexts-n-schemesah ]h"]contexts//schemes/ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(h schemes//h]h schemes//}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ hhhhhKubh)}(h在每個方案目錄中,存在五個目錄(``access_pattern``、``quotas``、``watermarks``、 ``stats`` 和 ``tried_regions``)和一個文件(``action``)。h](h.在每個方案目錄中,存在五個目錄(}(hjm hhhNhNubjS)}(h``access_pattern``h]haccess_pattern}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubh、}(hjm hhhNhNubjS)}(h ``quotas``h]hquotas}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubh、}hjm sbjS)}(h``watermarks``h]h watermarks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubh、 }(hjm hhhNhNubjS)}(h ``stats``h]hstats}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubh 和 }(hjm hhhNhNubjS)}(h``tried_regions``h]h tried_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubh)和一個文件(}(hjm hhhNhNubjS)}(h ``action``h]haction}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjm ubh)。}(hjm hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj\ hhubh)}(h``action`` 文件用於設置和獲取你想應用於具有特定訪問模式的內存區域的動作。可以寫入文件 和從文件中讀取的關鍵詞及其含義如下。h](jS)}(h ``action``h]haction}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 文件用於設置和獲取你想應用於具有特定訪問模式的內存區域的動作。可以寫入文件 和從文件中讀取的關鍵詞及其含義如下。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj\ hhubj3)}(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](jS)}(h ``willneed``h]hwillneed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh : 對有 }(hj hhhNhNubjS)}(h``MADV_WILLNEED``h]h MADV_WILLNEED}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 的區域調用 }(hj hhhNhNubjS)}(h ``madvise()``h]h madvise()}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hC``cold``: 對具有 ``MADV_COLD`` 的區域調用 ``madvise()`` 。h]h)}(hjU h](jS)}(h``cold``h]hcold}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjW ubh : 對具有 }(hjW hhhNhNubjS)}(h ``MADV_COLD``h]h MADV_COLD}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjW ubh 的區域調用 }(hjW hhhNhNubjS)}(h ``madvise()``h]h madvise()}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjW ubh 。}(hjW hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjS ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hI``pageout``: 爲具有 ``MADV_PAGEOUT`` 的區域調用 ``madvise()`` 。h]h)}(hj h](jS)}(h ``pageout``h]hpageout}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh : 爲具有 }(hj hhhNhNubjS)}(h``MADV_PAGEOUT``h]h MADV_PAGEOUT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 的區域調用 }(hj hhhNhNubjS)}(h ``madvise()``h]h madvise()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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](jS)}(h ``hugepage``h]hhugepage}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh : 爲帶有 }(hj hhhNhNubjS)}(h``MADV_HUGEPAGE``h]h MADV_HUGEPAGE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 的區域調用 }(hj hhhNhNubjS)}(h ``madvise()``h]h madvise()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh 。}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hN``nohugepage``: 爲帶有 ``MADV_NOHUGEPAGE`` 的區域調用 ``madvise()``。h]h)}(hj0 h](jS)}(h``nohugepage``h]h nohugepage}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2 ubh : 爲帶有 }(hj2 hhhNhNubjS)}(h``MADV_NOHUGEPAGE``h]hMADV_NOHUGEPAGE}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2 ubh 的區域調用 }(hj2 hhhNhNubjS)}(h ``madvise()``h]h madvise()}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj2 ubh。}(hj2 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj. ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h>``lru_prio``: 在其LRU列表上對區域進行優先排序。h]h)}(hjy h](jS)}(h ``lru_prio``h]hlru_prio}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj{ ubh2: 在其LRU列表上對區域進行優先排序。}(hj{ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjw ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h@``lru_deprio``: 對區域的LRU列表進行降低優先處理。h]h)}(hj h](jS)}(h``lru_deprio``h]h lru_deprio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj 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](jS)}(h``stat``h]hstat}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj ubh): 什麼都不做,只計算統計數據}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]j7j8uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j2hhhKhj\ hhubeh}(h] schemes-nah ]h"] schemes//ah$]h&]uh1jhj9hhhhhKubj)}(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在 }(hjhhhNhNubjS)}(h``access_pattern``h]haccess_pattern}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh# 目錄下,存在三個目錄( }(hjhhhNhNubjS)}(h``sz``h]hsz}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }(hjhhhNhNubjS)}(h``nr_accesses``h]h nr_accesses}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, 和 }(hjhhhNhNubjS)}(h``age``h]hage}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh& ), 每個目錄有兩個文件(}(hjhhhNhNubjS)}(h``min``h]hmin}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 和 }(hjhhhNhNubjS)}(h``max``h]hmax}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh )。你可以通過向 }(hjhhhNhNubjS)}(h``sz``h]hsz}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }hjsbjS)}(h``nr_accesses``h]h nr_accesses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, 和 }(hjhhhNhNubjS)}(h``age``h]hage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 目錄下的 }(hjhhhNhNubjS)}(h``min``h]hmin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 和 }hjsbjS)}(h``max``h]hmax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhL 文件分別寫入和讀取來設置和獲取給定方案的訪問模式。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]schemes-n-access-patternah ]h"]schemes//access_pattern/ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(hschemes//quotas/h]hschemes//quotas/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hX'每個 ``動作`` 的最佳 ``目標訪問模式`` 取決於工作負載,所以不容易找到。更糟糕的是,將某些動作 的方案設置得過於激進會造成嚴重的開銷。爲了避免這種開銷,用戶可以爲每個方案限制時間和大小配額。 具體來說,用戶可以要求DAMON儘量只使用特定的時間(``時間配額``)來應用動作,並且在給定的時間間 隔(``重置間隔``)內,只對具有目標訪問模式的內存區域應用動作,而不使用特定數量(``大小配額``)。h](h每個 }(hjhhhNhNubjS)}(h ``動作``h]h動作}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 的最佳 }(hjhhhNhNubjS)}(h``目標訪問模式``h]h目標訪問模式}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhX( 取決於工作負載,所以不容易找到。更糟糕的是,將某些動作 的方案設置得過於激進會造成嚴重的開銷。爲了避免這種開銷,用戶可以爲每個方案限制時間和大小配額。 具體來說,用戶可以要求DAMON儘量只使用特定的時間(}(hjhhhNhNubjS)}(h``時間配額``h]h 時間配額}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh7)來應用動作,並且在給定的時間間 隔(}(hjhhhNhNubjS)}(h``重置間隔``h]h 重置間隔}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh`)內,只對具有目標訪問模式的內存區域應用動作,而不使用特定數量(}(hjhhhNhNubjS)}(h``大小配額``h]h 大小配額}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h當預計超過配額限制時,DAMON會根據 ``目標訪問模式`` 的大小、訪問頻率和年齡,對找到的內存區域 進行優先排序。爲了進行個性化的優先排序,用戶可以爲這三個屬性設置權重。h](h0當預計超過配額限制時,DAMON會根據 }(hjohhhNhNubjS)}(h``目標訪問模式``h]h目標訪問模式}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjoubh 的大小、訪問頻率和年齡,對找到的內存區域 進行優先排序。爲了進行個性化的優先排序,用戶可以爲這三個屬性設置權重。}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h在 ``quotas`` 目錄下,存在三個文件(``ms``, ``bytes``, ``reset_interval_ms``)和一個 目錄(``weights``),其中有三個文件(``sz_permil``, ``nr_accesses_permil``, 和 ``age_permil``)。h](h在 }(hjhhhNhNubjS)}(h ``quotas``h]hquotas}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh" 目錄下,存在三個文件(}(hjhhhNhNubjS)}(h``ms``h]hms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }(hjhhhNhNubjS)}(h ``bytes``h]hbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }hjsbjS)}(h``reset_interval_ms``h]hreset_interval_ms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh)和一個 目錄(}(hjhhhNhNubjS)}(h ``weights``h]hweights}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh),其中有三個文件(}(hjhhhNhNubjS)}(h ``sz_permil``h]h sz_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }hjsbjS)}(h``nr_accesses_permil``h]hnr_accesses_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, 和 }(hjhhhNhNubjS)}(h``age_permil``h]h age_permil}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXP你可以設置以毫秒爲單位的 ``時間配額`` ,以字節爲單位的 ``大小配額`` ,以及以毫秒爲單位的 ``重 置間隔`` ,分別向這三個文件寫入數值。你還可以通過向 ``weights`` 目錄下的三個文件寫入數值來設 置大小、訪問頻率和年齡的優先權,單位爲千分之一。h](h%你可以設置以毫秒爲單位的 }(hj-hhhNhNubjS)}(h``時間配額``h]h 時間配額}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubh ,以字節爲單位的 }(hj-hhhNhNubjS)}(h``大小配額``h]h 大小配額}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubh ,以及以毫秒爲單位的 }(hj-hhhNhNubjS)}(h``重 置間隔``h]h 重 置間隔}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubhA ,分別向這三個文件寫入數值。你還可以通過向 }(hj-hhhNhNubjS)}(h ``weights``h]hweights}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhj-ubht 目錄下的三個文件寫入數值來設 置大小、訪問頻率和年齡的優先權,單位爲千分之一。}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]schemes-n-quotasah ]h"]schemes//quotas/ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(hschemes//watermarks/h]hschemes//watermarks/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hX爲了便於根據系統狀態激活和停用每個方案,DAMON提供了一個稱爲水位的功能。該功能接收五個值,稱爲 ``度量`` 、``間隔`` 、``高`` 、``中`` 、``低`` 。``度量值`` 是指可以測量的系統度量值,如 自由內存比率。如果系統的度量值 ``高`` 於memoent的高值或 ``低`` 於低值,則該方案被停用。如果 該值低於 ``中`` ,則該方案被激活。h](h爲了便於根據系統狀態激活和停用每個方案,DAMON提供了一個稱爲水位的功能。該功能接收五個值,稱爲 }(hjhhhNhNubjS)}(h ``度量``h]h度量}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 、}(hjhhhNhNubjS)}(h ``間隔``h]h間隔}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 、}hjsbjS)}(h``高``h]h高}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 、}hjsbjS)}(h``中``h]h中}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 、}hjsbjS)}(h``低``h]h低}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 。}(hjhhhNhNubjS)}(h ``度量值``h]h 度量值}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhZ 是指可以測量的系統度量值,如 自由內存比率。如果系統的度量值 }(hjhhhNhNubjS)}(h``高``h]h高}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 於memoent的高值或 }(hjhhhNhNubjS)}(h``低``h]h低}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh9 於低值,則該方案被停用。如果 該值低於 }(hjhhhNhNubjS)}(h``中``h]h中}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh ,則該方案被激活。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h在水位目錄下,存在五個文件(``metric``, ``interval_us``,``high``, ``mid``, and ``low``) 用於設置每個值。你可以通過向這些文件的寫入來分別設置和獲取這五個值。h](h(在水位目錄下,存在五個文件(}(hjLhhhNhNubjS)}(h ``metric``h]hmetric}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubh, }(hjLhhhNhNubjS)}(h``interval_us``h]h interval_us}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubh ,``high``, }(hjLhhhNhNubjS)}(h``mid``h]hmid}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubh, and }(hjLhhhNhNubjS)}(h``low``h]hlow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjLubhh) 用於設置每個值。你可以通過向這些文件的寫入來分別設置和獲取這五個值。}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h<可以寫入 ``metric`` 文件的關鍵詞和含義如下。h](h 可以寫入 }(hjhhhNhNubjS)}(h ``metric``h]hmetric}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh% 文件的關鍵詞和含義如下。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj3)}(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&]j7j8uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j2hhhMhjhhubh)}(h+``interval`` 應以微秒爲單位寫入。h](jS)}(h ``interval``h]hinterval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 應以微秒爲單位寫入。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]u>h1hhhhM hjhhubeh}(h]schemes-n-watermarksah ]h"]schemes//watermarks/ah$]h&]uh1jhj9hhhhhKubj)}(hhh](j)}(hschemes//stats/h]hschemes//stats/}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(hhhhhM ubh)}(hDAMON統計每個方案被嘗試應用的區域的總數量和字節數,每個方案被成功應用的區域的兩個數字,以及 超過配額限制的總數量。這些統計數據可用於在線分析或調整方案。h]hDAMON統計每個方案被嘗試應用的區域的總數量和字節數,每個方案被成功應用的區域的兩個數字,以及 超過配額限制的總數量。這些統計數據可用於在線分析或調整方案。}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj(hhubh)}(hX可以通過讀取 ``stats`` 目錄下的文件(``nr_tried``, ``sz_tried``, ``nr_applied``, ``sz_applied``, 和 ``qt_exceeds``))分別檢索這些統計數據。這些文件不是實時更新的,所以 你應該要求DAMON sysfs接口通過在相關的 ``kdamonds//state`` 文件中寫入一個特殊的關鍵字 ``update_schemes_stats`` 來更新統計信息的文件內容。h](h可以通過讀取 }(hjGhhhNhNubjS)}(h ``stats``h]hstats}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh 目錄下的文件(}(hjGhhhNhNubjS)}(h ``nr_tried``h]hnr_tried}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh, }(hjGhhhNhNubjS)}(h ``sz_tried``h]hsz_tried}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh, }hjGsbjS)}(h``nr_applied``h]h nr_applied}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh, }(hjGhhhNhNubjS)}(h``sz_applied``h]h sz_applied}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh, 和 }(hjGhhhNhNubjS)}(h``qt_exceeds``h]h qt_exceeds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh))分別檢索這些統計數據。這些文件不是實時更新的,所以 你應該要求DAMON sysfs接口通過在相關的 }(hjGhhhNhNubjS)}(h``kdamonds//state``h]hkdamonds//state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh) 文件中寫入一個特殊的關鍵字 }(hjGhhhNhNubjS)}(h``update_schemes_stats``h]hupdate_schemes_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjGubh( 來更新統計信息的文件內容。}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj(hhubeh}(h]schemes-n-statsah ]h"]schemes//stats/ah$]h&]uh1jhj9hhhhhM 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當一個特殊的關鍵字 }(hjhhhNhNubjS)}(h ``update_schemes_tried_regions``h]hupdate_schemes_tried_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 被寫入相關的 }(hjhhhNhNubjS)}(h``kdamonds//state``h]hkdamonds//state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh1 文件時,DAMON會在這個目錄下創建從 }(hjhhhNhNubjS)}(h``0``h]h0}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh{ 開始命名的整數目錄。每個目錄包含的文件暴露了關於每個 內存區域的詳細信息,在下一個 }(hjhhhNhNubh)}(h,:ref:`聚集區間 `h]jq)}(hj>h]h 聚集區間}(hj@hhhNhNubah}(h]h ](j|stdstd-refeh"]h$]h&]uh1jphj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjJreftyperef refexplicitrefwarnjsysfs_monitoring_attrsuh1hhhhMhjubh,相應的方案的 }(hjhhhNhNubjS)}(h ``動作``h]h動作}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhI 已經嘗試在這個目錄下應用。這些信息包括地址範圍、}(hjhhhNhNubjS)}(h``nr_accesses``h]h nr_accesses}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 以及區域的 }(hjhhhNhNubjS)}(h ``年齡``h]h年齡}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(h當另一個特殊的關鍵字 ``clear_schemes_tried_regions`` 被寫入相關的 ``kdamonds//state`` 文件時,這些目錄將被刪除。h](h當另一個特殊的關鍵字 }(hjhhhNhNubjS)}(h``clear_schemes_tried_regions``h]hclear_schemes_tried_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 被寫入相關的 }(hjhhhNhNubjS)}(h``kdamonds//state``h]hkdamonds//state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh( 文件時,這些目錄將被刪除。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]schemes-n-tried-regionsah ]h"]schemes//tried_regions/ah$]h&]uh1jhj9hhhhhMubj)}(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在每個區域目錄中,你會發現四個文件(}(hjhhhNhNubjS)}(h ``start``h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }(hjhhhNhNubjS)}(h``end``h]hend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, }hjsbjS)}(h``nr_accesses``h]h nr_accesses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh, and }(hjhhhNhNubjS)}(h``age``h]hage}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubhD)。 讀取這些文件將顯示相應的基於DAMON的操作方案 }(hjhhhNhNubjS)}(h ``動作``h]h動作}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh1 試圖應用的區域的開始和結束地址、}(hjhhhNhNubjS)}(h``nr_accesses``h]h nr_accesses}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 和 }(hjhhhNhNubjS)}(h ``年齡``h]h年齡}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM%hjhhubj)}(hhh](j)}(h用例h]h用例}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjshhhhhM*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%,則停 止監測。“}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hjshhubj)}(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}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhM2hjshhubh)}(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&]refurijuh1jjKhjubhM , 而不是像上面那樣手動讀寫文件。以上只是一個例子。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMJhjshhubeh}(h]id6ah ]h"]用例ah$]h&]uh1jhjhhhhhM*ubeh}(h]tried-regions-nah ]h"]tried_regions//ah$]h&]uh1jhj9hhhhhM#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 }(hjhhhNhNubjS)}(h``damon:damon_aggregated``h]hdamon:damon_aggregated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jRhjubh 提供監測結果. 當監測開啓時,你可 以記錄追蹤點事件,並使用追蹤點支持工具如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&]hhuh1jhhhMThjhhubeh}(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_handlerjZerror_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}(j4j1jjj>j;jjjjjjj+j(jjj9j6jjj{jxjjj j j j j j j j jY jV j j jjjjj%j"jjjjjjjjjjj,j)u nametypes}(j4jj>jjjj+jj9jj{jj j j j jY j jjj%jjjjjj,uh}(j1jjjj;j5jjjj9jjj(jjj.j6jjj<jxjjj~j jj j j j j j jV j j j\ jj jjj"jjj(jjjjjjsjjj)ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jhKsRparse_messages]transform_messages] transformerN include_log]?Documentation/translations/zh_TW/admin-guide/mm/damon/usage.rst(NNNNta decorationNhhub.