設計¶
執行模型和資料結構¶
包括監控請求規範和基於 DAMON 的操作方案在內的監控相關資訊儲存在一個名為 DAMON context 的資料結構中。DAMON 透過一個名為 kdamond 的核心執行緒執行每個上下文。多個 kdamond 可以並行執行,用於不同型別的監控。
要了解使用者空間如何進行配置並啟動/停止 DAMON,請參閱DAMON sysfs 介面文件。
整體架構¶
DAMON 子系統透過三個層次進行配置,包括:
操作集層¶
為了資料訪問監控和額外的低階工作,DAMON 需要一組針對特定操作的實現,這些實現依賴於給定的目標地址空間併為其最佳化。例如,下面兩個用於訪問監控的操作是地址空間相關的。
識別地址空間的監控目標地址範圍。
檢查目標空間中特定地址範圍的訪問。
DAMON 將這些實現整合到一個名為 DAMON 操作集的層中,並定義了它與上層之間的介面。上層專門用於 DAMON 的核心邏輯,包括監控精度和開銷控制機制。
因此,透過配置核心邏輯以使用適當的操作集,DAMON 可以輕鬆地擴充套件到任何地址空間和/或可用的硬體功能。如果沒有可用於給定目的的操作集,可以遵循層間介面實現新的操作集。
例如,物理記憶體、虛擬記憶體、交換空間、特定程序的記憶體、NUMA 節點、檔案和後端記憶體裝置都將得到支援。此外,如果某些架構或裝置支援特殊的最佳化訪問檢查功能,這些功能將易於配置。
DAMON 目前提供以下三個操作集。以下兩個小節描述了它們的工作方式。
vaddr:監控特定程序的虛擬地址空間
fvaddr:監控固定虛擬地址範圍
paddr:監控系統的物理地址空間
要了解使用者空間如何透過DAMON sysfs 介面進行配置,請參閱文件中operations檔案部分。
基於 VMA 的目標地址範圍構建¶
vaddr DAMON 操作集的一種機制,可自動初始化和更新監控目標地址區域,以覆蓋目標程序的整個記憶體對映。
此機制僅適用於 vaddr 操作集。對於 fvaddr 和 paddr 操作集,使用者需要手動設定監控目標地址範圍。
程序的超大虛擬地址空間中只有小部分對映到物理記憶體並被訪問。因此,跟蹤未對映的地址區域是浪費的。然而,由於 DAMON 可以使用自適應區域調整機制處理一定程度的噪聲,所以並不嚴格要求跟蹤每個對映,甚至在某些情況下可能帶來高開銷。也就是說,監控目標內過大的未對映區域應該被移除,以免佔用自適應機制的時間。
因此,此實現將複雜的對映轉換為三個不同的區域,覆蓋地址空間中每個對映區域。這三個區域之間的兩個間隙是給定地址空間中最大的兩個未對映區域。這兩個最大的未對映區域在大多數情況下將是堆和最上層 mmap()ed 區域之間的間隙,以及最下層 mmap()ed 區域和棧之間的間隙。由於這些間隙在通常的地址空間中異常巨大,排除這些就足以實現合理的權衡。下面將詳細展示這一點
<heap>
<BIG UNMAPPED REGION 1>
<uppermost mmap()-ed region>
(small mmap()-ed regions and munmap()-ed regions)
<lowermost mmap()-ed region>
<BIG UNMAPPED REGION 2>
<stack>
基於 PTE Accessed 位點的訪問檢查¶
物理和虛擬地址空間的兩種實現都使用 PTE Accessed 位點進行基本訪問檢查。唯一的區別是根據地址找到相關 PTE Accessed 位點的方式。虛擬地址的實現會遍歷目標任務的頁表以查詢地址,而物理地址的實現會遍歷所有對映到該地址的頁表。透過這種方式,實現會找到並清除下一個取樣目標地址的位點,並檢查在取樣週期結束後該位點是否再次設定。這可能會干擾使用 Accessed 位點的其他核心子系統,即空閒頁跟蹤和回收邏輯。DAMON 不採取任何措施來避免干擾空閒頁跟蹤,因此處理這種干擾是系統管理員的責任。然而,它透過使用 PG_idle 和 PG_young 頁標誌解決了與回收邏輯的衝突,就像空閒頁跟蹤所做的那樣。
核心邏輯¶
監控¶
以下四節描述了每個 DAMON 核心機制以及五個監控屬性:取樣間隔、聚合間隔、更新間隔、最小區域數和最大區域數。
要了解使用者空間如何透過DAMON sysfs 介面設定屬性,請參閱文件的monitoring_attrs部分。
訪問頻率監控¶
DAMON 的輸出顯示在給定持續時間內,哪些頁面被訪問的頻率是多少。訪問頻率的解析度透過設定 sampling interval 和 aggregation interval 來控制。具體來說,DAMON 會在每個 sampling interval 檢查每個頁面的訪問情況並聚合結果。換句話說,它統計每個頁面的訪問次數。在每個 aggregation interval 過去後,DAMON 會呼叫使用者之前註冊的回撥函式,以便使用者可以讀取聚合結果,然後清除結果。這可以用下面的簡單虛擬碼來描述
while monitoring_on:
for page in monitoring_target:
if accessed(page):
nr_accesses[page] += 1
if time() % aggregation_interval == 0:
for callback in user_registered_callbacks:
callback(monitoring_target, nr_accesses)
for page in monitoring_target:
nr_accesses[page] = 0
sleep(sampling interval)
隨著目標工作負載大小的增長,這種機制的監控開銷將任意增加。
基於區域的取樣¶
為了避免開銷的無限制增長,DAMON 將假定具有相同訪問頻率的相鄰頁面分組到一個區域中。只要假設(區域中的頁面具有相同的訪問頻率)保持不變,區域中只需檢查一個頁面。因此,對於每個 sampling interval,DAMON 會隨機選擇每個區域中的一個頁面,等待一個 sampling interval,檢查該頁面在此期間是否被訪問,如果被訪問,則增加該區域的訪問頻率計數器。該計數器被稱為該區域的 nr_accesses。因此,監控開銷可以透過設定區域數量來控制。DAMON 允許使用者為權衡設定最小和最大區域數量。
然而,如果假設不能保證,該方案就無法保持輸出的質量。
自適應區域調整¶
即使最初的監控目標區域在某種程度上構建得很好,能夠滿足假設(同一區域中的頁面具有相似的訪問頻率),資料訪問模式也可能動態變化。這將導致監控質量下降。為了儘可能保持假設,DAMON 根據每個區域的訪問頻率自適應地合併和分割區域。
對於每個 aggregation interval,它會比較相鄰區域的訪問頻率 (nr_accesses)。如果差異很小,並且兩個區域的大小總和小於總區域大小除以 minimum number of regions 的值,DAMON 會合並這兩個區域。如果合併後總區域的數量仍然高於 maximum number of regions,它會重複合併,並增加訪問頻率差異閾值,直到達到區域數量上限,或者閾值變得高於可能的最大值(aggregation interval 除以 sampling interval)。然後,在報告並清除每個區域的聚合訪問頻率後,如果分割後總區域的數量不會超過使用者指定的區域最大數量,它會將每個區域分割成兩個或三個區域。
透過這種方式,DAMON 在保持使用者為其權衡設定的界限的同時,提供了其最佳的質量和最小的開銷。
年齡追蹤¶
透過分析監控結果,使用者還可以發現一個區域當前的訪問模式已保持了多長時間。這對於更好地理解訪問模式很有用。例如,可以利用訪問頻率和最近性來實現頁面放置演算法。為了簡化這種訪問模式持續時間分析,DAMON 在每個區域中維護另一個名為 age 的計數器。對於每個 aggregation interval,DAMON 檢查區域的大小和訪問頻率 (nr_accesses) 是否發生了顯著變化。如果發生了變化,計數器將重置為零。否則,計數器將增加。
動態目標空間更新處理¶
監控目標地址範圍可能會動態改變。例如,虛擬記憶體可以動態地對映和取消對映。物理記憶體可以熱插拔。
由於在某些情況下變化可能非常頻繁,DAMON 允許監控操作檢查動態變化,包括記憶體對映變化,並僅在使用者指定的每個時間間隔(更新間隔)內將其應用於監控操作相關的資料結構,例如抽象的監控目標記憶體區域。
使用者空間可以透過 DAMON sysfs 介面和/或追蹤點獲取監控結果。更多詳細資訊,請分別參閱DAMOS 嘗試區域和追蹤點監控結果的文件。
監控引數調優指南¶
簡而言之,設定 aggregation interval 以捕獲用於目的的有意義的訪問量。訪問量可以使用聚合監控結果快照中的 nr_accesses 和 age 區域進行測量。在許多情況下,間隔的預設值 100ms 被證明太短。將 sampling interval 設定為與 aggregation interval 成比例。預設情況下,建議比例為 1/20。
聚合間隔應設定為工作負載在間隔內能產生用於監控目的的訪問量的時間間隔。如果間隔太短,只能捕獲少量訪問。結果是,監控結果看起來所有內容都很少被訪問。對於許多目的來說,這將是無用的。然而,如果間隔太長,那麼區域與區域調整機制的收斂時間可能會太長,這取決於給定目的的時間尺度。如果工作負載實際上只進行很少的訪問,但使用者認為用於監控目的的訪問量太高,就可能發生這種情況。對於這種情況,應仔細重新考慮每個聚合間隔內捕獲的目標訪問量。此外,請注意捕獲的訪問量不僅透過nr_accesses表示,還透過age表示。例如,即使監控結果中的每個區域都顯示零nr_accesses,區域仍然可以使用age值(作為最近性資訊)進行區分。
因此,聚合間隔的最佳值取決於工作負載的訪問強度。使用者應根據每個聚合的監控結果快照中捕獲的訪問量來調整間隔。
請注意,該間隔的預設值為 100 毫秒,這在許多情況下,尤其是在大型系統上,都太短了。
取樣間隔定義了每次聚合的解析度。如果設定得太大,監控結果將看起來每個區域都被同樣地很少訪問,或者同樣地頻繁訪問。也就是說,區域變得無法根據訪問模式進行區分,因此結果在許多用例中將是無用的。如果取樣間隔太小,它不會降低解析度,但會增加監控開銷。如果它足夠恰當以提供足以滿足給定目的的監控結果解析度,就不應不必要地進一步降低。建議將其設定為與聚合間隔成比例。預設情況下,比例設定為1/20,並且仍然推薦。
基於手動調優指南,DAMON 提供了更直觀的基於旋鈕的間隔自動調優機制。詳情請參閱該功能的設計文件。
有關基於上述指南的調優示例,請參閱以下文件。
監控間隔自動調優¶
DAMON 根據調優指南思想提供取樣間隔和聚合間隔的自動調優。該調優機制允許使用者在給定時間間隔內,透過 DAMON 設定目標觀察的訪問事件數量。該目標可以由使用者指定為 DAMON 觀察到的訪問事件與在給定聚合次數(aggrs)內測量的事件理論最大數量(access_bp)之比。
DAMON 觀察到的訪問事件是根據 DAMON 區域假設以位元組粒度計算的。例如,如果發現一個大小為 X 位元組、Y 次訪問的區域,則意味著 DAMON 觀察到 X * Y 個訪問事件。該區域的理論最大訪問事件以相同的方式計算,但將 Y 替換為理論最大 nr_accesses,其計算公式為 aggregation interval / sampling interval。
該機制計算 aggrs 次聚合的訪問事件比率,如果觀察到的訪問比率分別低於或高於目標,則以相同的比率增加或減少 取樣間隔 和 聚合間隔。間隔變化的比率取決於當前樣本比率與目標比率之間的距離。
使用者可以進一步設定調優機制可以設定的最小和最大 取樣間隔,使用兩個引數(min_sample_us 和 max_sample_us)。因為調優機制始終以相同的比率改變 取樣間隔 和 聚合間隔,所以每次調優更改後,最小和最大 聚合間隔 可以自動一起設定。
調優預設是關閉的,需要使用者明確設定。根據經驗法則和帕累託原則,建議將訪問樣本比率目標設定為 4%。請注意,帕累託原則(80/20 法則)已應用兩次。也就是說,假設 4%(20% 的 20%)的 DAMON 觀測訪問事件比率(來源)可以捕獲 64%(80% 乘以 80%)的實際訪問事件(結果)。
要了解使用者空間如何透過DAMON sysfs 介面使用此功能,請參閱文件的intervals_goal部分。
操作方案¶
資料訪問監控的一個常見目的是訪問感知系統效率最佳化。例如:
將超過兩分鐘未訪問的記憶體區域分頁出
或者
將大於 2 MiB 且在一分鐘內顯示高訪問頻率的記憶體區域使用 THP。
對於此類方案,一種直接的方法是配置檔案引導最佳化。即,使用 DAMON 獲取工作負載或系統的資料訪問監控結果,透過分析監控結果找到具有特殊特徵的記憶體區域,並對這些區域進行系統操作更改。這些更改可以透過修改或向軟體(應用程式和/或核心)提供建議,或重新配置硬體來實現。離線和線上方法均可使用。
其中,在執行時向核心提供建議將是靈活有效的,因此被廣泛使用。然而,實現此類方案可能會帶來不必要的冗餘和低效率。如果感興趣的型別很常見,則分析可能冗餘。在核心和使用者空間之間交換資訊(包括監控結果和操作建議)可能效率低下。
為了讓使用者透過解除安裝工作來減少這種冗餘和低效率,DAMON 提供了一個名為“基於資料訪問監控的操作方案”(DAMOS)的功能。它允許使用者以高層次指定所需的方案。對於此類規範,DAMON 會啟動監控,找到具有所需訪問模式的區域,並以使用者指定的每次時間間隔(稱為 apply_interval)將使用者所需的操作動作應用於這些區域。
要了解使用者空間如何透過DAMON sysfs 介面設定apply_interval,請參閱文件的apply_interval_us部分。
操作行為¶
使用者希望對其感興趣的區域應用的管理操作。例如,換出頁面、優先選擇用於下一次回收的受害者、建議 khugepaged 合併或拆分,或者什麼也不做,只收集區域的統計資料。
DAMOS 中定義了支援的操作列表,但每個操作的實現都在 DAMON 操作集層中,因為該實現通常取決於監控目標地址空間。例如,用於分頁特定虛擬地址範圍的程式碼將與用於物理地址範圍的程式碼不同。並且監控操作實現集不強制支援列表中的所有操作。因此,特定 DAMOS 操作的可用性取決於選擇哪個操作集一起使用。
支援的操作列表、它們的含義以及支援每個操作的 DAMON 操作集如下:
willneed: 使用MADV_WILLNEED對區域呼叫madvise()。由vaddr和fvaddr操作集支援。
cold: 使用MADV_COLD對區域呼叫madvise()。由vaddr和fvaddr操作集支援。
pageout: 回收區域。由vaddr,fvaddr和paddr操作集支援。
hugepage: 使用MADV_HUGEPAGE對區域呼叫madvise()。由vaddr和fvaddr操作集支援。
nohugepage: 使用MADV_NOHUGEPAGE對區域呼叫madvise()。由vaddr和fvaddr操作集支援。
lru_prio: 在其 LRU 列表中優先考慮該區域。由paddr操作集支援。
lru_deprio: 在其 LRU 列表中降低該區域的優先順序。由paddr操作集支援。
migrate_hot: 遷移區域時優先考慮更熱的區域。由paddr操作集支援。
migrate_cold: 遷移區域時優先考慮更冷的區域。由paddr操作集支援。
stat: 什麼也不做,只統計資料。所有操作集都支援。
將除 stat 之外的操作應用於某個區域被視為改變該區域的特性。因此,當對這些區域應用任何此類操作時,DAMOS 會重置區域的年齡。
要了解使用者空間如何透過DAMON sysfs 介面設定操作,請參閱文件的action部分。
目標訪問模式¶
方案感興趣的訪問模式。這些模式由 DAMON 監控結果提供的屬性構建,特別是大小、訪問頻率和年齡。使用者可以透過設定這三個屬性的最小值和最大值來描述他們感興趣的訪問模式。如果一個區域的三個屬性都在範圍內,DAMOS 會將其歸類為方案感興趣的區域之一。
要了解使用者空間如何透過DAMON sysfs 介面設定訪問模式,請參閱文件的access_pattern部分。
配額¶
DAMOS 上限開銷控制功能。如果目標訪問模式未正確調優,DAMOS 可能會產生高開銷。例如,如果發現一個具有感興趣訪問模式的巨大記憶體區域,將方案操作應用於該巨大區域的所有頁面可能會消耗不可接受的大量系統資源。透過調優訪問模式來防止此類問題可能具有挑戰性,特別是當工作負載的訪問模式高度動態時。
為了緩解這種情況,DAMOS 提供了一個名為“配額”的上限開銷控制功能。它允許使用者指定 DAMOS 用於應用操作的時間上限,和/或在使用者指定的時間段內可以應用操作的最大記憶體區域位元組數。
要了解使用者空間如何透過DAMON sysfs 介面設定基本配額,請參閱文件的quotas部分。
優先順序¶
在配額下做出良好決策的機制。當由於配額限制無法將操作應用於所有感興趣的區域時,DAMOS 會對區域進行優先順序排序,並僅將操作應用於優先順序足夠高的區域,以使其不超過配額。
每個操作的優先順序機制應有所不同。例如,對於頁出方案操作,很少訪問(較冷)的記憶體區域將優先處理。相反,對於大頁合併方案操作,較冷的區域將降低優先順序。因此,每個操作的優先順序機制都在各自的 DAMON 操作集中實現,並與操作一起。
儘管實現取決於 DAMON 操作集,但通常會使用區域的訪問模式屬性來計算優先順序。一些使用者可能希望該機制根據其特定情況進行個性化設定。例如,一些使用者可能希望該機制更看重最近性(age)而不是訪問頻率(nr_accesses)。DAMOS 允許使用者指定每個訪問模式屬性的權重,並將此資訊傳遞給底層機制。然而,權重如何以及是否被尊重取決於底層優先順序機制的實現。
要了解使用者空間如何透過DAMON sysfs 介面設定優先順序權重,請參閱文件的weights部分。
目標導向的反饋驅動自動調優¶
自動反饋驅動的配額調優。使用者無需設定絕對配額值,而是可以指定他們感興趣的指標,以及他們希望該指標達到的目標值。然後 DAMOS 會自動調整相應方案的激程序度(配額)。例如,如果 DAMOS 未能達到目標,DAMOS 會自動增加配額。如果 DAMOS 超額達到目標,它會減少配額。
目標可以透過四個引數指定,即 target_metric、target_value、current_value 和 nid。自動調優機制試圖使 target_metric 的 current_value 與 target_value 相同。
user_input: 使用者提供的值。使用者可以使用他們感興趣的任何指標作為值。使用者主要工作負載的延遲或吞吐量、系統指標如空閒記憶體比例或記憶體壓力停滯時間(PSI)都可以作為例子。請注意,在這種情況下,使用者應自行明確設定current_value。換句話說,使用者應重複提供反饋。some_mem_psi_us: 系統範圍的some記憶體壓力停滯資訊(以微秒為單位),從上次配額重置到下次配額重置之間測量。DAMOS 會自行進行測量,因此使用者只需在初始時設定target_value。換句話說,DAMOS 會進行自我反饋。node_mem_used_bp: 特定 NUMA 節點的已用記憶體比例(以 bp 為單位,即 1/10,000)。node_mem_free_bp: 特定 NUMA 節點的空閒記憶體比例(以 bp 為單位,即 1/10,000)。
nid 是僅在 node_mem_used_bp 和 node_mem_free_bp 中指向特定 NUMA 節點時可選。
要了解使用者空間如何透過DAMON sysfs 介面設定調優目標指標、目標值和/或當前值,請參閱文件的配額目標部分。
水印¶
條件性 DAMOS (停用)自動化。使用者可能希望 DAMOS 僅在特定情況下執行。例如,當有足夠的空閒記憶體得到保證時,執行主動回收方案只會消耗不必要的系統資源。為了避免這種消耗,使用者需要手動監控一些指標,例如空閒記憶體比例,並開啟或關閉 DAMON/DAMOS。
DAMOS 允許使用者使用三個水印來解除安裝此類工作。它允許使用者配置他們感興趣的指標,以及三個水印值,即高、中和低。如果指標值高於高水印或低於低水印,則方案被停用。如果指標低於中水印但高於低水印,則方案被啟用。如果所有方案都被水印停用,則監控也被停用。在這種情況下,DAMON 工作執行緒僅定期檢查水印,因此幾乎不產生任何開銷。
要了解使用者空間如何透過DAMON sysfs 介面設定水印,請參閱文件的watermarks部分。
過濾器¶
非訪問模式的目標記憶體區域過濾。如果使用者執行自己編寫的程式或擁有良好的分析工具,他們可能會比核心瞭解更多資訊,例如未來的訪問模式或對特定型別記憶體的特殊要求。例如,有些使用者可能知道只有匿名頁會影響他們程式的效能。他們也可能有一個延遲關鍵程序列表。
為了讓使用者利用這些特殊知識最佳化 DAMOS 方案,DAMOS 提供了一個名為 DAMOS 過濾器的功能。該功能允許使用者為每個方案設定任意數量的過濾器。每個過濾器指定:
一種記憶體型別 (
type),它是針對該型別記憶體還是除該型別之外的所有記憶體 (
matching),以及它是允許 (include) 還是拒絕 (exclude) 對該記憶體應用方案操作 (
allow)。
為了高效處理過濾器,某些型別的過濾器由核心層處理,而另一些則由操作集處理。在後一種情況下,過濾器的支援型別取決於 DAMON 操作集。對於核心層處理的過濾器,被過濾器排除的記憶體區域不計入方案嘗試該區域的次數。相反,如果記憶體區域被操作集層處理的過濾器過濾,則計入方案嘗試的次數。這種差異會影響統計資料。
當安裝多個過濾器時,首先評估由核心層處理的過濾器組。之後,評估由操作層處理的過濾器組。每個組中的過濾器按安裝順序評估。如果記憶體的一部分與某個過濾器匹配,則忽略後續過濾器。如果記憶體的一部分因為未與任何過濾器匹配而通過了過濾器評估階段,則對其應用方案操作取決於最後一個過濾器的允許型別。如果最後一個過濾器是允許的,則記憶體的一部分將被拒絕,反之亦然。
例如,假設按順序安裝了 1) 一個允許匿名頁的過濾器和 2) 另一個拒絕年輕頁的過濾器。如果一個區域中符合應用方案操作條件的頁面是匿名頁,那麼無論它是否年輕,方案操作都將應用於該頁面,因為它與第一個允許過濾器匹配。如果該頁面不是匿名頁但很年輕,則方案操作將不被應用,因為第二個拒絕過濾器會阻止它。如果該頁面既不是匿名頁也不是年輕頁,則該頁面將透過過濾器評估階段,因為沒有匹配的過濾器,並且操作將應用於該頁面。
目前支援以下 type 過濾器。
- 核心層處理
- addr
應用於屬於給定地址範圍的頁面。
- 目標
應用於屬於給定 DAMON 監控目標的頁面。
- 操作層處理,僅由
paddr操作集支援。 - 匿名
應用於包含未儲存在檔案中的資料的頁面。
- 活動
應用於活動頁面。
- 記憶體控制組
應用於屬於給定 cgroup 的頁面。
- 年輕
應用於上次方案訪問檢查後被訪問過的頁面。
- 大頁大小
應用於在給定大小範圍內管理的頁面。
- 未對映
應用於未對映的頁面。
- 操作層處理,僅由
要了解使用者空間如何透過DAMON sysfs 介面設定過濾器,請參閱文件的filters部分。
統計資訊¶
DAMOS 行為的統計資料,旨在幫助監控、調優和除錯 DAMOS。
從方案執行開始,DAMOS 為每個方案記錄以下統計資訊。
nr_tried: 方案嘗試應用的區域總數。sz_trtied: 方案嘗試應用的區域總大小。sz_ops_filter_passed: 透過操作集層處理的 DAMOS 過濾器的總位元組數。nr_applied: 方案應用的區域總數。sz_applied: 方案應用的區域總大小。qt_exceeds: 方案配額超出的總次數。
“方案嘗試應用於某個區域”意味著 DAMOS 核心邏輯確定該區域符合應用方案操作的條件。訪問模式、配額、水印以及核心邏輯處理的過濾器都可能影響這一點。核心邏輯只會要求底層的操作集對該區域應用操作,因此操作是否真正應用尚不清楚。這就是為什麼它被稱為“嘗試”。
“方案應用於區域”是指操作集已將操作應用於該區域的至少一部分。操作集處理的過濾器,以及操作和該區域頁面的型別都可能影響這一點。例如,如果過濾器設定為排除匿名頁,而該區域只有匿名頁,或者如果操作是pageout而該區域的所有頁都不可回收,則將操作應用於該區域將失敗。
要了解使用者空間如何透過DAMON sysfs 介面讀取統計資訊,請參閱文件的 :ref:`stats <sysfs_stats>`部分。
區域遍歷¶
DAMOS 功能允許使用者訪問剛剛應用 DAMOS 操作的每個區域。利用此功能,DAMON API 允許使用者訪問區域的完整屬性,包括訪問監控結果和透過 DAMOS 過濾器的區域內部記憶體量。DAMON sysfs 介面也允許使用者透過特殊檔案讀取資料。
應用程式程式設計介面¶
適用於核心空間資料訪問感知應用程式的程式設計介面。DAMON 是一個框架,它本身不做任何事情。相反,它只幫助其他核心元件(如子系統和模組)使用 DAMON 的核心功能構建其資料訪問感知應用程式。為此,DAMON 透過其應用程式程式設計介面,即 include/linux/damon.h,將其所有功能暴露給其他核心元件。有關介面的詳細資訊,請參閱 API 文件。
模組¶
由於 DAMON 的核心是一個核心元件框架,它不提供任何直接的使用者空間介面。這些介面應由每個 DAMON API 使用者核心元件實現。DAMON 子系統本身實現了此類 DAMON API 使用者模組,這些模組應用於通用 DAMON 控制和特殊用途的資料訪問感知系統操作,併為使用者空間提供穩定的應用程式二進位制介面 (ABI)。使用者空間可以使用這些介面構建其高效的資料訪問感知應用程式。
通用使用者介面模組¶
DAMON 模組,為執行時通用 DAMON 用途提供使用者空間 ABI。
與其他許多 ABI 一樣,這些模組在“sysfs”等偽檔案系統上建立檔案,允許使用者透過向檔案寫入和讀取來向 DAMON 指定請求並獲取答案。作為對此類 I/O 的響應,DAMON 使用者介面模組透過 DAMON API 控制 DAMON 並檢索使用者請求的結果,然後將結果返回給使用者空間。
這些 ABI 設計用於使用者空間應用程式開發,而非人類手動操作。建議人類使用者使用此類使用者空間工具。一個用 Python 編寫的使用者空間工具可在 Github (https://github.com/damonitor/damo)、Pypi (https://pypistats.org/packages/damo) 和 Fedora (https://packages.fedoraproject.org/pkgs/python-damo/damo/) 上獲取。
目前,此型別有一個模組可用,即“DAMON sysfs 介面”。請參閱 ABI 文件以獲取介面的詳細資訊。
專用訪問感知核心模組¶
DAMON 模組,為特定用途的 DAMON 使用提供使用者空間 ABI。
DAMON 使用者介面模組用於在執行時完全控制所有 DAMON 功能。對於每個專用的系統範圍資料訪問感知系統操作,例如主動回收或 LRU 列表平衡,可以簡化介面,移除不必要的專用旋鈕,並擴充套件到啟動時甚至編譯時控制。DAMON 控制引數的預設值也需要針對該用途進行最佳化。
為了支援此類情況,還有更多 DAMON API 使用者核心模組提供更簡單和最佳化的使用者空間介面。目前,提供了兩個用於主動回收和 LRU 列表操作的模組。更多詳情,請閱讀它們的使用文件(基於 DAMON 的回收和基於 DAMON 的 LRU 列表排序)。