IBM 虛擬管理通道核心驅動 (IBMVMC)

作者:

Dave Engebretsen <engebret@us.ibm.com>, Adam Reznechek <adreznec@linux.vnet.ibm.com>, Steven Royer <seroyer@linux.vnet.ibm.com>, Bryant G. Ly <bryantly@linux.vnet.ibm.com>,

簡介

注意:理解本文件需要虛擬化技術知識。

一個很好的參考文件是

https://openpowerfoundation.org/wp-content/uploads/2016/05/LoPAPR_DRAFT_v11_24March2016_cmt1.pdf

虛擬管理通道 (VMC) 是一種邏輯裝置,它在管理程式(hypervisor)和管理分割槽之間提供介面。此介面類似於訊息傳遞介面。此管理分割槽旨在為使用基於硬體管理控制檯 (HMC) 的系統管理系統提供替代方案。

IBM 開發的主要硬體管理解決方案依賴於名為硬體管理控制檯 (HMC) 的裝置伺服器,該伺服器以外部塔式或機架式個人計算機的形式打包。在 Power Systems 環境中,單個 HMC 可以管理多個基於 POWER 處理器 的系統。

管理應用程式

在管理分割槽中,存在一個管理應用程式,系統管理員可以透過命令列介面 (CLI) 或表徵狀態傳輸應用程式 (REST API) 配置系統的分割槽特性。

該管理應用程式在 PowerVM 虛擬化的基於 POWER8 或更新處理器的伺服器上的 Linux 邏輯分割槽中執行。傳統上需要 HMC 的系統配置、維護和控制功能可以透過管理應用程式,結合使用 HMC 到管理程式介面和現有作業系統方法來實現。此工具提供了 HMC 所實現功能的一個子集,並支援基本的分割槽配置。管理應用程式元件支援的 HMC 到管理程式訊息集透過 VMC 介面(定義如下)傳遞給管理程式。

VMC 使管理分割槽能夠提供基本的分割槽功能

  • 邏輯分割槽配置

  • 獨立分割槽的啟動和停止操作

  • 分割槽狀態顯示

  • 虛擬乙太網管理

  • 虛擬儲存管理

  • 基本系統管理

虛擬管理通道 (VMC)

定義了一種稱為虛擬管理通道 (VMC) 的邏輯裝置,用於管理應用程式和管理程式之間的通訊。它基本上建立了啟用虛擬化管理軟體的管道。該裝置作為虛擬裝置呈現給指定管理分割槽。

該通訊裝置使用命令/響應佇列 (CRQ) 和遠端直接記憶體訪問 (RDMA) 介面。定義了三向握手,必須在傳送/接收任何協議訊息之前進行,以確保通道的管理程式和管理分割槽兩端都在執行。

該驅動程式還利用傳輸事件 CRQ。當管理程式檢測到其中一個對等分割槽異常終止,或者某一方呼叫 H_FREE_CRQ 關閉其 CRQ 時,會發送 CRQ 訊息。為 VMC 裝置引入了兩類新的 CRQ 訊息。VMC 管理訊息用於每個使用 VMC 的分割槽向其夥伴通訊功能。HMC 介面訊息用於管理分割槽和管理程式之間 HMC 訊息的實際流動。由於大多數 HMC 訊息遠遠超過 CRQ 緩衝區的大小,因此在每個 HMC 介面 CRQ 訊息之前都會對 HMC 訊息資料進行虛擬 DMA (RMDA)。只有管理分割槽驅動 RDMA 操作;管理程式從不直接導致訊息資料的移動。

術語

RDMA

遠端直接記憶體訪問 (RDMA) 是從伺服器到其客戶端或從伺服器到其夥伴分割槽的 DMA 傳輸。DMA 指的是物理記憶體 I/O 操作以及記憶體到記憶體的移動操作。

CRQ

命令/響應佇列 (CRQ) 是一種用於夥伴分割槽之間通訊的設施。從管理程式向分割槽發出的傳輸事件也會在此佇列中報告。

管理分割槽 VMC 驅動程式介面示例

本節提供了一個管理應用程式實現的示例,其中裝置驅動程式用於與 VMC 裝置進行介面。該驅動程式包含一個新裝置,例如 /dev/ibmvmc,它提供對 VMC 裝置進行開啟、關閉、讀取、寫入和執行 ioctl 操作的介面。

VMC 介面初始化

裝置驅動程式負責在驅動程式載入時初始化 VMC。它首先建立並初始化 CRQ。接下來,執行 VMC 功能交換,以指示管理分割槽和管理程式中的程式碼版本和可用資源數量。最後,管理程式請求管理分割槽建立一個初始的 VMC 緩衝區池,每個可能的 HMC 連線一個緩衝區,這些緩衝區將用於管理應用程式會話初始化。在此初始化序列完成之前,裝置對 open() 呼叫返回 EBUSY。所有 open() 失敗都返回 EIO。

Management Partition            Hypervisor
                CRQ INIT
---------------------------------------->
           CRQ INIT COMPLETE
<----------------------------------------
              CAPABILITIES
---------------------------------------->
         CAPABILITIES RESPONSE
<----------------------------------------
      ADD BUFFER (HMC IDX=0,1,..)         _
<----------------------------------------  |
          ADD BUFFER RESPONSE              | - Perform # HMCs Iterations
----------------------------------------> -

VMC 介面開啟

在基本的 VMC 通道初始化後,可以建立 HMC 會話級連線。應用程式層對 VMC 裝置執行 open() 操作,並對其執行 ioctl() 操作,指示此會話的 HMC ID(32 位元組資料)。如果 VMC 裝置處於無效狀態,ioctl() 將返回 EIO。裝置驅動程式為此 HMC ID 建立新的 HMC 會話值(範圍從 1 到 255)和 HMC 索引值(從索引 0 開始,範圍到 254)。然後驅動程式將 HMC ID 透過 RDMA 傳輸到管理程式,然後向管理程式傳送一個介面開啟訊息,以透過 VMC 建立會話。管理程式收到此資訊後,它會向管理分割槽傳送新增緩衝區訊息,為新的 HMC 連線播種一個初始緩衝區池。最後,管理程式傳送一個介面開啟響應訊息,表明它已準備好進行正常的執行時訊息傳遞。以下圖示了此 VMC 流程

Management Partition             Hypervisor
              RDMA HMC ID
---------------------------------------->
            Interface Open
---------------------------------------->
              Add Buffer                  _
<----------------------------------------  |
          Add Buffer Response              | - Perform N Iterations
----------------------------------------> -
        Interface Open Response
<----------------------------------------

VMC 介面執行時

在正常執行時,管理應用程式和管理程式透過訊號 VMC 訊息和 RDMA 操作交換 HMC 訊息。當向管理程式傳送資料時,管理應用程式對 VMC 裝置執行 write() 操作,驅動程式將資料透過 RDMA 傳輸到管理程式,然後傳送一個訊號訊息。如果在管理程式使 VMC 裝置緩衝區可用之前嘗試執行 write(),或者當前沒有可用緩衝區,write() 將返回 EBUSY。對於所有其他錯誤,例如無效裝置狀態,write() 將返回 EIO。當管理程式向管理層傳送訊息時,資料被放入 VMC 緩衝區,並向管理分割槽中的 VMC 驅動程式傳送一個訊號訊息。驅動程式將緩衝區透過 RDMA 傳輸到分割槽,並透過對 VMC 裝置的 read() 操作將資料傳遞給相應的管理應用程式。如果沒有可讀取的緩衝區,read() 請求將阻塞。管理應用程式可以使用 select() 等待 VMC 裝置準備好可讀取的資料。

Management Partition             Hypervisor
                MSG RDMA
---------------------------------------->
                SIGNAL MSG
---------------------------------------->
                SIGNAL MSG
<----------------------------------------
                MSG RDMA
<----------------------------------------

VMC 介面關閉

當應用程式層對裝置執行 close() 操作時,管理分割槽會關閉 HMC 會話級連線。此操作會使介面關閉訊息流向管理程式,從而終止會話。裝置驅動程式必須釋放為該 HMC 連線的緩衝區分配的所有儲存。

Management Partition             Hypervisor
             INTERFACE CLOSE
---------------------------------------->
        INTERFACE CLOSE RESPONSE
<----------------------------------------

附加資訊

有關 CRQ 訊息、VMC 訊息、HMC 介面緩衝區和訊號訊息文件的更多資訊,請參閱《Linux on Power Architecture Platform Reference》文件。F 節。