概述

本節介紹 CXL Type-3 記憶體裝置的配置過程,以及最終如何透過核心的頁面分配器將其作為 DAX 裝置或普通記憶體頁面暴露給使用者。

標有專案符號的部分是生成某些核心物件的點。

  1. 早期啟動

  1. BIOS、構建和啟動引數

  1. EFI_MEMORY_SP

  2. CONFIG_EFI_SOFT_RESERVE

  3. CONFIG_MHP_DEFAULT_ONLINE_TYPE

  4. nosoftreserve

  1. 記憶體對映建立

  1. EFI 記憶體對映 / E820 諮詢軟保留

  • CXL 記憶體被預留由 CXL 驅動程式處理

  • 為 CFMWS 條目建立軟保留 IO 資源

  1. NUMA 節點建立

  • 節點從 ACPI CEDT CFMWS 和 SRAT 鄰近域 (PXM) 建立

  1. 記憶體層建立

  • 使用所有節點建立一個預設的 memory_tier。

  1. 連續記憶體分配

  • 任何請求的 CMA 都從線上節點分配

  1. 初始化完成,驅動程式開始探測

  1. ACPI 和 PCI 驅動程式

  1. 檢測 PCI 裝置是否為 CXL,將其標記為由 CXL 驅動程式探測

  1. CXL 驅動程式操作

  1. 基本裝置建立

  • 建立 root、埠和 memdev 裝置

  • CEDT CFMWS IO 資源建立

  1. 解碼器建立

  • 建立 root、交換機和端點解碼器

  1. 邏輯裝置建立

  • 建立 memory_region 和端點裝置

  1. 裝置彼此關聯

  • 如果使用自動解碼器(BIOS 程式設計的解碼器),驅動程式會驗證配置,構建關聯,並在探測時鎖定配置。

  • 如果使用者配置,則驗證和關聯在解碼器提交時構建。

  1. 區域作為 DAX 區域公開

  • 建立 dax_region

  • 透過 DAX 驅動程式建立 DAX 裝置

  1. DAX 驅動程式操作

  1. DAX 驅動程式將 DAX 區域作為兩種 dax 裝置模式之一公開

  • kmem - dax 裝置轉換為熱插拔記憶體塊

    • DAX kmem IO 資源建立

  • hmem - dax 裝置保留為 daxdev,可以作為檔案訪問。

    • 如果是 hmem,則到此結束。

  1. DAX kmem 將記憶體區域公開給記憶體熱插拔,以作為“驅動程式管理的記憶體”新增到頁面分配器

  1. 記憶體熱插拔

  1. mhp 元件將 dax 裝置記憶體區域作為多個記憶體塊公開給頁面分配器

  • 塊出現在 /sys/bus/memory/devices 中並連結到 NUMA 節點

  1. 塊已聯機到請求的區域(NORMAL 或 MOVABLE)

  • 記憶體被標記為“驅動程式管理”,以避免 kexec 將其用作核心更新的區域