SPDK Vhost-user 如何幫助超融合架構實現 I/O 儲存效能提升
作者:深耕行業的 SmartX 金融團隊
本文主要介紹 使用 SPDK vhost-user 技術,來加速 KVM 虛擬機器中 virtio-blk/virtio-scsi 儲存裝置的 I/O 效能 ,並結合架構場景展開說明,讓讀者對這項技術帶來的特性提升有更直觀的瞭解。
首先我們先看看當前主流的 I/O 裝置虛擬化方案:
-
QEMU 純軟體模擬,利用軟體模擬 I/O 裝置提供給虛擬機器使用。
-
Virtio 半虛擬方案,規範了前後端模型,在虛擬機器(Guest OS)中使用 frontend 驅動(Virtio Drive),在 Hypervisor(QEMU)中使用 backend 裝置(Virtio Device)提供 I/O 能力,透過減少記憶體複製次數和 VM 陷入次數,提升 I/O 效能,這種方案需要安裝 Virtio 驅動。
本文的主角 vhost 技術是基於 Virtio 規範發展衍生出來, 最佳化 I /O 鏈路,可以用來加速 QEMU 中半虛擬化的 Virtio 裝置 I/O 效能 。
Virtio 介紹
Virtio 基於 Vring 的 I/O 通訊機制,相比 QEMU 的純軟體模擬, 有效降低了 I/O 延遲,具有效能優勢。這也是 Virtio 普及的原因,各個廠商的半虛擬化 I/O 裝置實現方式開始變得統一。
在 QEMU 中,Virtio 裝置是為 Guest 作業系統模擬的 PCI/PCIe 裝置,遵循 PCI 規範,具有配置空間、中斷配置等功能。Virtio 註冊了 PCI 廠商 ID(0x1AF4)和裝置 ID,不同的裝置 ID 代表不同的裝置型別,例如面向儲存的 virtio-blk(0x1001)和 virtio-scsi 裝置 ID(0x1004)。
Virtio 由三部分組成,前端是驅動層,位於 Guest 系統內部,中間是虛擬佇列(virtqueue),負責資料傳輸和命令互動,後端裝置層,用於具體處理 Guest 傳送的請求。
下面我們一起來看一下超融合架構下,基於 virtio-blk 的資料路徑是什麼樣子的。
備註:超融合架構是一種 IT 基礎架構解決方案,將計算、儲存和網路資源整合在一個統一系統(計算伺服器)中。超融合基礎架構由虛擬化、分散式儲存和軟體定義網路組成。利用分散式架構實現叢集的可靠性和容錯性,並透過將計算與儲存整合在一起,靈活部署在通用標準硬體上,來降低資料中心複雜性和佔用空間,並支援更多的現代工作負載。
-
Guest 發起 I/O 操作,Guest 核心 Virtio 驅動寫 PCI 配置空間,觸發 VM EXIT,返回到 Host KVM 中(通知 KVM);
-
QEMU 的 vCPU 執行緒從 KVM 核心態回到 QEMU,讓 QEMU Device 來處理 Virtio Vring 請求;
-
QEMU 透過 iSCSI Drive 發起儲存連線(iscsi over tcp to localhost);
-
透過 Socket 將請求連線到儲存程式提供的 iSCSI Target;
-
儲存引擎接收請求並進行 I/O 處理;
-
儲存引擎發起對本地儲存介質的 I/O;
-
I/O 操作結束,透過上述逆過程返回至 Virtio 後端 Device,QEMU 會向模擬的 PCI 傳送中斷通知,從而 Guest 基於該中斷完成整個 I/O 流程。
QEMU 透過本地 Socket 連線儲存程式,資料流從使用者態到核心態再到使用者態(資料複製開銷),同時 iSCSI 協議層也存在效能消耗, 如果儲存程式可以直接接收處理本地 I/O,就可以避免這些問題帶來的損耗,實現 Virtio Offload to Storage Software 。
Vhost 加速
如前所述,Virtio 後端 Device 用於具體處理 Guest 的請求,負責 I/O 的響應,把 I/O 處理模組放在 QEMU 程式之外去實現的方案稱為 vhost。由於我們需要實現的最佳化目標是在兩個使用者態程式之間(超融合架構),所以採用 vhost-user 方案進行儲存加速實現(vhost-kernel 方案主要是將 I/O 負載解除安裝到核心完成,所在不在本文討論)。
V host-user 的資料平面處理主要分為 Master 和 Slave 兩個部分,其中 Master 為 virtqueue 的供應方,一般由 QEMU 作為 Master,儲存軟體作為 Slave,負責消費 virtqueue 中的 I/O 請求。
Vhost-user 方案優勢:
-
消除 Guest 核心更新 PCI 配置空間,QEMU 捕獲 Guest 的 VMM 陷入所帶來的 CPU 上下文開銷(後端處理執行緒採用輪詢所有 virtqueue)。
-
使用者態程式間記憶體共享,最佳化資料複製效率(零複製)。
-
當 Guest 發起 I/O 操作後,儲存軟體透過 Polling 機制感知新的請求動作,從 virtqueue 獲取資料;
-
儲存引擎接收請求並進行 I/O 處理;
-
儲存引擎發起對本地儲存介質的 I/O;
-
I/O 操作完成後,由 vhost device 傳送 irqfd(eventfd)通知到 KVM;
-
KVM 注入中斷通知 Guest OS 完成 I/O。
注:前端 vhost driver 與後端 vhost device 之間的控制類資訊傳遞透過 UNIX Domain Socket 檔案實現。
介紹完理論過程,讓我們看一組儲存效能對比 Virtio vs Vhost-user(單節點效能)。
測試資料基於 3 節點叢集(超融合架構,叢集儲存網路未開啟 RDMA),節點硬體配置如下:
-
Intel Xeon Gold 5122 3.6GHz
-
8*16G DDR4 2666MHz
-
2*Intel P4610 1.6T NVMe
-
Mellanox CX-4 25Gbps
透過圖表對比單節點 4k iodepth=128 下的 IOPS(數值越高越好)效能差異:
透過圖表對比單節點 4k iodepth=1 下的 Latency(數值越低越好)效能差異:
總結
透過理論和真實的效能資料介紹,可以看出,相比 Virtio 方案, 透過 Vhost 技術實現了更加突出的儲存效能表現,但 作為企業級產品交付,需要考慮到企業級功能,例如儲存軟體異常下的 Vhost 重連/切換、虛擬機器的記憶體熱新增等實際場景,希望這篇文章對於讀者理解 Vhost 以及適配超融合架構有所幫助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69974533/viewspace-2867422/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 超融合私有云基礎架構方案評估(架構與儲存篇)架構
- 金融信創場景下,SmartX 超融合儲存效能如何?
- VMware 與 SmartX 超融合 I/O 路徑對比與效能影響解析
- IT職場:Kaizen如何幫助自我提升AI
- 如何在Linux系統伺服器中測試儲存/磁碟I/O效能?Linux伺服器
- MongoDB分片儲存的叢集架構實現MongoDB架構
- 小紅書自研KV儲存架構如何實現萬億量級儲存與跨雲多活架構
- FFmpeg架構之I/O模組分析架構
- mmap共享儲存對映(儲存I/O對映)系列詳解
- 作業系統程式、儲存和I/O作業系統
- 超融合架構與傳統IT架構的區別架構
- 深度剖析——超融合架構應用與實踐分享架構
- 儲存器、I/O組織、微處理器
- 什麼叫超融合基礎架構?架構
- 架構師提升篇:分散式系統中,如何提升系統效能?架構分散式
- BPM如何幫助企業實現精益管理?
- DevOps 如何幫助實現安全部署dev
- 超融合架構驅資料中心變革架構
- 如何進行雲端儲存架構框架設計?架構框架
- “雲端計算”時代 儲存架構如何變化架構
- 如何監測 Linux 的磁碟 I/O 效能Linux
- 現代IM系統中訊息推送和儲存架構的實現架構
- 幫助系統的實現
- 現代儲存架構:磁帶儲存在資料中心"重生"架構
- 大型企業的希望之光:超融合架構讓我們立足現實,進軍雲端架構
- 二、儲存架構演變架構
- 如何大幅提升web前端效能之看tengine在大公司架構實踐Web前端架構
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- vertica 如何實現儲存過程?儲存過程
- 駕馭當今的 I&O 格局:利用雲、超融合和可觀察性
- 容器雲環境下如何設計儲存架構?架構
- 愛分析調研 | 如何用超融合構建新一代IT基礎架構架構
- 實時計算如何幫助淘寶實現線上「實時選品」?
- 儲存系統實現-構建自己的儲存系統(一)
- 分散式日誌儲存架構程式碼實踐分散式架構
- 如何實現彈性架構架構
- IDC:2021年中國軟體定義儲存(SDS)市場同比45.5% 超融合儲存系統(HCI)實現41.1%增長
- 低程式碼如何幫助企業實現業務增長?