精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

浪潮色综合久久天堂| 国产91精品看黄网站在线观看| 色999久久久精品人人澡69| 亚洲欧美日韩电影| 欧美极品日韩| av资源免费看| 久久这里有精品15一区二区三区| 色狠狠av一区二区三区香蕉蜜桃| 日本人妻一区二区三区| 精品成人av| 一区二区三区美女| 五月天久久狠狠| 亚洲精品久久久蜜桃动漫| 日本视频一区二区| 国精产品一区一区三区有限在线| 国产精品1区2区3区4区| 人妖一区二区三区| 日韩欧美二区三区| 一道本视频在线观看| 国产精品vvv| 亚洲精品少妇30p| 日产国产精品精品a∨| 国产小视频一区| 国产制服丝袜一区| 国产精品久久久久9999| 国产稀缺真实呦乱在线| 午夜电影亚洲| 久久精品在线视频| 欧美巨胸大乳hitomi| 欧美爱爱网站| 亚洲高清av在线| 中文字幕乱妇无码av在线| 欧美黄色成人| 欧美日韩综合在线| 黄色国产小视频| 少妇视频一区| 天涯成人国产亚洲精品一区av| www.激情网| jizz性欧美| 日韩码欧中文字| 亚洲二区自拍| av基地在线| 国产农村妇女毛片精品久久麻豆 | 精品无码一区二区三区爱欲| 国产激情视频在线观看| 中文字幕一区二区在线播放| 亚洲国产精品一区在线观看不卡 | 午夜av一区二区三区| 国产精品99久久久久久人| 日韩精品视频免费看| 精品二区视频| 久久久亚洲影院| 国产亚洲欧美久久久久 | 国产夫妻自拍一区| 亚洲综合日本| 日韩欧美aaaaaa| 黄色一级片免费的| 先锋影音一区二区| 欧美一级淫片007| 精产国品一二三区| swag国产精品一区二区| 精品不卡在线视频| 欧洲精品在线视频| www.国产成人| 性8sex亚洲区入口| 国产精品美女网站| 国产精品久久久久久久久久久久久久久久| 久久99国产精品尤物| 成人午夜在线观看| www.日韩高清| 99久久精品免费看| 色999日韩自偷自拍美女| 91短视频版在线观看www免费| 中文字幕日韩一区二区| 欧美黄网在线观看| 九色porny丨国产首页在线| 色香蕉成人二区免费| 国内外成人免费在线视频| 麻豆精品久久| 亚洲精品影视在线观看| 99久久久无码国产精品不卡| 中文字幕亚洲综合久久五月天色无吗''| 九九热这里只有在线精品视| 国产污污视频在线观看| 麻豆精品一区二区综合av| 成人看片在线| 国产粉嫩一区二区三区在线观看| 一区在线观看免费| 婷婷五月综合缴情在线视频| 欧美暴力调教| 精品sm捆绑视频| 东京热无码av男人的天堂| 欧美日本一区二区高清播放视频| 5278欧美一区二区三区| 在线观看毛片网站| 91社区在线播放| 正在播放国产精品| 日本在线播放一二三区| 7777精品伊人久久久大香线蕉最新版| 无码任你躁久久久久久老妇| 日韩dvd碟片| 1769国产精品| www日本在线| 国产精品久久网站| 国产午夜福利在线播放| 精品视频一区二区三区| 亚洲人av在线影院| 日韩少妇裸体做爰视频| 国产美女一区二区| 日本最新一区二区三区视频观看| 超碰在线97国产| 欧美理论片在线| 97超碰在线免费观看| 亚洲欧美综合| 91精品视频免费观看| 青青久草在线| 午夜视频在线观看一区| 在线a免费观看| 日韩综合在线| 国产精品高潮呻吟久久av野狼| 东京干手机福利视频| 亚洲视频一区二区免费在线观看| 欧美激情成人网| 少妇精品导航| 久久免费视频在线| 亚洲av综合色区无码一区爱av| 国产精品女人毛片| 青青青在线视频免费观看| 日本精品影院| 26uuu亚洲伊人春色| 精品久久久中文字幕人妻| 性欧美丰满熟妇xxxx性久久久| 精品视频一区二区三区| 亚洲天堂第二页| 国产精品久久久久久99| 国产成人av自拍| 正在播放一区| 成人在线日韩| 久久久99免费视频| 97精品人妻一区二区三区在线| 亚洲精品国产拍免费91在线| 免费一区二区三区在线观看 | 成人免费看片网站| 91麻豆一二三四在线| 91精品国产乱| 99精品久久久久| 国产精品99久久久久久有的能看 | 国产欧美视频一区| 亚洲二区三区不卡| 亚洲一区二区三区sesese| 免费高清完整在线观看| 欧美精品一级二级三级| 中国一级片在线观看| 狠狠色丁香婷综合久久| 日韩精品福利片午夜免费观看| 久久久久久久久成人| 欧美精品一本久久男人的天堂| 99精品视频免费看| 亚洲国产cao| 欧美bbbbb性bbbbb视频| 亚洲综合好骚| 在线看无码的免费网站| 欧美日韩黄色| 欧美激情视频在线| 日韩a在线看| 欧美午夜精品久久久久久孕妇| 亚洲熟女毛茸茸| 国产成人精品亚洲777人妖 | 欧美激情免费在线| 欧美视频在线观看一区二区三区| 性做久久久久久免费观看| 美国黄色一级毛片| 麻豆精品新av中文字幕| 国产免费内射又粗又爽密桃视频 | 亚洲精品一品区二品区三品区| 欧美激情福利| 久久久久久久网站| 日本黄在线观看| 777亚洲妇女| 可以在线观看av的网站| 国产精品午夜在线观看| 亚洲妇女无套内射精| 国产精品日韩久久久| 亚洲国产一区二区三区在线| xxxx日韩| 国产精品丝袜高跟| аⅴ资源天堂资源库在线| 欲色天天网综合久久| 亚洲第一成人av| 欧洲一区二区三区在线| 久久久久久激情| 欧美国产精品中文字幕| 美女伦理水蜜桃4| 蜜臀久久99精品久久久画质超高清| 日本免费成人网| 精品国产精品国产偷麻豆| av噜噜色噜噜久久| 成人免费一区| 777国产偷窥盗摄精品视频| 黄黄的网站在线观看| 亚洲欧洲一区二区三区久久| 国产黄色片av| 欧美日韩精品电影| 国产精品自拍99| 一区二区三区四区高清精品免费观看| 国产小视频自拍| 成人美女在线视频| 婷婷中文字幕在线观看| 肉丝袜脚交视频一区二区| 91午夜在线观看| 91精品一区二区三区综合| 日本婷婷久久久久久久久一区二区| 日韩中文在线| 成人写真福利网| 韩日一区二区| 免费av一级片| 黑人巨大精品欧美一区免费视频| 午夜黄色福利视频| 久久久综合视频| 蜜桃色一区二区三区| 亚洲三级电影全部在线观看高清| 日本在线高清视频一区| 亚洲不卡在线| 成人av.网址在线网站| 桃花岛成人影院| 亚州精品天堂中文字幕| h网站久久久| 北条麻妃在线一区二区| 粉嫩一区二区三区国产精品| 精品视频久久久| 日本精品免费在线观看| 国产精品久久久久一区二区三区厕所 | 黄色资源网久久资源365| 亚洲免费看av| 免费在线观看日韩欧美| 最近免费中文字幕中文高清百度| 国产日韩欧美| 国产午夜伦鲁鲁| 国产精品尤物| 免费在线观看日韩视频| 亚洲专区在线| 免费看a级黄色片| 日日夜夜免费精品| 亚洲老女人av| 美女一区二区视频| 一二三级黄色片| 国产尤物一区二区| 日韩黄色一区二区| 成人a区在线观看| aa一级黄色片| 国产欧美一区二区三区在线看蜜臀| 91国模少妇一区二区三区| 国产亚洲欧美日韩俺去了| 国产黄色大片免费看| 国产精品不卡一区| 国产黄在线免费观看| 亚洲综合在线观看视频| 日韩精品视频播放| 欧美综合亚洲图片综合区| 97人妻精品视频一区| 欧美区一区二区三区| 国产叼嘿视频在线观看| 亚洲成人久久一区| 噜噜噜噜噜在线视频| 中文字幕9999| 欧洲一区二区三区| 91福利视频在线观看| 激情久久一区二区| 99re国产| 精品在线播放| 一区二区精品在线观看| 国产精品videosex极品| 免费欧美一级视频| 精品亚洲欧美一区| 人妖粗暴刺激videos呻吟| 久久久精品日韩欧美| 日韩毛片无码永久免费看| 亚洲精品国产a久久久久久 | 国产精品一级| 污视频网站观看| 成人黄页在线观看| 欧美福利第一页| 一区二区三区不卡视频在线观看 | 久久久久黄久久免费漫画| 欧洲成人性视频| 国产精品777777在线播放| 精品欧美一区二区精品久久| 日韩国产欧美| a在线视频观看| 精品一二线国产| 免费在线观看你懂的| 亚洲精品久久久蜜桃| 黑人精品无码一区二区三区AV| 欧美一区二区精美| 国产三级电影在线| 性欧美长视频免费观看不卡| 欧美日韩成人影院| 国产精品视频免费一区| 日本大胆欧美| 亚欧无线一线二线三线区别| 韩国成人在线视频| 永久免费毛片在线观看| 五月激情综合色| av无码精品一区二区三区宅噜噜| 亚洲人成网站色ww在线| caoprom在线| 亚洲xxx自由成熟| 不卡一区2区| 免费成人动漫| 成人免费视频网址| 日韩精品导航| 国产日韩亚洲欧美在线| 精品在线观看免费| 波多野在线播放| 欧美午夜片在线免费观看| 成 人 黄 色 片 在线播放| 日韩中文字幕欧美| 欧洲成人一区| 久久久久高清| 亚洲成人中文| 欧美激情20| 91精品国产精品| 精品国产亚洲日本| 亚洲国产精品123| 久久精品30| 特级西西人体4444xxxx| 亚洲一二三四在线| 国产欧美日韩成人| 久久精品久久久久电影| 国产极品一区| 水蜜桃一区二区三区| 日韩高清在线观看| 亚洲自拍偷拍在线| 精品99久久| 久久网站免费视频| 99精品欧美一区二区三区综合在线| 久久久久黄色片| 懂色av蜜臀av粉嫩av喷吹| 欧美日韩一区二区高清| 亚洲乱码国产乱码精品精可以看| 美女搡bbb又爽又猛又黄www| 综合久久综合久久| 亚洲影院一区二区三区| 在线观看日韩www视频免费| 日本精品网站| 亚洲精品成人自拍| 久久狠狠亚洲综合| 精品无码一区二区三区蜜臀| 欧美区视频在线观看| 国产在线二区| 国产视频一区在线播放| av中文在线播放| 亚洲欧美国产一区二区三区| 精品3atv在线视频| 少妇免费毛片久久久久久久久| 日本午夜精品视频在线观看 | 久久久999国产| 精品视频一区二区三区| 国产手机免费视频| 99久久精品免费精品国产| 天堂网视频在线| 中文字幕精品av| 日韩精品成人在线观看| 欧美在线一区视频| 国产日韩精品视频一区| 91成人一区二区三区| 欧美韩国理论所午夜片917电影| 国产精品白丝av嫩草影院| 女性女同性aⅴ免费观女性恋| 久久久精品tv| 国产乱淫av免费| 久久久日本电影| 成人免费在线观看av| 亚洲成人激情小说| 色美美综合视频| 成a人片在线观看| 好吊色欧美一区二区三区 | 99riav国产精品视频| 色综合中文字幕| 黄色片网站在线| 久久99精品久久久久久秒播放器| 天堂精品中文字幕在线| 日韩欧美综合视频| 精品视频www| 99视频这里有精品| www一区二区www免费| 亚洲欧美国产高清| 看电影就来5566av视频在线播放| 成人乱人伦精品视频在线观看| 精品成人一区| 国产精品综合激情| 日韩精品视频三区| 国产免费区一区二区三视频免费| 欧美一级在线看| 亚洲丝袜自拍清纯另类| 你懂的在线网址| 97人人模人人爽人人喊38tv| 视频一区二区国产| 久青草免费视频| www.亚洲男人天堂|