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