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

Linux虛擬化KVM-Qemu分析之Vhost-Net

云計算 虛擬化
結構體的核心圍繞著數據和通知機制,其中數據在vhost_virtqueue中體現,而通知主要是通過vhost_poll來實現,具體的細節下文將進一步描述。

 [[397740]]

本文轉載自微信公眾號「LoyenWang」,作者LoyenWang。轉載本文請聯系LoyenWang公眾號。

背景

  • Read the fucking source code! --By 魯迅
  • A picture is worth a thousand words. --By 高爾基

說明:

  • KVM版本:5.9.1
  • QEMU版本:5.0.0
  • 工具:Source Insight 3.5, Visio
  • 文章同步在博客園:https://www.cnblogs.com/LoyenWang/

1. 概述

讓我們先來看看問題的引入,在之前的virtio系列文章中,網絡虛擬化的框架如下圖所示:

  • Qemu中的virtio-net設備數據包收發,通過用戶態訪問tap設備完成的;
  • 收發過程涉及Guest OS,KVM,Qemu中的virtio-net設備,Host中的網絡協議棧等的交互,路徑長并且涉及的切換多,帶來了性能的損耗;
  • vhost-net的引入,就是將vitio-net后端設備的數據處理模塊下沉到Kernel中,從而提高整體的效率;

vhost-net的框架圖如下:

  • 從圖中可以看出,Guest的網絡數據交互直接可以通過vhost-net內核模塊進行處理,而不再需要從內核態切換回用戶態的Qemu進程中進行處理;
  • 之前的文章分析過virtio設備與驅動,針對數據傳遵循virtio協議,因此vhost-net中需要去實現virtqueue的相關機制;

本文將分析vhost-net的原理,只說重點,進入主題。

2. 數據結構

vhost-net內核模塊的層次結構如下圖:

  • struct vhost_net:用于描述Vhost-Net設備。它包含幾個關鍵字段:1)struct vhost_dev,通用的vhost設備,可以類比struct device結構體內嵌在其他特定設備的結構體中;2)struct vhost_net_virtqueue,實際上對struct vhost_virtqueue進行了封裝,用于網絡包的數據傳輸;3)struct vhost_poll,用于socket的poll,以便在數據包接收與發送時進行任務調度;
  • struct vhost_dev:描述通用的vhost設備,可內嵌在基于vhost機制的其他設備結構體中,比如struct vhost_net,struct vhost_scsi等。關鍵字段如下:1)vqs指針,指向已經分配好的struct vhost_virtqueue,對應數據傳輸;2)work_list,任務鏈表,用于放置需要在vhost_worker內核線程上執行的任務;3)worker,用于指向創建的內核線程,執行任務列表中的任務;
  • struct vhost_virtqueue:用于描述設備對應的virtqueue,這部分內容可以參考之前virtqueue機制分析,本質上是將Qemu中virtqueue處理機制下沉到了Kernel中。關鍵字段如下:1)struct vhost_poll,用于poll eventfd對應的文件,當不滿足處理請求時會添加到eventfd對應的等待隊列中,而一旦被喚醒,該結構體中的struct vhost_work(執行函數被初始化為handle_tx_kick,以發送為例)將被放置到內核線程中去執行;

結構體的核心圍繞著數據和通知機制,其中數據在vhost_virtqueue中體現,而通知主要是通過vhost_poll來實現,具體的細節下文將進一步描述。

3. 流程分析

3.1 初始化

vhost-net為內核模塊,注冊為misc設備,Qemu通過系統調用接口與內核交互,Qemu中的初始化如下圖:

  • Qemu中tap設備初始化在net_init_tap中完成,其中net_init_tap_one打開vhost-net設備文件,用于與內核的vhost-net交互;
  • vhost_set_backend_type:設置vhost的后端類型,以及vhost的操作函數集。目前有兩種vhost后端,一種是在內核態實現的virtio后端,一種是在用戶態中實現的virtio后端;
  • kernel_ops:vhost的內核操作函數集,都是一些回調函數的實現,最終會通過vhost_kernel_call-->ioctl-->vhost-net.ko路徑,進行配置;

ioctl系統調用,與驅動交互簡單來說可以分為三大類,下邊分別介紹幾個關鍵的設置:

vhost net設置

  • VHOST_SET_OWNER:底層會為調用者創建一個內核線程,對應到前文中數據結構中的vhost_worker,同時在vhost_dev結構體中還會保存調用者線程的內存空間數據結構;
  • VHOST_NET_SET_BACKEND:設置vhost-net的后端設備,比如Qemu往內核態傳遞的tap設備對應的fd,從而讓vhost-net直接與tap設備進行通信;

vhost dev設置

從Guest OS中的虛擬地址到最終的Host上的物理地址映射關系如上圖所示,如果在Guest OS中要將數據發送出去,實際上只需要將Qemu中關于Guest OS的物理地址布局信息傳遞下去,此外再結合VHOST_SET_OWNER時傳遞的內存空間信息,就可以根據映射關系找到Guest OS中的數據對應到Host之上的物理地址,完成最后搬運即可;

  • VHOST_SET_MEM_TABLE:將Qemu中的虛擬機物理地址布局信息傳遞給內核,為了解釋清楚這個問題,可以回顧一下之前內存虛擬化中的一張圖:

vhost vring設置

  • VHOST_SET_VRING_KICK:設置vhost-net模塊前端virtio驅動發送通知時觸發的eventfd,通知機制,最終觸發handle_kick函數的執行;
  • VHOST_SET_VRING_CALL:設置vhost-net后端到虛擬機virtio前端的中斷通知,參考之前文章中的irqfd機制;
  • 此外關于vring的設備還包括vring的大小,地址信息等;

上述的這些設置的流程路徑如下,只畫出了關鍵路徑:

  • 當Guest OS中的virtio-net驅動完成初始化后,會通過vp_set_status來設置狀態,以通知后端驅動已經ready,此時會觸發VM的退出并進入KVM進行異常處理,最終路由給Qemu;
  • Qemu中的vcpu線程監測異常,當檢測到KVM_EXIT_MMIO時,去回調注冊該IO區域的讀寫函數,比如virtio_pci_common_write函數,在該函數中逐級往下最終調用到vhost_net_start函數;
  • 在vhost_net_start中最終去通過kernel_ops函數集去設置底層并交互;

初始化完成后,接下來讓我們看看數據的發送與接收,為了能將整個流程表達清楚,我會將完整的圖拆分成幾個步驟來講述。

3.2 數據發送

1)

發送前的框圖如下:

  • Guest OS中的virtio-net驅動中維護兩個virtqueue,分別用于發送和接收;
  • 圖中的datagram表示的是需要發送的數據;
  • KVM模塊提供了ioeventfd和irqfd用于通知機制;
  • vhost-net模塊中創建好了vhost_worker內核線程,用于處理任務;

2)

  • 當數據包準備好之后,通過往kick fd上觸發信號,從而喚醒vhost_worker內核線程來調用handle_tx_kick進行數據的發送;
  • 當Tap/Tun不具備發送條件時,vhost_worker會poll在socket上,等待Tap/Tun的喚醒,一旦被喚醒后可以調用handle_tx_net發送;
  • 最終的handle_tx完成具體的發送;

3)

  • vhost_get_vq_desc函數在vritqueue中查找可用的buffer,并將信息存儲到iov中,以便更好的訪問;
  • sock->ops->sendmsg()函數,實際調用的是tun_sendmsg函數,在該函數中分配了skb結構體,并將iov[]中的信息傳遞過來,最終如圖中所示完成數據的拷貝和發送,通過NIC發送出去;

4)

  • 數據發送完畢后,通過irqfd機制通知vcpu;

3.3 數據接收

數據的接收是發送的逆過程,流程一致:

1)

初始化部分與發送過程一致;

Tap/Tun驅動從NIC接收到數據包,準備發送給vhost-net;

2)

  • vhost-net中的vhost_worker線程也poll在兩個fd之上,與發送端類似;
  • kick fd上觸發信號時最終調用handle_rx_kick函數,Tap/Tun對應的socket上觸發信號時,調用handle_rx_net函數;
  • 最終通過handle_rx來完成實際的接收;

3)

  • 接收過程中,vhost_get_vq_desc獲取virtqueue中的可用buffer,并將信息存儲到iov[]中;
  • sock->ops->recvmsg()函數實際指向tun_recvmsg函數,在該函數中最終完成數據的傳遞;

4)

數據接收完成后,通過irqfd機制通過vcpu,從而在Guest OS中進行處理;

vhost-net的整體內容較多,從上到下涉及到的細節很繁瑣,短短的一篇文章難以涵蓋全部,權當給個輪廓了。

暫且告一段落吧。

參考

Introduction to virtio-networking and vhost-net

Deep dive into Virtio-networking and vhost-net

Vhost-net Device IOTLB

 

責任編輯:武曉燕 來源: LoyenWang
相關推薦

2021-03-28 18:23:22

Linux虛擬化Virtqueue

2021-02-14 16:49:22

Linux虛擬化Virtio

2020-11-23 07:19:15

Linux虛擬化KVM

2023-08-17 16:51:00

虛擬化QEMUKVM

2015-09-25 16:18:36

2020-06-18 16:39:10

KVM虛擬化虛擬機

2019-11-12 14:48:00

Linux桌面虛擬化KVM

2024-12-27 15:28:10

HBAFC-SAN存儲

2018-06-05 14:28:25

KVM嵌套虛擬化

2013-03-07 10:02:13

IBMKVM

2019-08-22 16:26:02

LinuxKVM虛擬化

2013-05-23 13:56:12

IBMKVM特點

2012-12-28 10:18:03

LinuxXenKVM

2019-06-27 15:38:52

KVM虛擬化開源

2021-04-30 09:46:08

虛擬化Virtio-Net云計算

2015-09-18 09:33:03

2013-04-08 10:08:22

開源虛擬化KVM

2015-09-09 17:25:06

2013-05-29 15:33:01

開源虛擬化KVM

2013-04-07 09:33:31

開源虛擬化KVM
點贊
收藏

51CTO技術棧公眾號

日韩欧美99| 57pao精品| 亚洲黄色小说在线观看| 欧美人与动牲性行为| 99九九99九九九视频精品| 国产不卡在线观看| 黑人狂躁日本娇小| 国产丝袜一区| 欧美色欧美亚洲高清在线视频| 亚洲第一导航| 人人妻人人玩人人澡人人爽| 鲁大师影院一区二区三区| 久久综合伊人77777尤物| 中文字幕在线免费看线人 | 国产人妖ts一区二区| 在线亚洲高清视频| www.亚洲视频.com| 国产片在线观看| 国产999精品久久久久久绿帽| 国产成人a亚洲精品| 九九视频在线免费观看| 日本一本不卡| 精品爽片免费看久久| 日本成人在线免费观看| 巨胸喷奶水www久久久免费动漫| 一区二区三区高清| 亚洲自拍偷拍二区| 国模精品一区二区| 99久久久精品免费观看国产蜜| 成人黄色免费看| 日韩 国产 欧美| 亚洲激情偷拍| 欧美国产欧美亚洲国产日韩mv天天看完整| 性の欲びの女javhd| 四虎5151久久欧美毛片| 欧美大片顶级少妇| 91香蕉国产线在线观看| 粉嫩91精品久久久久久久99蜜桃 | 成人性免费视频| a级在线观看| 亚洲欧美在线视频| 亚洲午夜精品一区二区三区| 国产区视频在线播放| 久久亚洲精品国产精品紫薇| 国产伦精品一区二区| 在线观看国产小视频| 三级一区在线视频先锋| 日本一区二区在线播放| 男人天堂2024| 久久婷婷av| 欧美综合在线第二页| 欧美a∨亚洲欧美亚洲| 99精品福利视频| 国产69精品久久久久9| 久久高清无码视频| 怡红院精品视频在线观看极品| 免费91麻豆精品国产自产在线观看| 国产在线免费av| 久久一区二区三区电影| 日韩在线视频导航| 中国一级片在线观看| 婷婷激情综合| 欧美成人午夜激情在线| 久久久国产精品人人片| 在线播放日韩| 欧美中文字幕在线视频| 亚洲精品中文字幕乱码三区91| 激情久久久久久| 91精品国产91久久久久久最新| 欧美精品亚洲精品日韩精品| 亚洲中字黄色| 国产精品男人的天堂| 国产乱码精品一区二三区蜜臂| 国产综合久久久久久鬼色 | 国模视频一区二区三区| 久久午夜免费视频| 久久精品伊人| 国产精品中文字幕在线观看| 国产欧美一级片| 成人精品免费视频| 久久久www免费人成黑人精品| 欧美巨乳在线| 国产精品的网站| 久久这里只有精品8| 一区二区精品伦理...| 欧美午夜精品一区二区三区| 欧美性受xxxx黒人xyx性爽| 哺乳挤奶一区二区三区免费看| 国产手机视频精品| www.黄色com| 国内精品久久久久久久97牛牛 | 国内精品视频在线观看| 日韩中文字幕在线视频| 日韩精品成人一区| 秋霞影院一区二区| 国产精品久久7| 搞黄视频在线观看| 亚洲一区二区视频在线观看| 999香蕉视频| 91精品国产一区二区在线观看| 日韩精品一区二区三区蜜臀| 欧美成人国产精品一区二区| 欧美91大片| 国产精品18久久久久久麻辣| 国产日韩欧美视频在线观看| 成人三级在线视频| 亚洲图片小说在线| 亚洲天堂导航| 日韩一区二区精品| 国产毛片欧美毛片久久久| 亚洲欧美综合| 国产精品亚洲美女av网站| 日本精品999| 亚洲三级免费电影| 欧美 日韩 国产 激情| 999久久精品| 日韩中文在线中文网在线观看| 国产五月天婷婷| 久久99精品一区二区三区三区| 久久久一本精品99久久精品66| av电影高清在线观看| 欧美性生交片4| 久久人人爽人人爽人人片| 狠狠爱成人网| 亚洲一区二区三区成人在线视频精品 | 免费成人在线观看视频| 欧美一区二区三区公司| 午夜激情一区二区| 日韩少妇内射免费播放| 日韩精品一区国产| xvideos成人免费中文版| 人妻丰满熟妇av无码区| 成人国产在线观看| 红桃一区二区三区| 国产精品久久免费视频| 夜色激情一区二区| 18成人在线| av电影在线观看网址| 欧美视频在线观看免费| av天堂一区二区| 午夜久久久久| 亚洲jizzjizz日本少妇| 98在线视频| 欧美专区在线观看一区| 久久只有这里有精品| 国产精品日本| 久久精品日产第一区二区三区| h片在线观看| 亚洲国产精品va在看黑人| 久久亚洲成人av| 成人午夜av在线| 一区二区在线观看网站| 成年美女黄网站色大片不卡| 亚洲老头老太hd| 三级网站在线播放| 国产欧美一区二区三区在线老狼| 日本三级免费观看| 鲁大师私人影院在线观看| 欧美日韩在线二区| 国产精品丝袜久久久久久高清| 爱久久·www| 欧美日韩精品一区视频| 91香蕉视频污在线观看| 久久99精品国产麻豆婷婷洗澡| 在线观看欧美一区| 国产精品中文| 久久免费少妇高潮久久精品99| 好吊视频一区二区三区| 五月婷婷欧美视频| 中文字幕一区二区三区人妻电影| 老牛影视一区二区三区| 亚洲国产精品一区在线观看不卡 | 极品av少妇一区二区| 国产精品美女久久久久av福利| 97久久人人超碰caoprom| 日韩国产在线播放| 天天爱天天做天天爽| 国产精品成人在线观看| 亚洲AV无码久久精品国产一区| 国产一区视频在线观看免费| 久久久精彩视频| 成人国产精品入口免费视频| 久久在线观看视频| 欧美一区,二区| 91官网在线观看| 久久高清内射无套| 91免费看片在线观看| 一区二区三区网址| 国内久久视频| 神马一区二区影院| 粉嫩一区二区三区四区公司1| 欧美一级黑人aaaaaaa做受| 亚洲免费视频一区二区三区| 欧美精品一区二区三区高清aⅴ | 日韩美女视频一区二区在线观看| 麻豆亚洲av熟女国产一区二| 久久久国产精华| 国产探花一区二区三区| 久久久777| 欧美日韩中文字幕在线| 精品人妻伦一二三区久| 日本女优在线视频一区二区| 国产91在线亚洲| 精品高清在线| 国产精品久久久一区二区三区| 日韩欧美一区二区三区免费观看| 欧美xxxx做受欧美.88| 内衣办公室在线| 欧美成va人片在线观看| 中文字幕日韩第一页| 无吗不卡中文字幕| 草视频在线观看| 中文字幕不卡的av| 国产一级二级视频| 国产美女精品一区二区三区| 少妇高清精品毛片在线视频| 红桃视频亚洲| 桥本有菜av在线| 免费一区二区三区视频导航| av资源一区二区| 96sao精品免费视频观看| 国产99久久精品一区二区| 国产高清在线a视频大全| 久久精品青青大伊人av| 成人动漫在线播放| 亚洲欧美在线免费| 污视频网站免费观看| 日韩欧美在线一区二区三区| 黄色污污网站在线观看| 亚洲va欧美va人人爽午夜| 黄色片在线观看网站| 成人免费一区二区三区在线观看| 级毛片内射视频| 91麻豆.com| xxxx黄色片| 成人av免费在线| 无码国产精品久久一区免费| 国产一区二区三区免费播放| 亚洲色图久久久| 日韩不卡一区二区| 久久精品网站视频| 久久精品综合| 成人免费无码av| 久久久久国产精品一区三寸| 日日碰狠狠添天天爽超碰97| 99精品国产在热久久| 男人添女荫道口图片| 亚洲午夜伦理| 老太脱裤子让老头玩xxxxx| 影音先锋久久| 国产精品无码人妻一区二区在线| 一区在线视频观看| 国产免费毛卡片| 美女久久一区| 国产精品视频网站| 久久中文字幕免费| 亚洲一区视频在线| 久久久久久天堂| 午夜精品福利一区二区三区av| 日本熟妇毛耸耸xxxxxx| 黄色一区二区三区| 国产嫩bbwbbw高潮| 欧美最猛性xxxxx直播| 超碰在线97观看| 91麻豆精品国产综合久久久久久| 国产精品一区二区免费视频| 日韩视频在线观看一区二区| 欧美性受xxxx狂喷水| 精品五月天久久| 91在线导航| 欧美另类xxx| 国产高清中文字幕在线| 国产91色在线免费| 亚洲国产91视频| 风间由美久久久| 美女少妇全过程你懂的久久| 亚洲精品免费在线看| 欧美99久久| 欧美一区二区三区爽大粗免费| 久久精品在线| 男女污污视频网站| 99久久精品国产精品久久| 2019男人天堂| 亚洲综合丝袜美腿| 无码人妻精品一区二区| 欧美电影影音先锋| 特黄aaaaaaaaa真人毛片| 亚洲天堂色网站| 69xxx在线| 奇米4444一区二区三区 | 成人短视频在线观看| 97久久超碰福利国产精品…| 国产一区一一区高清不卡| 99理论电影网| 国产一区99| 97中文字幕在线| 日韩精品高清不卡| 国产性猛交96| 亚洲国产经典视频| 日韩精品一区二区不卡| 欧美日韩国产一级二级| 无码精品黑人一区二区三区 | 暖暖在线中文免费日本| 国产99在线|中文| 96sao在线精品免费视频| 台湾成人av| 国产日韩1区| 性生活在线视频| 国产精品伦一区| 日韩欧美成人一区二区三区| 日韩一级黄色片| 99riav在线| 欧美午夜性色大片在线观看| 激情文学亚洲色图| av综合在线播放| 麻豆天美蜜桃91| 欧亚一区二区三区| 青青草在线视频免费观看| 欧美激情高清视频| 一级欧美视频| 日韩亚洲视频在线| 国产视频一区三区| 国产精品果冻传媒| 亚洲美女一区二区三区| 中文字幕久久久久| 亚洲网站视频福利| 男人av在线播放| 国产麻豆日韩| 黄色成人91| 免费啪视频在线观看| 亚洲日本青草视频在线怡红院 | 国模雨婷捆绑高清在线| 91久久在线视频| 欧美日韩水蜜桃| caopor在线视频| 久久综合999| 国产欧美一区二区三区在线看蜜臂| 精品乱人伦小说| 欧美24videosex性欧美| 97久久天天综合色天天综合色hd | 久久久久www| 97色婷婷成人综合在线观看| 伊人久久大香线蕉成人综合网| 日本91福利区| 亚洲毛片亚洲毛片亚洲毛片| 欧洲国内综合视频| 天天影视久久综合| 成人精品久久久| 91精品天堂福利在线观看| 天堂av8在线| 亚洲婷婷国产精品电影人久久| 91麻豆一区二区| 久久婷婷国产麻豆91天堂| 国产精品白丝久久av网站| 国产亚洲精品久久久久久久| 国产成人精品免费在线| 国产精品日日夜夜| 亚洲精品aⅴ中文字幕乱码| 日本在线高清| 人禽交欧美网站免费| 男女男精品视频网| 久久精品一区二区三区四区五区| 在线播放91灌醉迷j高跟美女| www免费在线观看| 99视频在线| 一区二区三区高清视频在线观看| 五月婷婷综合在线观看| 在线精品视频免费播放| 欧美尤物美女在线| 99re在线观看视频| 国产日韩高清一区二区三区在线| 四虎国产精品成人免费入口| 欧美日韩中文字幕一区| 污污影院在线观看| 美女三级99| 精品综合免费视频观看| 成人免费看片98| 一区二区三区四区视频精品免费| 日韩在线第三页| 成人av午夜影院| 中文文字幕一区二区三三| 美女性感视频久久久| 青青草原在线亚洲| 亚洲综合欧美激情| 亚洲国产成人91porn| 你懂的在线网址| 亚洲bt欧美bt日本bt| 亚洲美女黄网| 欧美日韩生活片| 亚洲经典中文字幕| 久久精品 人人爱| 少妇高潮毛片色欲ava片| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人免费观看视频| 无码人妻精品一区二区三区不卡| 久热精品视频在线| 欧美女王vk| 人妻精油按摩bd高清中文字幕| 色婷婷久久久久swag精品 | 三级在线播放|