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》的主題演講。
目錄
集羣文件系統(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路徑過長,同時在實際使用中也存在組件過多不方便問題定位和排查等問題。
爲解決上述痛點問題,中國移動雲能力中心存儲團隊對該架構進行了優化,即實現QEMU本身的block層支持SCSI命令,允許QEMU直接調用Ceph支持的相關SCSI命令處理接口,達到簡化邏輯架構的目的。
爲實現上述架構,QEMU需要在接收到來自虛機中的SCSI請求後,調用相應的librbd接口來進行請求處理,但是目前QEMU中的block層還不支持SCSI命令的傳送和處理,我們需要實現該功能。
QEMU的block層增加SCSI命令的支持,涉及到4個層次上的代碼改動:
經過優化後的架構涉及到的組件減少、邏輯更加簡化,同時QEMU對Ceph的支持也已經很成熟,運維、部署方面也帶來了極大的便利。
目前經過實際驗證部署,共享雲盤可支持微軟的MSCS等分佈式集羣文件系統,該產品即將在移動雲上線投產,部分相關實現代碼也已經提交QEMU社區,將來會有更多的代碼推向社區。
《ARM SMMU原理與IOMMU技術(「VT-d」 DMA、I/O虛擬化、內存虛擬化)》
《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虛擬化、內存虛擬化)》
《KVM Virtio: An I/O virtualization framework for Linux(Linux虛擬IO框架)》
《提升KVM異構虛擬機啓動效率:透傳(pass-through)、DMA映射(VFIO、PCI、IOMMU)、virtio-balloon、異步DMA映射、預處理》