虛擬化頂級技術會議KVM Forum演講分享 | 移動雲KVM共享雲盤技術實踐

2020年度的KVM Forum會議將於北京時間10月28日20:00-31日00:30在線上舉行。作爲虛擬化領域最具影響力的國際會議,KVM Forum爲開發人員和用戶提供了一個討論Linux虛擬化技術的發展趨勢及未來發展挑戰的高端技術會議平臺,是虛擬化領域最爲重要和權威的大會。本次會議匯聚了Google、Amazon、Red Hat、Intel、Alibaba、ByteDance等衆多國內外頂級雲服務廠商,中國移動雲能力中心的高級軟件開發工程師白耀偉受邀參加會議,並將於北京時間10月31日00:00-00:30做《Bring SCSI support into QEMU block layer》的主題演講。

目錄

01.背景介紹

02.優化方案

03.目前狀態

04.推薦閱讀


 

01.背景介紹


集羣文件系統(Clustered File System)比如Oracle的OCFS、VMware 的VMFS、Windows的MSCS等需要在多個節點掛載同一個塊設備來支持多節點訪問。集羣文件系統通常要求塊設備支持併發訪問控制機制,爲多個訪問節點提供一致的文件視圖,從而避免在同一時間多個節點同時訪問數據造成的數據損壞和丟失。常見的塊設備層併發訪問控制機制有藉助SCSI協議中的COMPARE AND WRITE、PERSISTENT RESERVATION等命令實現的鎖機制。

Ceph作爲雲計算時代應用最廣泛的分佈式存儲系統,憑藉其高可靠、高可擴展等特性,已成爲了雲數據中心存儲系統的首選,越來越多的數據中心使用Ceph分佈式存儲提供的邏輯卷作爲塊設備的後端存儲。

爲支持上述方案,自2016年開始,Ceph社區實現了COMPARE AND WRITE等SCSI協議命令的原生支持,但由於QEMU block層本身缺乏SCSI命令支持,所以QEMU無法直接使用Ceph提供的SCSI命令接口,需要藉助iSCSI協議來實現SCSI命令的處理。這樣虛機裏的集羣文件系統若要訪問Ceph後端,整個IO路徑涉及虛機、ISCSI initiator、ISCSI target、librbd等多個組件,從而導致IO路徑過長,同時在實際使用中也存在組件過多不方便問題定位和排查等問題。

 

02.優化方案


爲解決上述痛點問題,中國移動雲能力中心存儲團隊對該架構進行了優化,即實現QEMU本身的block層支持SCSI命令,允許QEMU直接調用Ceph支持的相關SCSI命令處理接口,達到簡化邏輯架構的目的。

爲實現上述架構,QEMU需要在接收到來自虛機中的SCSI請求後,調用相應的librbd接口來進行請求處理,但是目前QEMU中的block層還不支持SCSI命令的傳送和處理,我們需要實現該功能。

QEMU的block層增加SCSI命令的支持,涉及到4個層次上的代碼改動:


  • SCSI設備模擬層:在這層需要增加對COMPARE AND WRITE、PERSISTENT RESERVATION等命令的支持,即模擬的SCSI設備在接收到相應請求後,調用下一層的接口處理;
  • block層對外的API接口層:在這層需要增加相關支持,對於COMPARE AND WRITE命令,我們複用了blk_aio_pwritev接口並增加了一個新的BDRV_REQ_COMPARE_AND_WRITE標誌,對於PERSISTENT RESERVATION命令,增加三個新的blk_persistent_reserve_{in,out,check}接口;
  • block IO層:這層的改動類似上一層,對於COMPARE AND WRITE命令,複用了bdrv_driver_pwritev接口,對於PERSISTENT RESERVATION命令,增加三個新的bdrv_persistent_reserve_{in,out,check}接口;
  • block driver層:這一層直接調用librbd接口,實現了四個新的接口:bdrv_aio_compare_and_write、bdrv_co_persistent_reserve_{in,out,check}。

經過優化後的架構涉及到的組件減少、邏輯更加簡化,同時QEMU對Ceph的支持也已經很成熟,運維、部署方面也帶來了極大的便利。

 

03.目前狀態


目前經過實際驗證部署,共享雲盤可支持微軟的MSCS等分佈式集羣文件系統,該產品即將在移動雲上線投產,部分相關實現代碼也已經提交QEMU社區,將來會有更多的代碼推向社區。

 

04.推薦閱讀


ARM SMMU原理與IOMMU技術(「VT-d」 DMA、I/O虛擬化、內存虛擬化)

用QEMU構建嵌入式LINUX系統

Linux虛擬化KVM-Qemu分析(一)

Linux虛擬化KVM-Qemu分析(二)之ARMv8虛擬化

Linux虛擬化KVM-Qemu分析(三)之KVM源碼(1)

Linux虛擬化KVM-Qemu分析(四)之CPU虛擬化(2)

在CentOS上進行虛擬化:QEMU、Xen、KVM、LibVirt、oVirt

ARM SMMU原理與IOMMU技術(「VT-d」 DMA、I/O虛擬化、內存虛擬化)

OpenVZ,Xen,KVM等:虛擬化解決方案

KVM Virtio: An I/O virtualization framework for Linux(Linux虛擬IO框架)

提升KVM異構虛擬機啓動效率:透傳(pass-through)、DMA映射(VFIO、PCI、IOMMU)、virtio-balloon、異步DMA映射、預處理

2020全球開源基礎設施技術峯會分享 | 自研軟硬一體化加速方案