iT邦幫忙

2021 iThome 鐵人賽

DAY 29
1
Software Development

閱讀 Linux Kernel 文件系列 第 29

# Day 29 Page Migration (四)

文件


監控遷移
========

下列事件 (計數器) 可以用來監控分頁遷移。

1. PGMIGRATE_SUCCESS: 一般分頁成功遷移。
   每一個計數表示一個分頁被遷移。如果分頁是一個 non-THP 分頁,
   則計數器是以 1 為單位做增加。如果是一個 THP 分頁,
   則計數器是增加該 THP 分頁的子分頁數量。
   舉例來說,若遷移一個 2 MB 的 THP,其基本分頁 (子分頁) 大小為 4KB,
   則這個計數器增加 512。

2. PGMIGRATE_FAIL: 一般分頁遷移失敗。
   與上述 PGMIGRATE_SUCCESS 有相同的計數規則:
   如果是 THP 這個計數器會增加子分頁的數量。
   
3. THP_MIGRATION_SUCCESS: 一個 THP 被成功的遷移且並沒有被拆分。

4. THP_MIGRATION_FAIL: 一個 THP 無法被遷移也無法被拆分。

5. THP_MIGRATION_SPLIT: 一個 THP 被遷移,但不是完整的遷移:
   首先,這個 THP 先被拆分。拆分後,重新嘗試遷移拆分後的子分頁。

THP_MIGRATION_* 事件也會更新適當的 PGMIGRATE_SUCCESS 或 PGMIGRATE_FAIL 事件。
例如,一個 THP 遷移失敗會導致 THP_MIGRATION_FAIL 和 PGMIGRATE_FAIL 增加。

Christoph Lameter, May 8, 2006.
Minchan Kim, Mar 28, 2016.

我的理解

  • THP 是 transparent huge page 一個用於優化查詢 TLB 行為的記憶體子系統 feature。

這份文件描述了 page migration 的相關知識:

  • 首先描述 page migration 的目的:
    • 原本的意圖:優化 NUMA 系統下,記憶體的存取延遲。
    • Heterogeneous Memory Management 剛好也有類似的 migration 需求
  • 接下來是 page migration 的使用者和使用方法:
    • numactl 這套工具底層使用的就是 migrate_pages() 這個 syscall
    • cpuset 這個 feature 可以達到當一個 task 被移動到特定的 cpuset 中時,自動的遷移該 task 的分頁
    • 在 kernel 中如何使用
      • 先將要遷移的分頁從 LRU list 中剔除
      • 實作一個 new_page_t 類型的函數
      • 呼叫 migrate_pages
  • 描述 page migration 的運作過程
  • 再來描述 page migration 也支援 non-LRU page 的 page migration
    • memory compaction(記憶體規整) 也是 page migration 的使用者
    • 由於 non-LRU page 也是潛在的 page migration 使用者,所以新增了 non-LRU page 的支援
      • driver 必須自行實作 isolate_pagemigratepageputback_page 這三個函數,並利用 PG_movablePG_isolated 這兩個 flags
  • 最後描述的是,page migration 進行的事件計數器,若成功進行遷移會有哪些計數器增加、若失敗則有另外哪些,可以透過這些計數器來達到 page migration 結果的監控

參考資料


上一篇
# Day 28 Page Migration (三)
下一篇
# Day 30 Commencement: I open at the close
系列文
閱讀 Linux Kernel 文件30

尚未有邦友留言

立即登入留言