精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

虛擬化之Virtio-Net基礎篇

云計算 虛擬化
系統虛擬化技術是云計算最重要的核心技術之一。云計算平臺的資源池化,資源統一管理以及后續的動態分配都是基于系統虛擬化技術才得以實現的。在計算機系統中,主要有計算資源,存儲資源和網絡資源。

[[397021]]

virtio基礎篇

1. virtio的提出

系統虛擬化技術是云計算最重要的核心技術之一。云計算平臺的資源池化,資源統一管理以及后續的動態分配都是基于系統虛擬化技術才得以實現的。在計算機系統中,主要有計算資源,存儲資源和網絡資源。所以,系統虛擬化技術又可以細分為計算虛擬化,存儲虛擬化和網絡虛擬化。其中存儲設備和網絡設備一般都是以外設的形式和CPU通過I/O總線連接起來的,所以存儲虛擬化和網絡虛擬化又可以統一歸類為I/O虛擬化技術。我們這里介紹的virtio就是當前最流行的I/O虛擬化技術。

I/O虛擬化技術可以分成兩種,一種是全虛擬化,另外一種是半虛擬化。

  • 全虛擬化:Guest OS不知道自己是虛擬機,所以也就不需要修改Guest OS的驅動程序。這樣Guest OS移植性好,但是虛擬機的I/O性能不高。
  • 半虛擬化:Guest OS知道自己是虛擬機,通過前端驅動和后端模擬設備互相配合實現IO虛擬化。和全虛擬化相比,半虛擬化技術可以幫助大幅度提高虛擬機I/O的性能。目前在云計算場景中廣泛使用的就是virtio在Linux上的具體實現,而且virtio已經成為虛擬化I/O技術的抽象接口規范和事實標準,即使非Linux系統也可以適用。

2. virtio總體設計思想

virtio的總體設計思想可以概括為以下四點:直觀,高效,標準化,可擴展。

1) 直觀:virtio設備被設計的和之前的硬件設備一樣,支持常用的總線機制,比如中斷和DMA。這樣的設計使得驅動開發人員能夠快速上手,完成virtio設備驅動的開發。

2) 高效:virtio設備能支持單獨的輸入和輸出通道,在大量數據傳送的時候也能保持高效。

3) 標準化:對硬件架構和操作系統環境沒有依賴,支持多種不同總線的傳輸機制(在virtio規范1.1中支持PCI, MMIO和Channel I/O總線。比如在那些不支持PCI的嵌入式設備還可以通過使用MMIO的方式使用virtio)。

4) 可擴展:在virtio設備發現和設備初始化的時候通過引入特性位(Feature Bits)標識符實現動態適配的協商機制,能夠保證virtio前端驅動和后端模擬設備之間的兼容性。

3. virtio基本原理

接下來,我們以目前使用最廣泛的QEMU/KVM場景為例子進一步解釋virtio的基本原理。虛擬機在物理主機上是一個QEMU的進程,運行在用戶態。虛擬機內部的virtio前端驅動所申請的緩存被映射到設備空間中,也在QEMU的地址空間里,這樣QEMU就可以通過共享內存的方式對這些緩存進行讀寫操作。通過這樣的方式,實現了virtio前端驅動程序(虛擬機Linux內核的驅動)和后端模擬設備(QEMU后端設備模擬程序)之間數據傳輸的零復制,進而大幅度提高了虛擬機的I/O性能。

  1. virtio前后端在QEMU/KVM中的實現

virtio在虛QEMU擬機內核中實現了前端驅動,在QEMU中實現了后端模擬設備,前后端之間通過虛擬隊列(Virtqueue)通信交換數據。針對不同的總線機制,virtio設備有不同的實現方式,因為PCI設備是最廣泛使用的設備,所以我們以virtio的PCI網卡為例子進行講解。virtio-net前后端的實現如圖2所表示。

圖[1]. virtio-net前后端在QEMU/KVM中的實現

  • virtio設備發現和初始化

在虛擬機啟動之后,virtio前端驅動會把自己標識成一個PCI設備,其中包括PCI廠家標識符,PCI設備標識符。這樣虛擬機的內核可以基于這個標識符判斷使用哪種驅動程序。因為虛擬機中的Linux內核已經包括了virtio驅動程序,所以virtio驅動會被調用去初始化這個virtio設備。除了完成PCI設備通常的初始化操作之外,virtio前端驅動還在初始化的過程中和后端設備模擬程序協商特性位(Feature Bits),并把最終的結果記錄在設備狀態(Device Status)中。具體的實現代碼可以參考內核代碼在linux-3.10.0-957.1.3.el7/drivers/virtio/virtio.c中的virtio_dev_probe()函數,如圖2所示。

圖2. virtio設備初始化,協商特性并最終設置設備狀態位

這里有兩個比較重要的數據結構需要介紹一下。

  • 特性位(Feature Bits),用來表示設備所能支持的特性。在virtio設備初始化的時候,驅動會去讀取特性位,并且告訴設備哪些是它能接受特性。如果后端模擬設備升級了,使能了某個新特性,但是虛擬機里面的驅動還不能識別的話,那么兩者就是通過特性進行協商。
  • 設備狀態位(Device Status),用來表示設備的當前狀態。在virtio設備發現,初始化和特性協商的過程中,都可以查看設備狀態位的方式查看virtio設備的狀態。比如,virtio_CONFIG_S_FEATURES_OK表示特性協商成功,virtio_CONFIG_S_DRIVER_OK表示驅動已經配置成功。
  • virtio網卡發送數據處理過程

虛擬隊列(Virtqueue)是被用來在virtio前端驅動和virtio后端模擬設備之間雙向數據傳輸的數據結構。每個virtio設備都維護著一個或者多個虛擬隊列。以virtio網絡設備為例,它至少維護兩個虛擬隊列,一個用來存儲要發送的數據,一個用來存儲接收的收據。每個虛擬隊列數據結構都由三部分組成,分別是descriptor table,available ring和used ring。

  • descriptor table用來描述一組緩存,是virtio前端驅動創建的。和緩存相關的信息主要是物理地址和長度;緩存數組的數量是有隊列大小(Queue Size)決定的;
  • available ring是給virtio前端驅動給virtio后端模擬設備傳輸數據時使用的,比如虛擬機用virtio-net設備發送數據的時候,所發送的數據就會先緩存在這里,再通知virtio后端模擬設備來讀取;也就是說available ring的緩存,只能讓前端寫,后端讀;
  • used ring是給virtio后端模擬設備給virtio前端驅動傳輸數據時使用的,比如virtio后端模擬設備從tap網絡接口收到數據之后,會把收到的數據緩存到這里,再通知virtio前端驅動程序;也就是說used ring的緩存,只能讓后端寫,前端讀;

圖3. Virtio規范中虛擬隊列的定義

圖4. used ring和available ring在virtio規范中的定義

下面我們以虛擬機發送數據為例,結合Linux 3.10和QEMU1.5的代碼實現,詳細說明一下在QEMU/KVM場景下具體的實現過程。

virtio前端驅動填充數據包,并發出通知

QEMU虛擬機內的virtio網卡驅動在初始化的時候,會和其他的網絡驅動一樣注冊發送函數xmit_skb()。具體的實現如圖5,6所示,所以虛擬機內的virtio網卡發送數據的時候,會調用預先注冊的函數xmit_skb()。要發送的數據會調用virtqueue_add_outbuf()放置在available ring中。最終在virtqueue_add_outbuf()函數中,會調用virtqueue_kick()函數,并進一步調用virtqueue_notify()函數。在virtqueue_notify()函數中,如圖7所表示的virtio前端通過I/O寫寄存器的方式通知virtio后端模擬設備。這部分前端驅動的代碼在drivers/virtio/virtio_ring.c中。

圖5. virtio設備發送數據報文

圖6. virtio前端驅動通知QEMU

圖7. virtio通知函數最終會寫寄存器

KVM截獲I/O后通知后端

虛擬機virtio前端驅動程序發送通知的函數最終是執行I/O寫指令。在QEMU/KVM環境中,虛擬機執行I/O指令,會觸發VMExit。在KVM的VMExit代碼中會判斷退出的原因,I/O操作對應的處理函數是handle_io(),具體的代碼在linux-3.10.0-957.1.3.el7/arch/x86/kvm/vmx.c,如圖8所示。最終再經由KVM通知到QEMU中的virtio-net后端模擬設備,其中還涉及到KVM和eventfd等通信機制,因限于篇幅在這里不詳細描述了。

圖8. KVM中處理I/O操作導致的VMExit代碼

virtio后端模擬設備處理通知

如圖8所表示的,在接收到來自KVM的通知之后,QEMU后端設備模擬程序會調用virtio_queue_host_notifier_read()函數,進而調用預先注冊的函數virtio_ioprt_write()處理來自前端驅動的I/O寫操作。在接收到前端發來的通知之后,會調用virtio_queue_notify()函數進行處理。在接收網絡數據包的時候,virtio_queue_notify()會再進一步調用virtio-net網絡設備注冊的數據包接收函數virtio_net_handle_rx()。如圖9所表示的,在qemu_flush_queued_packets()中,QEMU會把數據復制到對應的隊列中(QEMU中對應后端的不同tap都維護著不同的隊列),之后再調用qemu_notify_event()通知virtio前端,最終會調用kvm_set_irq()觸發vCPU的中斷的方式通知virtio前端。

圖9. virtio后端設備接收通知后的處理

圖10. virtio-net預先注冊的數據報接收函數

圖11. virtio后端設備處理前端發送的數據包

參考鏈接:

【1】Deep dive into Virtio-networking and vhost-net(https://www.redhat.com/en/blog/deep-dive-virtio-networking-and-vhost-net)

本文轉載自微信公眾號「Linux閱碼場」,可以通過以下二維碼關注。轉載本文請聯系Linux閱碼場公眾號。

孫雷,曾在聯想研究院和NEC研究院工作10年,任資深研究員,研發經理。

負責云計算底層技術,包括軟件定義網絡(SDN),云網絡(OpenStack),

數據面加速等等。

2020年起開始創業,北京守志科技有限公司創始人。

 

責任編輯:武曉燕 來源: Linux閱碼場
相關推薦

2021-02-14 16:49:22

Linux虛擬化Virtio

2025-02-05 11:43:28

2025-07-14 02:22:00

2013-05-15 14:32:09

虛擬化數據復制

2020-11-25 10:55:56

云計算

2013-05-28 17:30:07

2009-11-06 16:48:03

WCF簡介

2021-09-06 06:45:06

WebpackMindMasterEntry

2021-05-07 06:42:51

Vhost-NetLinux虛擬化

2020-03-10 18:30:06

GPU虛擬化FPGA

2010-05-27 17:41:09

2018-05-08 15:16:59

內存虛擬化處理器

2018-04-17 15:03:40

CPU虛擬化半虛擬化

2012-10-29 13:52:51

應用虛擬化

2009-04-14 19:22:51

Vmware服務器虛擬化虛擬化

2012-06-06 09:36:28

服務器虛擬化

2009-03-24 18:26:58

Vmwareesx服務器虛擬化

2009-09-21 15:11:54

虛擬化基礎知識

2009-08-13 15:49:18

ASP.NET性能優化

2021-08-11 06:34:14

ZabbixDocker運維
點贊
收藏

51CTO技術棧公眾號

亚洲最大在线| 老牛影视精品| 国产激情偷乱视频一区二区三区| 欧美精品免费播放| 极品白嫩的小少妇| 欧美少妇网站| 中文字幕亚洲不卡| 国产一区二区高清不卡| 亚洲天堂视频在线播放| 一本精品一区二区三区| 精品盗摄一区二区三区| 国产v亚洲v天堂无码久久久| a在线免费观看| jizz一区二区| 成人h视频在线| 国产精品视频久久久久久久| 国产精品久久久久久久| 亚洲精品国产免费| 波多野结衣免费观看| 色戒汤唯在线观看| 亚洲精品水蜜桃| 欧美综合77777色婷婷| 亚洲第一成年人网站| 日韩福利视频导航| 国内精品小视频在线观看| 欧美亚洲色综久久精品国产| 久久影院资源站| 欧美一区二区三区电影| 九九九在线观看视频| av丝袜在线| 亚洲另类在线视频| 亚洲国产欧洲综合997久久 | 超碰在线caoporn| 国产日韩欧美综合在线| 国产视频99| 亚洲AV午夜精品| 看电视剧不卡顿的网站| 热草久综合在线| 国产精品7777777| 在线看片不卡| 日韩色av导航| 黄色国产在线播放| 精品高清在线| 亚洲天堂av电影| 人妻熟女aⅴ一区二区三区汇编| 亚洲啊v在线免费视频| 欧美高清性hdvideosex| 国内国产精品天干天干| 成人午夜毛片| 在线看日本不卡| 熟女人妇 成熟妇女系列视频| 午夜欧美激情| 精品动漫一区二区| 妺妺窝人体色777777| 欧美草逼视频| 亚洲成人激情综合网| 国产爆乳无码一区二区麻豆| 午夜影院免费在线| 尤物av一区二区| 国产午夜精品视频一区二区三区| 成人黄色在线电影| 亚洲桃色在线一区| 黄色网络在线观看| www在线观看播放免费视频日本| 最好看的中文字幕久久| 波多野结衣三级在线| 成年人黄视频在线观看| 一区二区三区色| 国产精品12345| 天堂资源在线| 欧美午夜不卡在线观看免费| 在线观看日本一区二区| 日日夜夜精品| 日韩欧美一级在线播放| 久久久久国产免费| 老牛影视av一区二区在线观看| 亚洲精品狠狠操| 真实乱视频国产免费观看| 欧美日韩中文一区二区| xxav国产精品美女主播| 欧美黑人猛猛猛| 亚洲九九精品| 国产精品久久久久久久久久久久 | 久久9999久久免费精品国产| 伊人久久综合| 国产aaa精品| 91美女精品网站| 成人一级视频在线观看| 欧美xxxx黑人又粗又长密月| porn亚洲| 亚洲一区二区av在线| 久久精品一区二| 外国成人毛片| 亚洲精品久久久久久下一站| 日本性高潮视频| 亚洲一区二区三区无吗| 97色在线观看| 又污又黄的网站| 高清成人在线观看| 欧洲一区二区在线| 伊人影院蕉久影院在线播放| 欧美性感美女h网站在线观看免费| 国产小视频精品| 在线播放一区二区精品视频| 亚洲人成欧美中文字幕| 少妇久久久久久被弄高潮| 亚洲欧美春色| 亚洲精品免费网站| 久久伊伊香蕉| 亚洲成人第一页| 在线观看国产一级片| 久久精品亚洲成在人线av网址| 色偷偷88888欧美精品久久久| 日韩精品国产一区二区| 六月丁香综合在线视频| 久久精品日产第一区二区三区| 欧美成人三区| 日韩欧美亚洲成人| 深爱五月综合网| 欧美熟乱15p| 欧美整片在线观看| 亚洲成人黄色片| 亚洲欧美怡红院| 91av在线免费播放| 福利片一区二区| 久久久www成人免费精品| 一级黄色大片视频| 成人三级在线视频| 麻豆md0077饥渴少妇| 久久精品女人天堂av免费观看| 欧美变态口味重另类| 久久久久99精品成人| 亚洲一区成人| 国产日本一区二区三区| 污污的网站在线看| 欧美男生操女生| 国产毛片欧美毛片久久久| 国产偷自视频区视频一区二区| 亚洲a在线播放| 欧美三级黄网| 欧美日本一区二区三区| 中字幕一区二区三区乱码| 模特精品在线| 裸模一区二区三区免费| 国模精品视频| 亚洲国产91色在线| 日本中文字幕免费观看| 99热精品一区二区| 日本手机在线视频| 国产精品毛片av| 欧美精品videosex牲欧美| 国产高潮在线观看| 一区二区视频在线| 免费人成视频在线播放| 一本一道久久综合狠狠老| 国产一区欧美二区三区| 91在线视频| 欧美日韩亚洲综合在线| 可以免费看av的网址| 麻豆一区二区在线| 中文字幕在线亚洲三区| 国产亚洲观看| 欧美精品情趣视频| 高清国产mv在线观看| 亚洲国产精品久久人人爱| 日本国产在线视频| 亚洲欧美激情诱惑| 日韩美女一区| 自拍偷拍欧美日韩| 欧美国产亚洲精品久久久8v| 色欲av永久无码精品无码蜜桃| 香蕉影视欧美成人| 久久精品成人av| 视频一区免费在线观看| 亚洲欧洲日韩综合二区| 日韩成人久久| 青青青国产精品一区二区| melody高清在线观看| 日韩一区二区三区视频在线| 国产超碰人人爽人人做人人爱| 久久久www成人免费毛片麻豆 | 国产一区二区伦理| 嫩草影院中文字幕| 啄木系列成人av电影| 国产日韩精品在线播放| 欧美韩日亚洲| 在线午夜精品自拍| 囯产精品久久久久久| 色噜噜夜夜夜综合网| 日韩av网站在线播放| 成人av在线一区二区三区| 成人一级片网站| 国产精品久久久久蜜臀 | 欧美又大又硬又粗bbbbb| av中文字幕在线| 日韩欧美中文字幕精品| 天堂中文字幕在线观看| 中文字幕日本乱码精品影院| 欧美日韩一区二区三区四区五区六区| 日韩电影网1区2区| 欧美在线观看黄| 国产在线观看91一区二区三区| 91在线网站视频| 国产精品一区二区av影院萌芽| 不卡av日日日| 嫩草在线播放| 精品免费视频.| 亚洲熟妇av乱码在线观看| 亚洲成人av资源| 性生交大片免费全黄| 99视频有精品| 久久发布国产伦子伦精品| 久久综合中文| 久久精品国产sm调教网站演员| 日韩免费视频| 欧美日韩国产综合在线| 成人影院中文字幕| 成人淫片在线看| 免费污视频在线一区| 午夜精品一区二区三区在线视频| 欧美精品电影| 中文字幕久热精品视频在线| 亚洲 精品 综合 精品 自拍| 日韩一级高清毛片| 中国a一片一级一片| 精品国产鲁一鲁一区二区张丽| 久草中文在线视频| 亚洲日本护士毛茸茸| 懂色av蜜桃av| 久久久亚洲午夜电影| 国产伦精品一区三区精东| 国产一区三区三区| 孩娇小videos精品| 天堂av在线一区| 亚洲色欲综合一区二区三区| 99av国产精品欲麻豆| 欧美 日韩 国产精品| 亚洲成av人片乱码色午夜| 日韩欧美一区二区三区久久婷婷| 亚瑟一区二区三区四区| 国产欧美一区二区三区不卡高清| 免费观看亚洲视频大全| 91色琪琪电影亚洲精品久久| 黄色日韩网站| 国产日韩欧美夫妻视频在线观看| 成人国产精品入口免费视频| 国产精品高潮粉嫩av| 高清av一区| 国产精品女主播| 久久婷婷五月综合色丁香| 国产精品丝袜久久久久久高清| 丁香婷婷久久| 国产免费亚洲高清| 色成人综合网| 亚洲v日韩v综合v精品v| 免费观看在线一区二区三区| 91原创国产| 嫩草国产精品入口| 欧美精品一区二区三区久久| 国产a久久精品一区二区三区| 欧美日韩系列| 久久电影院7| 麻豆md0077饥渴少妇| 欧美日本精品| 国产深夜男女无套内射| 久久人人精品| 亚洲欧美自偷自拍另类| 国产裸体歌舞团一区二区| 蜜桃视频无码区在线观看| 成人免费毛片高清视频| 亚洲黄色在线网站| 国产午夜精品一区二区三区视频 | 日本五十肥熟交尾| 久久久综合激的五月天| 妖精视频在线观看免费| 亚洲日本韩国一区| 日本少妇激情视频| 欧美国产专区| 欧美孕妇与黑人孕交| 涩涩涩在线视频| 国产精品1234| 国产成年精品| 好吊色欧美一区二区三区四区| 蜜桃一区二区三区| 中文字幕av导航| 1024日韩| 最新天堂中文在线| 国产a级毛片一区| 成年人网站免费看| 亚洲天堂福利av| 91九色丨porny丨肉丝| 欧美无砖专区一中文字| www.激情五月| 国产一区二区三区视频| 亚洲色图美国十次| 热草久综合在线| 日韩成人在线观看视频| 免费一区二区三区在在线视频| 99成人在线视频| 免费国产黄色网址| 麻豆一区二区三区| 中文字幕av观看| 亚洲色图在线看| 黄色在线观看国产| 日韩一区二区在线看片| 邻居大乳一区二区三区| 欧美成人sm免费视频| 另类专区亚洲| 成人免费看片网站| 日韩精品久久| 欧美黄色免费影院| 成人一区二区三区视频在线观看 | 韩国19禁主播vip福利视频| 午夜激情成人网| 福利视频久久| **女人18毛片一区二区| 国产熟女高潮视频| 成人免费毛片aaaaa**| 懂色av蜜臀av粉嫩av永久| 欧美性猛交xxxx黑人| 亚洲国产精品久久人人爱潘金莲 | 美女视频黄免费的久久 | 国产精品乱码人人做人人爱| aaa人片在线| 欧美大片一区二区| 婷婷视频在线| 国产精品对白刺激| 伊人久久大香线蕉综合网站| 欧美无砖专区免费| 国产伦精品一区二区三区视频青涩| 人妻av无码一区二区三区| 天天色天天爱天天射综合| 亚洲精品一区二区三区区别| 草民午夜欧美限制a级福利片| 97精品国产综合久久久动漫日韩| 欧美日韩精品免费观看视一区二区 | 国产精品中文字幕欧美| 91香蕉国产视频| 欧美色图片你懂的| 欧美69xxxxx| 日韩**中文字幕毛片| 亚洲人成亚洲精品| 中国丰满人妻videoshd | 欧美一卡二卡| av免费精品一区二区三区| 欧美三级不卡| 亚洲欧洲日韩综合| 亚洲一区二区不卡免费| 欧美一级特黄aaaaaa大片在线观看| 欧美成人免费在线观看| 久久影院一区二区三区| 超碰10000| 国产69精品久久777的优势| 国产精品成人久久| 亚洲第一精品夜夜躁人人爽| 18video性欧美19sex高清| 精选一区二区三区四区五区| 亚洲欧美日韩综合国产aⅴ| 国产熟妇搡bbbb搡bbbb| 日本精品免费观看高清观看| 国产高清美女一级毛片久久| 国产精品中文字幕在线观看| 久久国产精品亚洲人一区二区三区 | 538在线视频| 麻豆一区区三区四区产品精品蜜桃| 亚洲欧美卡通另类91av| 男人天堂av电影| 欧美午夜精品久久久久久孕妇| www久久日com| 国产伦精品一区二区三| 亚洲欧美日本日韩| 欧美人与禽zoz0善交| 91精品在线免费| av岛国在线| 日韩福利二区| 国产河南妇女毛片精品久久久 | 欧美色图在线观看| 超碰在线观看免费版| 国产综合色一区二区三区| 久久一区二区三区超碰国产精品| 黄色av免费播放| 日韩一区二区三区视频在线观看| av在线视屏| 亚洲国产欧美一区二区三区不卡| 国产福利91精品一区| 97久久久久久久| 色久欧美在线视频观看| 超碰地址久久| 鲁一鲁一鲁一鲁一av| 亚洲综合区在线| jizzjizz在线观看| 99热在线播放| 青青草成人在线观看| 青青草免费av| 中文字幕日韩av综合精品| 2023国产精华国产精品| 老头吃奶性行交视频| 一区二区三区蜜桃网| 国产视频网站在线| 91九色露脸|