xref: /linux/Documentation/translations/zh_TW/admin-guide/mm/damon/reclaim.rst (revision a23e1966932464e1c5226cb9ac4ce1d5fc10ba22)
1f949cb75SHu Haowen.. SPDX-License-Identifier: GPL-2.0
2f949cb75SHu Haowen.. include:: ../../../disclaimer-zh_TW.rst
3f949cb75SHu Haowen
4f949cb75SHu Haowen:Original: Documentation/admin-guide/mm/damon/reclaim.rst
5f949cb75SHu Haowen
6f949cb75SHu Haowen:翻譯:
7f949cb75SHu Haowen
8f949cb75SHu Haowen 司延騰 Yanteng Si <siyanteng@loongson.cn>
9f949cb75SHu Haowen
10f949cb75SHu Haowen:校譯:
11f949cb75SHu Haowen
12f949cb75SHu Haowen===============
13f949cb75SHu Haowen基於DAMON的回收
14f949cb75SHu Haowen===============
15f949cb75SHu Haowen
16f949cb75SHu Haowen基於DAMON的回收(DAMON_RECLAIM)是一個靜態的內核模塊,旨在用於輕度內存壓力下的主動和輕
17f949cb75SHu Haowen量級的回收。它的目的不是取代基於LRU列表的頁面回收,而是有選擇地用於不同程度的內存壓力和要
18f949cb75SHu Haowen求。
19f949cb75SHu Haowen
20f949cb75SHu Haowen哪些地方需要主動回收?
21f949cb75SHu Haowen======================
22f949cb75SHu Haowen
23f949cb75SHu Haowen在一般的內存超量使用(over-committed systems,虛擬化相關術語)的系統上,主動回收冷頁
24f949cb75SHu Haowen有助於節省內存和減少延遲高峯,這些延遲是由直接回收進程或kswapd的CPU消耗引起的,同時只產
25f949cb75SHu Haowen生最小的性能下降 [1]_ [2]_ 。
26f949cb75SHu Haowen
27f949cb75SHu Haowen基於空閒頁報告 [3]_ 的內存過度承諾的虛擬化系統就是很好的例子。在這樣的系統中,客戶機
28f949cb75SHu Haowen向主機報告他們的空閒內存,而主機則將報告的內存重新分配給其他客戶。因此,系統的內存得到了充
29f949cb75SHu Haowen分的利用。然而,客戶可能不那麼節省內存,主要是因爲一些內核子系統和用戶空間應用程序被設計爲
30f949cb75SHu Haowen使用盡可能多的內存。然後,客戶機可能只向主機報告少量的內存是空閒的,導致系統的內存利用率下降。
31f949cb75SHu Haowen在客戶中運行主動回收可以緩解這個問題。
32f949cb75SHu Haowen
33f949cb75SHu Haowen它是如何工作的?
34f949cb75SHu Haowen================
35f949cb75SHu Haowen
36f949cb75SHu HaowenDAMON_RECLAIM找到在特定時間內沒有被訪問的內存區域並分頁。爲了避免它在分頁操作中消耗過多
37f949cb75SHu Haowen的CPU,可以配置一個速度限制。在這個速度限制下,它首先分頁出那些沒有被訪問過的內存區域。系
38f949cb75SHu Haowen統管理員還可以配置在什麼情況下這個方案應該自動激活和停用三個內存壓力水位。
39f949cb75SHu Haowen
40f949cb75SHu Haowen接口: 模塊參數
41f949cb75SHu Haowen==============
42f949cb75SHu Haowen
43f949cb75SHu Haowen要使用這個功能,你首先要確保你的系統運行在一個以 ``CONFIG_DAMON_RECLAIM=y`` 構建的內
44f949cb75SHu Haowen核上。
45f949cb75SHu Haowen
46f949cb75SHu Haowen爲了讓系統管理員啓用或禁用它,併爲給定的系統進行調整,DAMON_RECLAIM利用了模塊參數。也就
47f949cb75SHu Haowen是說,你可以把 ``damon_reclaim.<parameter>=<value>`` 放在內核啓動命令行上,或者把
48f949cb75SHu Haowen適當的值寫入 ``/sys/module/damon_reclaim/parameters/<parameter>`` 文件。
49f949cb75SHu Haowen
50f949cb75SHu Haowen下面是每個參數的描述。
51f949cb75SHu Haowen
52f949cb75SHu Haowenenabled
53f949cb75SHu Haowen-------
54f949cb75SHu Haowen
55f949cb75SHu Haowen啓用或禁用DAMON_RECLAIM。
56f949cb75SHu Haowen
57f949cb75SHu Haowen你可以通過把這個參數的值設置爲 ``Y`` 來啓用DAMON_RCLAIM,把它設置爲 ``N`` 可以禁用
58f949cb75SHu HaowenDAMON_RECLAIM。注意,由於基於水位的激活條件,DAMON_RECLAIM不能進行真正的監測和回收。
59f949cb75SHu Haowen這一點請參考下面關於水位參數的描述。
60f949cb75SHu Haowen
61f949cb75SHu Haowenmin_age
62f949cb75SHu Haowen-------
63f949cb75SHu Haowen
64f949cb75SHu Haowen識別冷內存區域的時間閾值,單位是微秒。
65f949cb75SHu Haowen
66f949cb75SHu Haowen如果一個內存區域在這個時間或更長的時間內沒有被訪問,DAMON_RECLAIM會將該區域識別爲冷的,
67f949cb75SHu Haowen並回收它。
68f949cb75SHu Haowen
69f949cb75SHu Haowen默認爲120秒。
70f949cb75SHu Haowen
71f949cb75SHu Haowenquota_ms
72f949cb75SHu Haowen--------
73f949cb75SHu Haowen
74f949cb75SHu Haowen回收的時間限制,以毫秒爲單位。
75f949cb75SHu Haowen
76f949cb75SHu HaowenDAMON_RECLAIM 試圖在一個時間窗口(quota_reset_interval_ms)內只使用到這個時間,以
77f949cb75SHu Haowen嘗試回收冷頁。這可以用來限制DAMON_RECLAIM的CPU消耗。如果該值爲零,則該限制被禁用。
78f949cb75SHu Haowen
79f949cb75SHu Haowen默認爲10ms。
80f949cb75SHu Haowen
81f949cb75SHu Haowenquota_sz
82f949cb75SHu Haowen--------
83f949cb75SHu Haowen
84f949cb75SHu Haowen回收的內存大小限制,單位爲字節。
85f949cb75SHu Haowen
86f949cb75SHu HaowenDAMON_RECLAIM 收取在一個時間窗口(quota_reset_interval_ms)內試圖回收的內存量,並
87f949cb75SHu Haowen使其不超過這個限制。這可以用來限制CPU和IO的消耗。如果該值爲零,則限制被禁用。
88f949cb75SHu Haowen
89f949cb75SHu Haowen默認情況下是128 MiB。
90f949cb75SHu Haowen
91f949cb75SHu Haowenquota_reset_interval_ms
92f949cb75SHu Haowen-----------------------
93f949cb75SHu Haowen
94f949cb75SHu Haowen時間/大小配額收取重置間隔,單位爲毫秒。
95f949cb75SHu Haowen
96f949cb75SHu Haowen時間(quota_ms)和大小(quota_sz)的配額的目標重置間隔。也就是說,DAMON_RECLAIM在
97f949cb75SHu Haowen嘗試回收‘不’超過quota_ms毫秒或quota_sz字節的內存。
98f949cb75SHu Haowen
99f949cb75SHu Haowen默認爲1秒。
100f949cb75SHu Haowen
101f949cb75SHu Haowenwmarks_interval
102f949cb75SHu Haowen---------------
103f949cb75SHu Haowen
104f949cb75SHu Haowen當DAMON_RECLAIM被啓用但由於其水位規則而不活躍時,在檢查水位之前的最小等待時間。
105f949cb75SHu Haowen
106f949cb75SHu Haowenwmarks_high
107f949cb75SHu Haowen-----------
108f949cb75SHu Haowen
109f949cb75SHu Haowen高水位的可用內存率(每千字節)。
110f949cb75SHu Haowen
111f949cb75SHu Haowen如果系統的可用內存(以每千字節爲單位)高於這個數值,DAMON_RECLAIM就會變得不活躍,所以
112f949cb75SHu Haowen它什麼也不做,只是定期檢查水位。
113f949cb75SHu Haowen
114f949cb75SHu Haowenwmarks_mid
115f949cb75SHu Haowen----------
116f949cb75SHu Haowen
117f949cb75SHu Haowen中間水位的可用內存率(每千字節)。
118f949cb75SHu Haowen
119f949cb75SHu Haowen如果系統的空閒內存(以每千字節爲單位)在這個和低水位線之間,DAMON_RECLAIM就會被激活,
120f949cb75SHu Haowen因此開始監測和回收。
121f949cb75SHu Haowen
122f949cb75SHu Haowenwmarks_low
123f949cb75SHu Haowen----------
124f949cb75SHu Haowen
125f949cb75SHu Haowen低水位的可用內存率(每千字節)。
126f949cb75SHu Haowen
127f949cb75SHu Haowen如果系統的空閒內存(以每千字節爲單位)低於這個數值,DAMON_RECLAIM就會變得不活躍,所以
128f949cb75SHu Haowen它除了定期檢查水位外什麼都不做。在這種情況下,系統會退回到基於LRU列表的頁面粒度回收邏輯。
129f949cb75SHu Haowen
130f949cb75SHu Haowensample_interval
131f949cb75SHu Haowen---------------
132f949cb75SHu Haowen
133f949cb75SHu Haowen監測的採樣間隔,單位是微秒。
134f949cb75SHu Haowen
135f949cb75SHu HaowenDAMON用於監測冷內存的採樣間隔。更多細節請參考DAMON文檔 (:doc:`usage`) 。
136f949cb75SHu Haowen
137f949cb75SHu Haowenaggr_interval
138f949cb75SHu Haowen-------------
139f949cb75SHu Haowen
140f949cb75SHu Haowen監測的聚集間隔,單位是微秒。
141f949cb75SHu Haowen
142f949cb75SHu HaowenDAMON對冷內存監測的聚集間隔。更多細節請參考DAMON文檔 (:doc:`usage`)。
143f949cb75SHu Haowen
144f949cb75SHu Haowenmin_nr_regions
145f949cb75SHu Haowen--------------
146f949cb75SHu Haowen
147f949cb75SHu Haowen監測區域的最小數量。
148f949cb75SHu Haowen
149f949cb75SHu HaowenDAMON用於冷內存監測的最小監測區域數。這可以用來設置監測質量的下限。但是,設
150f949cb75SHu Haowen置的太高可能會導致監測開銷的增加。更多細節請參考DAMON文檔 (:doc:`usage`) 。
151f949cb75SHu Haowen
152f949cb75SHu Haowenmax_nr_regions
153f949cb75SHu Haowen--------------
154f949cb75SHu Haowen
155f949cb75SHu Haowen監測區域的最大數量。
156f949cb75SHu Haowen
157f949cb75SHu HaowenDAMON用於冷內存監測的最大監測區域數。這可以用來設置監測開銷的上限值。但是,
158f949cb75SHu Haowen設置得太低可能會導致監測質量不好。更多細節請參考DAMON文檔 (:doc:`usage`) 。
159f949cb75SHu Haowen
160f949cb75SHu Haowenmonitor_region_start
161f949cb75SHu Haowen--------------------
162f949cb75SHu Haowen
163f949cb75SHu Haowen目標內存區域的物理地址起點。
164f949cb75SHu Haowen
165f949cb75SHu HaowenDAMON_RECLAIM將對其進行工作的內存區域的起始物理地址。也就是說,DAMON_RECLAIM
166f949cb75SHu Haowen將在這個區域中找到冷的內存區域並進行回收。默認情況下,該區域使用最大系統內存區。
167f949cb75SHu Haowen
168f949cb75SHu Haowenmonitor_region_end
169f949cb75SHu Haowen------------------
170f949cb75SHu Haowen
171f949cb75SHu Haowen目標內存區域的結束物理地址。
172f949cb75SHu Haowen
173f949cb75SHu HaowenDAMON_RECLAIM將對其進行工作的內存區域的末端物理地址。也就是說,DAMON_RECLAIM將
174f949cb75SHu Haowen在這個區域內找到冷的內存區域並進行回收。默認情況下,該區域使用最大系統內存區。
175f949cb75SHu Haowen
176f949cb75SHu Haowenkdamond_pid
177f949cb75SHu Haowen-----------
178f949cb75SHu Haowen
179f949cb75SHu HaowenDAMON線程的PID。
180f949cb75SHu Haowen
181f949cb75SHu Haowen如果DAMON_RECLAIM被啓用,這將成爲工作線程的PID。否則,爲-1。
182f949cb75SHu Haowen
183f949cb75SHu Haowennr_reclaim_tried_regions
184f949cb75SHu Haowen------------------------
185f949cb75SHu Haowen
186f949cb75SHu Haowen試圖通過DAMON_RECLAIM回收的內存區域的數量。
187f949cb75SHu Haowen
188f949cb75SHu Haowenbytes_reclaim_tried_regions
189f949cb75SHu Haowen---------------------------
190f949cb75SHu Haowen
191f949cb75SHu Haowen試圖通過DAMON_RECLAIM回收的內存區域的總字節數。
192f949cb75SHu Haowen
193f949cb75SHu Haowennr_reclaimed_regions
194f949cb75SHu Haowen--------------------
195f949cb75SHu Haowen
196f949cb75SHu Haowen通過DAMON_RECLAIM成功回收的內存區域的數量。
197f949cb75SHu Haowen
198f949cb75SHu Haowenbytes_reclaimed_regions
199f949cb75SHu Haowen-----------------------
200f949cb75SHu Haowen
201f949cb75SHu Haowen通過DAMON_RECLAIM成功回收的內存區域的總字節數。
202f949cb75SHu Haowen
203f949cb75SHu Haowennr_quota_exceeds
204f949cb75SHu Haowen----------------
205f949cb75SHu Haowen
206f949cb75SHu Haowen超過時間/空間配額限制的次數。
207f949cb75SHu Haowen
208f949cb75SHu Haowen例子
209f949cb75SHu Haowen====
210f949cb75SHu Haowen
211f949cb75SHu Haowen下面的運行示例命令使DAMON_RECLAIM找到30秒或更長時間沒有訪問的內存區域並“回收”?
212f949cb75SHu Haowen爲了避免DAMON_RECLAIM在分頁操作中消耗過多的CPU時間,回收被限制在每秒1GiB以內。
213f949cb75SHu Haowen它還要求DAMON_RECLAIM在系統的可用內存率超過50%時不做任何事情,但如果它低於40%時
214f949cb75SHu Haowen就開始真正的工作。如果DAMON_RECLAIM沒有取得進展,因此空閒內存率低於20%,它會要求
215f949cb75SHu HaowenDAMON_RECLAIM再次什麼都不做,這樣我們就可以退回到基於LRU列表的頁面粒度回收了::
216f949cb75SHu Haowen
217f949cb75SHu Haowen    # cd /sys/module/damon_reclaim/parameters
218f949cb75SHu Haowen    # echo 30000000 > min_age
219f949cb75SHu Haowen    # echo $((1 * 1024 * 1024 * 1024)) > quota_sz
220f949cb75SHu Haowen    # echo 1000 > quota_reset_interval_ms
221f949cb75SHu Haowen    # echo 500 > wmarks_high
222f949cb75SHu Haowen    # echo 400 > wmarks_mid
223f949cb75SHu Haowen    # echo 200 > wmarks_low
224f949cb75SHu Haowen    # echo Y > enabled
225f949cb75SHu Haowen
226f949cb75SHu Haowen.. [1] https://research.google/pubs/pub48551/
227f949cb75SHu Haowen.. [2] https://lwn.net/Articles/787611/
228f949cb75SHu Haowen.. [3] https://www.kernel.org/doc/html/latest/mm/free_page_reporting.html
229f949cb75SHu Haowen
230