iT邦幫忙

2021 iThome 鐵人賽

DAY 18
1

直接看下去!

文件

ZONE_DEVICE
===========
`ZONE_DEVICE` 這個基礎設施建立在 `SPARSEMEM_VMEMMAP` 之上,
用以提供 `struct page` `mem_map` 給設備驅動程序所使用的實體記憶體區塊。 
`ZONE_DEVICE` 的 “device” 指的是,標示這些實體記憶體區塊的 page 物件永遠不會被標記成"可使用",
並且對該區段分頁的存取必須是針對設備的,而非只是標記為固定記憶體(pinned memory)以供主動操作。
`ZONE_DEVICE`,通過 :c:func:`devm_memremap_pages` 執行記憶體熱插拔來啟用 
:c:func:`pfn_to_page`、:c:func:`page_to_pfn`,和 :c:func:`get_user_pages` 這些 API,用於給定的 pfns 範圍。
由於分頁的引用計數(reference count)永遠不會低於 1 ,
這些分頁永遠不會被標為可使用的記憶體,
而分頁的 `struct list_head lru` 空間被重新利用於反向存取映射記憶體的主機設備 / 驅動程序。

`SPARSEMEM` 將記憶體表示為區段的集合,選擇性地收集到記憶體區塊中,
而 `ZONE_DEVICE` 使用者則有使用較小粒度(granularity) 來填充 `mem_map` 的需求。
鑑於 `ZONE_DEVICE` 記憶體永遠不會被標記為可使用,
它也就永遠不會受限於該記憶體範圍被透過 sysfs 作用在記憶體區塊邊界上的熱插拔 API 所"公開"(exposed)。
這樣的實作是由於沒有 user-api 的限制,才使得大小比區段還小的(sub-section sized)記憶體範圍,
能夠被記憶體熱插拔的上半部(top-half) :c:func:`arch_add_memory` 所標記。
支援小區段(sub-section) 使得 :c:func:`devm_memremap_pages` 能使用 2MB 大小,
作為跨架構(cross-arch) 的通用對齊粒度。

`ZONE_DEVICE` 的使用者有:

* pmem: 透過 DAX 映射平台的永久性記憶體作為 direct-I/O 的作用對象。

* hmm: 用 `->page_fault()` 和 `->page_free()` 這兩個回呼函式(callback function) 
  來擴展 `ZONE_DEVICE`,使得設備驅動程式能夠和裝置記憶體相關的記憶體管理事件協作,
  通常是 GPU 的記憶體。見Documentation/vm/hmm.rst。

* p2pdma: 創建 `struct page` 物件使得在 PCI/-E 拓樸下的同儕裝置(peer devices) 
  能夠彼此協調 direct-DMA 操作,像是繞過主機記憶體。

我的理解

  • ZONE_DEVICE 是構建於 SPARSEMEM 之上的 feature,用來標示 device 的記憶體,感覺上是包含 device 本身有的記憶體(GPU memory)、以及 device 所需要用到的 MMIO。
    • ZONE DEVICE 還提供比 SPARSEMEM 還更小 granularity 的記憶體物件大小
    • 記憶體熱插拔指的是,可以動態的增加(插上)或減少(拔下) 實體記憶體
    • top-half 和中斷相關的 top half 應該是相同意思,所以 arch_add_memory 應該是記憶體熱插拔的上半部分
  • DAX 指的是 Direct Access for files,跟 DIO 應該有相同的意涵,都是讓 user space 可以繞過 page cache 直接存取永久性記憶體上的資訊
  • HMM 指的是 Heterogeneous Memory Management,最常見的應該就屬 GPU 吧
  • p2pdma 感覺是可以支援,例如:2 個 GPU 之間的資料互傳,而不經由主機

後記

文件真的好難翻譯的精確,尤其是很多文件中的描述,都是幾乎不曾看過的行為,常常需要查閱一下程式碼或是翻閱相關的文章來做定奪,希望大家有機會的話,也可以幫我看看是否翻譯的恰當,或是有什麼需要修改的地方,也麻煩跟我說一聲歐!

那今天就簡單的紀錄到這裡,明天來做這篇文件的 summary 吧!感謝大家,明天見!


上一篇
# Day 17 Physical Memory Model (二)
下一篇
# Day 19 Physical Memory Model (Summary)
系列文
閱讀 Linux Kernel 文件30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言