概述¶
本節介紹 CXL Type-3 記憶體裝置的配置過程,以及最終如何透過核心的頁面分配器將其作為 DAX 裝置或普通記憶體頁面暴露給使用者。
標有專案符號的部分是生成某些核心物件的點。
早期啟動
BIOS、構建和啟動引數
EFI_MEMORY_SP
CONFIG_EFI_SOFT_RESERVE
CONFIG_MHP_DEFAULT_ONLINE_TYPE
nosoftreserve
記憶體對映建立
EFI 記憶體對映 / E820 諮詢軟保留
CXL 記憶體被預留由 CXL 驅動程式處理
為 CFMWS 條目建立軟保留 IO 資源
NUMA 節點建立
節點從 ACPI CEDT CFMWS 和 SRAT 鄰近域 (PXM) 建立
記憶體層建立
使用所有節點建立一個預設的 memory_tier。
連續記憶體分配
任何請求的 CMA 都從線上節點分配
初始化完成,驅動程式開始探測
ACPI 和 PCI 驅動程式
檢測 PCI 裝置是否為 CXL,將其標記為由 CXL 驅動程式探測
CXL 驅動程式操作
基本裝置建立
建立 root、埠和 memdev 裝置
CEDT CFMWS IO 資源建立
解碼器建立
建立 root、交換機和端點解碼器
邏輯裝置建立
建立 memory_region 和端點裝置
裝置彼此關聯
如果使用自動解碼器(BIOS 程式設計的解碼器),驅動程式會驗證配置,構建關聯,並在探測時鎖定配置。
如果使用者配置,則驗證和關聯在解碼器提交時構建。
區域作為 DAX 區域公開
建立 dax_region
透過 DAX 驅動程式建立 DAX 裝置
DAX 驅動程式操作
DAX 驅動程式將 DAX 區域作為兩種 dax 裝置模式之一公開
kmem - dax 裝置轉換為熱插拔記憶體塊
DAX kmem IO 資源建立
hmem - dax 裝置保留為 daxdev,可以作為檔案訪問。
如果是 hmem,則到此結束。
DAX kmem 將記憶體區域公開給記憶體熱插拔,以作為“驅動程式管理的記憶體”新增到頁面分配器
記憶體熱插拔
mhp 元件將 dax 裝置記憶體區域作為多個記憶體塊公開給頁面分配器
塊出現在
/sys/bus/memory/devices中並連結到 NUMA 節點
塊已聯機到請求的區域(NORMAL 或 MOVABLE)
記憶體被標記為“驅動程式管理”,以避免 kexec 將其用作核心更新的區域