KVM中virtio,vhost 和vhost-user比較(十一)

virtio

在虛擬機中,可以通過qemu模擬e1000網卡,這樣的經典網卡一般各種客戶操作系統都會提供inbox驅動,所以從兼容性上來看,使用類似e1000的模擬網卡是非常一個不錯的選擇。

但是,e1000網卡上也包含了複雜的io端口,寄存器,緩存配置,虛擬機每次收發包都會引起更多的io和mmio操作,使得虛擬機頻繁的陷出,最終導致網絡性能不佳。

爲了解決上述全虛擬化的性能問題,IBM在2005年提出了virtio, 虛擬機中的半虛擬化前端驅動和主機上的後端服務簡單的使用virtqueue共享隊列交換數據,大幅的減少了e1000模擬時複雜的io操作,從而可以較大程度的提升虛擬網絡性能。

在這裏插入圖片描述
virtio是qemu的半虛擬化驅動,guest使用virtio driver將請求發送給virtio-backend。

圖中描述了virtio的io路徑: guest發出中斷信號退出kvm,從kvm退出到用戶空間的qemu進程。然後由qemu開始對tap設備進行讀寫。 可以看到這裏從用戶態進入內核,再從內核切換到用戶態,進行了2次切換。

virtio的io路徑:

  1. guest設置好tx;
  2. kick host;
  3. guest陷出到kvm;
  4. kvm從內核切換到用戶態的qemu進程;
  5. qemu將tx數據投遞到tap設備;

vhost

vhost技術對virtio-net進行了優化,在內核中加入了vhost-net.ko模塊,使得對網絡數據可以在內核態得到處理。
在這裏插入圖片描述
圖中描述了vhost的io路徑: guest發出中斷信號退出kvm,kvm直接和vhost-net.ko通信,然後由vhost-net.ko訪問tap設備。 這樣網絡數據只需要經過從用戶態到內核態的一次切換,就可以完成數據的傳輸。大大提高了虛擬網卡的性能。 由於這個技術中vhost-backend在內核中,所以也被叫做vhost-kernel。

vhost的io路徑:

  1. guest設置好tx;
  2. kick host;
  3. guest陷出到kvm;
  4. vhost-net將tx數據投遞到tap設備;

vhost將部分virio驅動的操作從用戶態移到內核態,減少了用戶態/內核態切換時間和包的拷貝次數,從而更進一步的提升了性能。

vhost-user

隨着技術的發展,將網絡數據放入用戶態處理將可以得到更靈活的形式。在原有的vhost架構中,進行了改動,增加了 一種新的vhost-backend,叫做vhost-user。
在這裏插入圖片描述
圖中描述了的io路徑:guest發出中斷信號退出kvm,kvm直接和vhost-backend通信,然後網絡數據將交由vhost-backend 進行處理。

vhost-user的io路徑

  1. guest設置好tx;
  2. kick host;
  3. guest陷出到kvm;
  4. kvm將通知vhost-backend;
  5. vhost-backend將tx數據直接發送到nic設備。

vhost-user的提交者是Luke Gorrie,他也是snabbswitch的作者: vhost-backend從原來kernel中的vhost-net 變成了用戶空間的snabbswitch,snabbswitch直接接管物理網卡的驅動,從而直接控制網絡信息的輸入輸出。snabbswitch主要使用了下面的技術來提高性能:

  1. 採用了大頁來作爲host和vm之間通信的內存空間
  2. 用戶態操作網卡,使用類似於netmap的zero copy技術來加速對物理設備的訪問
  3. 使用numa技術,加快中斷響應速率

值得一提的是使用snabbswitch後,不用再使用原來的tap設備模擬的網卡。

使用vhost-user技術,從虛擬機到host上實現了數據的zero copy(通過大頁共享),host到nic的zero copy(snabbswitch實現的驅動),能進一步加快數據的傳輸。

DPDK便是一個在用戶態可以直接操作物理網卡的庫函數,它和vhost-user結合便可以實現類似於snabb switch一樣性能強勁的用戶態交換機了。

原文鏈接:https://blog.csdn.net/qq_15437629/article/details/77899905?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecase&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecase

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章