virtio-blk简介[转]
聲明:
本博客歡迎轉發,但請保留原作者信息!
新浪微博:@孔令賢HW;
博客地址:http://lingxiankong.github.io/
內容系本人學習、研究和總結,如有雷同,實屬榮幸!
virtio-blk是虛擬化KVM平臺下虛擬磁盤的一種實現方式,也是存儲虛擬化所研究的主要對象之一。在KVM平臺下,qemu程序負責模擬一臺PC的整個工作過程,是虛擬化技術的精髓所在。大家知道,在物理PC中,磁盤是必不可少的設備,系統、應用程序的安裝和數據的存放都離不開磁盤。在虛擬化場景下,qemu自然也需要提供對磁盤的模擬。那qemu到底是如何模擬磁盤的?virtio-blk又是一種什么樣的虛擬磁盤呢?
qemu對設備的模擬可以分成兩類:全模擬和半模擬。全模擬即完全模擬物理設備的工作過程,使得運行在虛擬機上的軟件完全感知不到自身運行環境的差異。例如qemu中實現了對IDE磁盤、LSI控制器(其上可接SCSI磁盤)等物理存儲設備的模擬,原先運行在物理機上的IDE驅動、LSI驅動或應用程序不做任何改動即可運行在虛擬機中。因此,全模擬的優點比較明顯,即不用提供專門針對虛擬化場景的設備驅動,完全可以復用物理環境下的驅動程序。那么全模擬有何缺點呢?全模擬時,虛擬機內部驅動會頻繁訪問虛擬機IO端口,KVM平臺下會導致大量的陷入和陷出操作;另外虛擬機內外數據傳輸時只能通過以字節為單位的拷貝方式進行,無法直接采用共享內存的方式,因此存在較大的訪問性能問題。
為解決全虛擬化在性能上的問題,半模擬技術應運而生。它構造了一種虛擬化環境所獨有的存儲設備,因此需要在虛擬機內部安裝特定的驅動程序才能正常驅使該設備進行工作。通常我們稱虛擬機內部的驅動為前端驅動,稱負責實現其功能模擬的程序(KVM平臺下即為qemu程序)為后端程序,半模擬技術也常常被叫做前后端技術。采用半摸擬技術后,配合前端驅動,虛擬化設備完全可以采用全新的事件通知和數據傳遞機制進而大幅提升性能,例如在virtio-blk磁盤中,采用io_event_fd進行前端到后端通知,采用中斷注入方式實現后端到前端的通知,并通過IO環(vring)進行數據的共享。
至此,主要說明了virtio-blk產生的背景及其價值。附上qemu所模擬的PC(基于intel i440fx主板架構)的組成結構圖,以作為后續深入分析的基礎。
qemu模擬實現的virtio-blk設備的組成結構如下圖所示:
從圖中可見,virtio-blk設備“內嵌”在一塊PCI設備板(即virtio-blk-pci設備)上,其內部通過一條virtio總線連接PCI接口和virtio-blk設備。為何要將virtio-blk設備設計成這樣呢?
qemu模擬的所有設備都通過總線相連,總線下可掛接若干設備,橋接設備又可生成子總線;整個PC只有一條根總線(即Main System Bus,對應前端總線FSB)。因此,qemu內模擬的所有設備構成一棵總線與設備交替衍生的樹。virito-blk是一種什么樣的設備?又該連接在什么總線上呢?雖然virtio-blk僅在虛擬化環境下存在,但如果完全憑空創造一種新的設備類型,那前端驅動開發將是一個很大的挑戰。PCI設備是PC中最為常見的一種設備類別,且有較為完善的規范說明,因此可將virtio-blk設備模擬成一種PCI設備,這樣可復用虛擬機內部已有的PCI驅動。
virtio-blk設備從功能上來看,核心功能就是實現虛擬機內外的事件通知和數據傳遞:虛擬機內部的前端驅動準備好待處理的IO請求和數據存放空間并通知后端;虛擬機外部的后端程序獲取待處理的請求并交給真正的IO子系統處理,完成后將處理結果通知前端。實際上,除了虛擬磁盤,虛擬網卡也完全可以復用這套機制,從而實現半模擬的網絡前后端(virtio-net)。如果將virtio-blk或virtio-net設計成不同類型的PCI設備,那么前端驅動中會存在大量關于事件通知和數據傳遞的重復代碼。
綜上分析,virtio-blk首先是PCI設備;其次為了復用半模擬中通用的事件通知和數據傳遞機制,抽象出一類virtio-pci設備,其內部通過virtio總線連接不同的virtio設備。這樣virtio-blk設備就通過virtio總線連接到virtio-blk-pci設備的PCI接口上,virtio-net也通過virtio總線連接到virtio-net-pci設備的PCI接口上??赡苡械娜藭枺瑸楹瓮ㄟ^設備的抽象就能復用前端驅動的代碼?在virtio-blk-pci或virtio-net-pci前端驅動加載時,最初識別到的都是virtio-pci設備,這樣都可調用virtio-pci驅動進行事件通知和數據傳遞的初始化,后續也可使用virtio-pci中相關函數進行事件通知和數據傳遞。
因此virtio-blk完全是基于通用的virtio框架實現的磁盤前后端,virtio框架中最為核心的就是事件通知和數據傳遞機制。
敦品厚德 格物致知
總結
以上是生活随笔為你收集整理的virtio-blk简介[转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费edu邮箱申请注冊地址
- 下一篇: 灵魂特攻队全球同步上市 独特游戏内容释出