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

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)

分享創造快樂