歡迎光臨
每天分享高質量文章

Virtio技術架構簡明分析

什麼是Virtio?Virtio 是一種 I/O半虛擬化解決方案,是一套通用 I/O 裝置虛擬化的程式,是對半虛擬化 Hypervisor 中的一組通用 I/O 裝置的抽象。其實現了一套guest VM中的上層應用與各Hypervisor (KVM,QEMU,Xen,VMware等)提供的虛擬化裝置之間的通訊框架和程式設計介面,減少跨平臺所帶來的相容性問題,大大提升驅動程式開發效率。

 

下圖為在完全虛擬化的解決方案中,VM訪問硬體裝置的路徑模型。

 

 

  • 1) 客戶機的裝置驅動程式發起 I/O 請求操作請求
  • 2) KVM 模組中的 I/O 操作捕獲程式碼攔截這次 I/O 請求
  • 3) KVM經過加工處理後將本次 I/O 請求的資訊放到 I/O 共享頁 (sharing page),並通知使用者空間的 QEMU 程式。
  • 4) QEMU 程式獲得 I/O 操作的具體資訊之後,交由硬體模擬程式碼來模擬出本次 I/O 操作。(模擬裝置可能會使用物理的裝置,或者使用純軟體來模擬。)
  • 5) I/O操作完成之後,QEMU 將結果放回 I/O 共享頁,並通知 KMV 模組中的 I/O 操作捕獲程式碼。
  • 6) KVM 模組的捕獲程式碼讀取 I/O 共享頁中的操作結果,並把結果放回客戶機。 

     

當然,這一操作過程中,客戶機VM作為QEMU的一個thread(vm_runing)在等待I/O時可能被阻塞(Block)。另外,當客戶機透過DMA訪問大塊記憶體時,QEMU模擬程式不會把操作結果放到I/O共享頁中,而是透過記憶體對映的方式將結果直接寫到客戶機的記憶體中去,然後透過KVM模組告訴客戶DMA操作完成)

 

 

 

優點:

  • 1、不用修改客戶機作業系統(即不做任何修改,使用原生裝置驅動)。
  • 2、可以模擬一些老式經典裝置,解決因為手頭沒有足夠裝置而引入的除錯開發問題。
  • 缺點:
  • 1、I/O路徑長,依賴KVM和QEMU來做中間的資訊處理。
  • 2、多次進行資料複製。
  • 3、虛擬機器和宿主機,核心態和使用者態多次進行背景關係切換(context switch),效能差。

 

Virtio的出現可以解決上述效能問題。

 

 

優勢:

  • 1、標準化:Virtio實現統一的裝置介面,Virtio以及virtio-ring完成標準傳輸層佇列介面,上層可以對接各種型別裝置,如blk、net、pci、scsi等裝置。

  • 2、環形佇列批次處理I/O請求

  • 3、最佳化傳統方案中核心態與使用者態頻繁切換,虛擬機器和宿主機陷入陷出帶來的效能開銷。

 

缺點:

  • 1、前端VM需要載入Virtio驅動。

 

採用半摸擬技術(這裡的半模擬,主要是體現在多了一個virtio前端驅動)後,配合前端驅動,虛擬化裝置完全可以採用全新的事件通知和資料傳遞機制進而大幅提升效能,例如在virtio-blk磁碟中,採用io_event_fd進行前端到後端通知,採用中斷註入方式實現後端到前端的通知,並透過IO環(vring)進行資料的共享。

 

 

virtio組成結合上圖來來看,virtio 可以分為四層,具體包括以下模組:

 

  • virtio_blkirtio_netirtio_scsi:前端 guest 中各種裝置驅動程式模組。
  • virtio-pci:virtio裝置首先是個PCI裝置,會走標準的PCI裝置匯流排模型。
  • virtio*virtio-ring :virtio主要實現控制面,例如實現虛擬佇列介面(資料結構、notify等通訊機制),是前後端通訊的橋梁,virtio-ring主要偏向資料面,實現兩個環形緩衝區,實現了具體的通訊機制和資料流。
  • virtio backend:後端 Hypervisor (實現在Qemu上)上的處理程式模組。

 

從程式碼上看,virtio的程式碼主要分兩個部分:QEMU和核心驅動程式。virtio裝置的模擬就是透過QEMU完成的,QEMU程式碼在虛擬機器啟動之前,為VM建立虛擬裝置。虛擬機器啟動後檢測到裝置,呼叫內核的virtio裝置驅動程式來載入這個virtio裝置

 

 

 

虛擬機器的儲存由QEMU模擬,可以分為幾個部分:

 

  • 頂層的模擬虛擬機器磁碟,這個比如virtio-blk磁碟/virtio-scsi磁碟/ide磁碟,虛擬機器往這些磁碟讀寫資料,QEMU透過頂層磁碟獲得虛擬機器的IO/SCSI/ATA請求,並轉化為具體的磁碟資料讀寫;

  • 中層的模擬的虛擬機器映象層,比如raw格式/qcow2/sheepdog映象,其實就是資料以特定協議規則放置,以實現儲存的一些高階特性(連結克隆,快照等),資料的扇區排序透過這層,已經和原始的資料不一致;

  • 底層適配host上不同具體儲存檔案/裝置,中層映象層已經把資料重新排列,資料在底層寫入/讀取host上真正的檔案/裝置。

贊(0)

分享創造快樂