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 超融合儲存效能如何?
- 如何在Linux系統伺服器中測試儲存/磁碟I/O效能?Linux伺服器
- VMware 與 SmartX 超融合 I/O 路徑對比與效能影響解析
- mmap共享儲存對映(儲存I/O對映)系列詳解
- 作業系統程式、儲存和I/O作業系統
- IT職場:Kaizen如何幫助自我提升AI
- 儲存器、I/O組織、微處理器
- 小紅書自研KV儲存架構如何實現萬億量級儲存與跨雲多活架構
- 如何監測 Linux 的磁碟 I/O 效能Linux
- 超融合架構與傳統IT架構的區別架構
- DevOps 如何幫助實現安全部署dev
- 什麼叫超融合基礎架構?架構
- 現代儲存架構:磁帶儲存在資料中心"重生"架構
- BPM如何幫助企業實現精益管理?
- vertica 如何實現儲存過程?儲存過程
- 如何進行雲端儲存架構框架設計?架構框架
- 容器雲環境下如何設計儲存架構?架構
- 如何大幅提升web前端效能之看tengine在大公司架構實踐Web前端架構
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- IDC:2021年中國軟體定義儲存(SDS)市場同比45.5% 超融合儲存系統(HCI)實現41.1%增長
- 分散式日誌儲存架構程式碼實踐分散式架構
- 重新架構:從 Redis 到 SQLite 效能提升架構RedisSQLite
- 駕馭當今的 I&O 格局:利用雲、超融合和可觀察性
- MySQL提升筆記(4)InnoDB儲存結構MySql筆記
- 愛分析調研 | 如何用超融合構建新一代IT基礎架構架構
- 如何實現彈性架構架構
- Kotlin如何實現MVP架構KotlinMVP架構
- 如何通過梯度檢驗幫助實現反向傳播梯度反向傳播
- CRM如何幫助實現企業銷售自動化?
- 【雜談】Java I/O的底層實現Java
- Streaming Data Warehouse 儲存:需求與架構架構
- 超融合、軟體定義儲存、分散式儲存以及Server SAN的區別與聯絡分散式Server
- MySQL如何實現萬億級資料儲存?MySql
- 最新【從零單排】系列流出,教你如何實現字典儲存結構
- 使用GPT-4o實現軟體架構解決方案GPT架構
- 北鯤雲超算平臺如何幫助現代生物製藥發展?
- 1萬字長文高速你千萬級併發架構下如何提高資料庫儲存效能架構資料庫