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

Linux虛擬化KVM-Qemu分析之Virtqueue

云計(jì)算 虛擬化
Virtqueue這種設(shè)計(jì)思想比較巧妙,不僅用在virtio中,在AMP系統(tǒng)中處理器之間的通信也能看到它的身影。

 [[390061]]

本文轉(zhuǎn)載自微信公眾號(hào)「LoyenWang」,作者LoyenWang。轉(zhuǎn)載本文請(qǐng)聯(lián)系LoyenWang公眾號(hào)。

背景

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

說(shuō)明:

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

1. 概述

汪汪汪,最近忙成狗了,一下子把我更新的節(jié)奏打亂了,草率的道個(gè)歉。

  • 前邊系列將Virtio Device和Virtio Driver都已經(jīng)講完,本文將分析virtqueue;
  • virtqueue用于前后端之間的數(shù)據(jù)交換,一看到這種數(shù)據(jù)隊(duì)列,首先想到的就是ring-buffer,實(shí)際的實(shí)現(xiàn)會(huì)是怎么樣的呢?

2. 數(shù)據(jù)結(jié)構(gòu)

先看一下核心的數(shù)據(jù)結(jié)構(gòu):

  • 通常Virtio設(shè)備操作Virtqueue時(shí),都是通過(guò)struct virtqueue結(jié)構(gòu)體,這個(gè)可以理解成對(duì)外的一個(gè)接口,而Virtqueue機(jī)制的實(shí)現(xiàn)依賴于struct vring_virtqueue結(jié)構(gòu)體;
  • Virtqueue有三個(gè)核心的數(shù)據(jù)結(jié)構(gòu),由struct vring負(fù)責(zé)組織:
  1. struct vring_desc:描述符表,每一項(xiàng)描述符指向一片內(nèi)存,內(nèi)存類型可以分為out類型和in類型,分別代表輸出和輸入,而內(nèi)存的管理都由驅(qū)動(dòng)來(lái)負(fù)責(zé)。該結(jié)構(gòu)體中的next字段,可用于將多個(gè)描述符構(gòu)成一個(gè)描述符鏈,而flag字段用于描述屬性,比如只讀只寫(xiě)等;
  2. struct vring_avail:可用描述符區(qū)域,用于記錄設(shè)備可用的描述符ID,它的主體是數(shù)組ring,實(shí)際就是一個(gè)環(huán)形緩沖區(qū);
  3. struct vring_used:已用描述符區(qū)域,用于記錄設(shè)備已經(jīng)處理完的描述符ID,同樣,它的ring數(shù)組也是環(huán)形緩沖區(qū),與struct vring_avail不同的是,它還記錄了設(shè)備寫(xiě)回的數(shù)據(jù)長(zhǎng)度;

這么看,當(dāng)然是有點(diǎn)不太直觀,所以,下圖來(lái)了:

  • 簡(jiǎn)單來(lái)說(shuō),驅(qū)動(dòng)會(huì)分配好內(nèi)存(scatterlist),并通過(guò)virtqueue_add添加到描述表中,這樣描述符表中的條目就都能對(duì)應(yīng)到具體的物理地址了,其實(shí)可以把它理解成一個(gè)資源池子;
  • 驅(qū)動(dòng)可以將可用的資源更新到struct vring_avail中,也就是將可用的描述符ID添加到ring數(shù)組中,熟悉環(huán)形緩沖區(qū)的同學(xué)應(yīng)該清楚它的機(jī)制,通過(guò)維護(hù)頭尾兩個(gè)指針來(lái)進(jìn)行管理,Driver負(fù)責(zé)更新頭指針(idx),Device負(fù)責(zé)更新尾指針(Qemu中的Device負(fù)責(zé)維護(hù)一個(gè)last_avail_idx),頭尾指針,你追我趕,生生不息;
  • 當(dāng)設(shè)備使用完了后,將已用的描述符ID更新到struct vring_used中,vring_virtqueue自身維護(hù)了last_used_idx,機(jī)制與struct vring_avail一致;

3. 流程分析

3.1 發(fā)送

當(dāng)驅(qū)動(dòng)需要把數(shù)據(jù)發(fā)送給設(shè)備時(shí),流程如上圖所示:

①A表示分配一個(gè)Buffer并添加到Virtqueue中,①B表示從Used隊(duì)列中獲取一個(gè)Buffer,這兩種中選擇一種方式;

②表示將Data拷貝到Buffer中,用于傳送;

③表示更新Avail隊(duì)列中的描述符索引值,注意,驅(qū)動(dòng)中需要執(zhí)行memory barrier操作,確保Device能看到正確的值;

④與⑤表示Driver通知Device來(lái)取數(shù)據(jù);

⑥表示Device從Avail隊(duì)列中獲取到描述符索引值;

⑦表示將描述符索引對(duì)應(yīng)的地址中的數(shù)據(jù)取出來(lái);

⑧表示Device更新Used隊(duì)列中的描述符索引;

⑨與⑩表示Device通知Driver數(shù)據(jù)已經(jīng)取完了;

3.2 接收

當(dāng)驅(qū)動(dòng)從設(shè)備接收數(shù)據(jù)時(shí),流程如上圖所示:

①表示Device從Avail隊(duì)列中獲取可用描述符索引值;

②表示將數(shù)據(jù)拷貝至描述符索引對(duì)應(yīng)的地址上;

③表示更新Used隊(duì)列中的描述符索引值;

④與⑤表示Device通知Driver來(lái)取數(shù)據(jù);

⑥表示Driver從Used隊(duì)列中獲取已用描述符索引值;

⑦表示將描述符索引對(duì)應(yīng)地址中的數(shù)據(jù)取出來(lái);

⑧表示將Avail隊(duì)列中的描述符索引值進(jìn)行更新;

⑨與⑩表示Driver通知Device有新的可用描述符;

3.3 代碼分析

代碼的分析將圍繞下邊這個(gè)圖來(lái)展開(kāi)(Virtio-Net),偷個(gè)懶,只分析單向數(shù)據(jù)發(fā)送了:

3.3.1 virtqueue創(chuàng)建

  • 之前的系列文章分析過(guò)virtio設(shè)備和驅(qū)動(dòng),Virtio-Net是PCI網(wǎng)卡設(shè)備驅(qū)動(dòng),分別會(huì)在virtnet-probe和virtio_pci_probe中完成所有的初始化;
  • virtnet_probe函數(shù)入口中,通過(guò)init_vqs完成Virtqueue的初始化,這個(gè)逐級(jí)調(diào)用關(guān)系如圖所示,最終會(huì)調(diào)用到vring_create_virtqueue來(lái)創(chuàng)建Virtqueue;
  • 這個(gè)創(chuàng)建的過(guò)程中,有些細(xì)節(jié)是忽略的,比如通過(guò)PCI去讀取設(shè)備的配置空間,獲取創(chuàng)建Virtqueue所需要的信息等;
  • 最終就是圍繞vring_virtqueue數(shù)據(jù)結(jié)構(gòu)的初始化展開(kāi),其中vring數(shù)據(jù)結(jié)構(gòu)的內(nèi)存分配也都是在驅(qū)動(dòng)中完成,整個(gè)結(jié)構(gòu)體都由驅(qū)動(dòng)來(lái)管理與維護(hù);

3.3.2 virtio-net驅(qū)動(dòng)發(fā)送

  • 網(wǎng)絡(luò)數(shù)據(jù)的傳輸在驅(qū)動(dòng)中通過(guò)start_xmit函數(shù)來(lái)實(shí)現(xiàn);
  • xmit_skb函數(shù)中,sg_init_table初始化sg列表,sg_set_buf將sg指向特定的buffer,skb_to_sgvec將socket buffer中的數(shù)據(jù)填充sg;
  • 通過(guò)virtqueue_add_outbuf將sg添加到Virtqueue中,并更新Avail隊(duì)列中描述符的索引值;
  • virtqueue_notify通知Device,可以過(guò)來(lái)取數(shù)據(jù)了;

3.3.3 Qemu virtio-net設(shè)備接收

  • Guest驅(qū)動(dòng)寫(xiě)寄存器操作時(shí),陷入到KVM中,最終Qemu會(huì)捕獲到進(jìn)行處理,入口函數(shù)為kvm_handle_io;
  • Qemu中會(huì)針對(duì)IO內(nèi)存區(qū)域設(shè)置讀寫(xiě)的操作函數(shù),當(dāng)Guest進(jìn)行IO操作時(shí),最終觸發(fā)操作函數(shù)的調(diào)用,針對(duì)Virtio-Net,由于它是PCI設(shè)備,操作函數(shù)為virtio_pci_config_write;
  • virtio_pci_config_write函數(shù)中,對(duì)Guest的寫(xiě)操作進(jìn)行判斷并處理,比如在VIRTIO_PCI_QUEUE_NOTIFY時(shí),調(diào)用virtio_queue_notify,用于處理Guest驅(qū)動(dòng)的通知,并最終回調(diào)handle_output函數(shù);
  • 針對(duì)Virtio-Net設(shè)備,發(fā)送的回調(diào)函數(shù)為virtio_net_handle_tx_bh,并在virtio_net_flush_tx中完成操作;
  • 通用的操作模型:通過(guò)virtqueue_pop從Avail隊(duì)列中獲取地址,將數(shù)據(jù)進(jìn)行處理,通過(guò)virtqueue_push將處理完后的描述符索引更新到Used隊(duì)列中,通過(guò)virtio_notify通知Guest驅(qū)動(dòng);
  • Virtqueue這種設(shè)計(jì)思想比較巧妙,不僅用在virtio中,在AMP系統(tǒng)中處理器之間的通信也能看到它的身影。

草草收?qǐng)隽耍禄匾?jiàn)。

參考

https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels

Virtual I/O Device Version 1.1

責(zé)任編輯:武曉燕 來(lái)源: LoyenWang
相關(guān)推薦

2021-02-14 16:49:22

Linux虛擬化Virtio

2021-05-07 06:42:51

Vhost-NetLinux虛擬化

2020-11-23 07:19:15

Linux虛擬化KVM

2023-08-17 16:51:00

虛擬化QEMUKVM

2020-06-18 16:39:10

KVM虛擬化虛擬機(jī)

2015-09-25 16:18:36

2019-11-12 14:48:00

Linux桌面虛擬化KVM

2024-12-27 15:28:10

HBAFC-SAN存儲(chǔ)

2018-06-05 14:28:25

KVM嵌套虛擬化

2019-06-27 15:38:52

KVM虛擬化開(kāi)源

2013-03-07 10:02:13

IBMKVM

2012-12-28 10:18:03

LinuxXenKVM

2019-08-22 16:26:02

LinuxKVM虛擬化

2013-05-23 13:56:12

IBMKVM特點(diǎn)

2015-09-18 09:33:03

2013-04-07 09:33:31

開(kāi)源虛擬化KVM

2013-04-08 10:08:22

開(kāi)源虛擬化KVM

2015-09-09 17:25:06

2013-05-29 15:33:01

開(kāi)源虛擬化KVM

2020-01-02 10:34:32

Linux虛擬化Docker
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美日韩一区二区三区在线免费观看 | 欧美一区二区在线视频| 亚洲精品国产suv一区88| 欧美特黄一级视频| 日韩影院精彩在线| 欧美国产乱视频| av中文字幕免费观看| 成人影院网站ww555久久精品| 亚洲h动漫在线| 夜夜爽99久久国产综合精品女不卡| 午夜精品久久久久久久第一页按摩| 先锋亚洲精品| 九九精品在线观看| 91成人在线免费视频| 白嫩亚洲一区二区三区| 欧美日韩在线免费观看| 激情视频小说图片| av在线免费播放网站| 成人免费看视频| 国产精品99久久久久久www| 久久久久成人网站| 欧美韩日高清| 国产亚洲欧美日韩一区二区| 中文字幕在线观看91| 欧美与亚洲与日本直播| 五月天网站亚洲| 男人草女人视频| 永久免费av片在线观看全网站| aa级大片欧美| 国产精品成人一区二区三区| 亚洲天堂自拍偷拍| 久久久xxx| 555www成人网| 精品在线播放视频| 国产精品v日韩精品v欧美精品网站| 在线观看欧美视频| 欧洲美熟女乱又伦| 伊人成综合网yiren22| 亚洲精品电影网在线观看| 亚洲国产欧美日韩在线| 999精品嫩草久久久久久99| 在线视频综合导航| 国产视频一区二区视频| 奇米777日韩| 日本黄色一区二区| 欧美黄色一级片视频| 性欧美18xxxhd| 狠狠色狠色综合曰曰| 蜜桃传媒一区二区三区| caoporn视频在线观看| 亚洲国产欧美在线| 日本中文字幕网址| 97在线超碰| 五月天欧美精品| 久久精品视频16| 天堂8中文在线最新版在线| 亚洲成年人网站在线观看| www.xxx麻豆| 国产丝袜在线观看视频| 亚洲一线二线三线久久久| 免费网站在线观看视频| 国产精品一区二区日韩| 精品久久在线播放| 日韩精品免费播放| 日韩av超清在线观看| 欧美性色综合网| 久久久久久综合网| 香蕉成人app| 亚洲国产日韩欧美在线动漫| 精品人妻一区二区三区香蕉| 狠狠色丁香婷婷综合影院| 一区二区av在线| 国产又粗又长又黄的视频| 围产精品久久久久久久| 欧美激情一级二级| 亚洲高清毛片一区二区| 日本欧美一区二区三区乱码| 91精品视频免费观看| 亚洲精品久久久久avwww潮水 | 亚洲一区二区免费在线| 亚洲国产精品无码久久| 99re视频精品| 一本一本a久久| xxxcom在线观看| 欧美亚洲国产一区在线观看网站| 亚洲精品永久视频| 超碰在线成人| 一区二区三区视频免费| 国产黄色录像片| aa亚洲婷婷| 国产精品久久97| 欧美在线 | 亚洲| 国产欧美日韩在线视频| 日本男女交配视频| 澳门av一区二区三区| 欧美一区二区三区在线看| 黄色片视频免费观看| 91日韩视频| 亚洲 日韩 国产第一| 亚洲一级视频在线观看| 成人激情文学综合网| 亚洲精品在线免费看| heyzo一区| 欧美日韩精品一区二区天天拍小说 | 一级片中文字幕| 激情五月播播久久久精品| 国产精品美女黄网| 日本电影在线观看网站| 亚洲丰满少妇videoshd| 亚洲图色中文字幕| 亚洲亚洲免费| 欧美精品精品精品精品免费| 中文字幕av网站| www.亚洲免费av| 特级毛片在线免费观看| 久久人体大尺度| 精品国产sm最大网站免费看| 日韩三级在线观看视频| 视频一区在线播放| 国产专区一区二区三区| 99热国产在线| 欧美日韩精品免费观看视频| 91中文字幕永久在线| 亚洲福利免费| av成人观看| 国产美女在线观看| 欧美日韩美少妇| 日韩毛片无码永久免费看| 欧美专区在线| 狠狠色噜噜狠狠狠狠色吗综合| 午夜影院免费在线| 欧美一级二级三级乱码| 精品伦精品一区二区三区视频密桃| 国产精品日本| 精品综合久久| а√天堂中文资源在线bt| 日韩欧美一区中文| 人妻人人澡人人添人人爽| 麻豆精品一区二区av白丝在线| 日韩精品一区二区三区外面 | 在线日本成人| 国产成人精品日本亚洲11| 丝袜美女在线观看| 日韩一区二区电影| 国产suv一区二区三区| 国产资源在线一区| 黄色一级视频播放| 国产精品亚洲综合在线观看 | 日韩精品一区二区三区av| 亚洲男人天堂九九视频| 狠狠人妻久久久久久| www日韩大片| 国产三级三级三级看三级| 欧美在线免费看视频| 国产日本欧美一区二区三区在线| 在线观看免费网站黄| 欧美日高清视频| 日本午夜在线观看| 成人激情小说乱人伦| 国产精品无码一区二区在线| 偷拍亚洲色图| 国产精品444| 日本中文在线| 日韩精品资源二区在线| 国产第100页| 久久久久国产精品麻豆| 日韩在线不卡一区| 亚洲欧美网站在线观看| 成人在线看片| 中文字幕乱码在线播放| 亚洲一级片在线看| 国产精品视频一二区| 一区二区三区在线看| 成人免费无码大片a毛片| 日本在线不卡一区| 免费在线观看污污视频| 18国产精品| 日本国产欧美一区二区三区| 在线观看麻豆| 精品久久国产老人久久综合| 亚洲欧美自拍视频| 亚洲视频精选在线| 伦理片一区二区| 六月婷婷色综合| 亚洲理论电影在线观看| 日韩dvd碟片| 国产精品.com| 国产福利亚洲| 韩国日本不卡在线| 91视频在线观看| 精品少妇一区二区三区日产乱码 | 欧美成人精品福利| 免费黄色av片| 亚洲国产精品一区二区尤物区| 欧美老熟妇乱大交xxxxx| 国产精选一区二区三区| 久久精品免费网站| 亚洲无线视频| 一区二区三区四区视频在线观看| 高清一区二区三区| 国产精品爽爽ⅴa在线观看| 福利在线免费视频| 日韩一中文字幕| 日韩av成人| 日韩美一区二区三区| 中国a一片一级一片| 偷拍一区二区三区| 久久国产波多野结衣| 国产午夜亚洲精品午夜鲁丝片| 少妇熟女视频一区二区三区 | 人妖粗暴刺激videos呻吟| 久久精品理论片| 免费在线激情视频| 亚洲网站视频| 日韩中文字幕在线不卡| 色综合咪咪久久网| 欧美高清性xxxxhd| 欧美激情极品| 国产精品久久久久久久天堂第1集| 免费成人高清在线视频| 欧美最顶级的aⅴ艳星| av有码在线观看| 欧美激情一级精品国产| 久操视频在线播放| 精品国产自在精品国产浪潮| 黄色电影免费在线看| 亚洲成人激情视频| 性少妇videosexfreexxx片| 国产精品20p| 成人一级毛片| 日韩欧美在线电影| 日韩成人动漫在线观看| 亚洲最大福利网站| va天堂va亚洲va影视| 国产精品老牛影院在线观看| sese综合| 欧美在线视频导航| 成人av观看| 欧美在线播放视频| 亚洲国产福利| 日本亚洲欧美三级| 欧美精选视频一区二区| 日韩av免费一区| 偷拍精品精品一区二区三区| 日本国产一区二区三区| 国模冰冰炮一区二区| 欧美一区视频在线| 玛雅亚洲电影| 国产精品成人播放| 视频91a欧美| 91网站在线免费观看| 日本在线成人| 国产精品免费一区二区| 久久中文资源| 欧美精品七区| 国产尤物久久久| 亚洲人成人77777线观看| 欧美xxav| av日韩在线看| 国产精品久久久亚洲一区| 国产97色在线 | 日韩| 理论片日本一区| 99视频在线观看视频| 丰满放荡岳乱妇91ww| 午夜剧场免费看| 久久精品亚洲精品国产欧美| 国产又黄又粗的视频| 自拍偷在线精品自拍偷无码专区| 一区二区在线观看免费视频| 香蕉成人伊视频在线观看| 日本视频在线观看免费| 欧美日韩精品福利| 性中国古装videossex| 日韩精品中文字幕在线观看| 国产视频网站在线| 久久国产精品影片| 性欧美freesex顶级少妇| 国产精品免费在线免费| 日韩一级淫片| 欧美日韩另类丝袜其他| 五月天久久网站| av之家在线观看| 久久精品99国产精品| 久久精品aⅴ无码中文字字幕重口| 91蜜桃免费观看视频| 国产又粗又硬又长又爽| 五月婷婷激情综合| 在线免费观看高清视频| 日韩精品最新网址| 成年人在线观看视频| 久久久久中文字幕| 国产精品一区二区免费福利视频| 国产精品乱子乱xxxx| 日韩精品四区| 国产精品久久中文字幕| 久久国产精品无码网站| 亚洲永久无码7777kkk| 亚洲色图.com| 超碰在线观看91| 亚洲成年网站在线观看| 亚洲1卡2卡3卡4卡乱码精品| 欧美一级视频在线观看| 亚洲一区二区三区久久久| 国产一区自拍视频| 日韩.com| 国产av麻豆mag剧集| 黑人精品欧美一区二区蜜桃| 李宗瑞91在线正在播放| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩大尺度| 成人av午夜电影| 日韩一级片大全| 欧美日韩精品一区二区| 久草福利在线视频| 午夜精品福利在线观看| 欧美9999| 天天做天天爱天天高潮| 日韩高清在线一区| 亚洲一区二区观看| 亚洲18色成人| 亚洲成人中文字幕在线| 久久久精品国产亚洲| 国产精品天堂蜜av在线播放| 人禽交欧美网站免费| 国产日韩专区| www.免费av| 亚洲国产综合人成综合网站| 北条麻妃一二三区| 久久亚洲精品一区| 粉嫩av一区二区三区四区五区 | 国产欧美日韩免费| 欧美猛男男男激情videos| 免费毛片网站在线观看| 国产91精品欧美| 久久久美女视频| 欧美mv日韩mv国产| 毛片网站在线看| 福利视频一区二区三区| 午夜日韩电影| 精品久久久久一区二区| 亚洲二区在线视频| 色窝窝无码一区二区三区| 高清视频欧美一级| 久久365资源| 1024av视频| 国产色产综合色产在线视频| jizz国产在线| 伊人久久久久久久久久久久久 | 久久久xxx| 一级肉体全黄裸片| 欧美美女一区二区在线观看| 日本天堂在线观看| 91亚洲精品一区| 亚洲成人在线| 国产三级国产精品| 91久久精品一区二区三区| av在线播放网| 91在线直播亚洲| 亚洲第一伊人| 蜜桃传媒一区二区亚洲| 欧美日韩视频一区二区| 免费观看成人高潮| 国产精品久久国产精品| 国产精品日韩| 午夜精品久久久久99蜜桃最新版| 91精品国模一区二区三区| 国产乱码在线| 明星裸体视频一区二区| 免费欧美在线视频| 极品盗摄国产盗摄合集| 亚洲第一级黄色片| 一区在线影院| 亚洲中文字幕无码一区二区三区| 成人国产精品免费观看视频| 日韩黄色片网站| 久久成年人视频| 外国成人在线视频| 国产成年人视频网站| 亚洲一本大道在线| 激情小视频在线观看| 亚洲自拍欧美色图| 午夜亚洲性色视频| 日本高清一二三区| 亚洲精品自拍第一页| 91麻豆精品国产综合久久久 | 日本一区二区精品视频| 国产一区二区伦理片| 国产69精品久久久久久久久久| 色一区av在线| 国产精品2023| 色18美女社区| 欧美视频免费在线| 菠萝菠萝蜜在线观看| 欧美精品一区二区视频| 国产激情偷乱视频一区二区三区| youjizz在线视频| 久久99国产精品久久久久久久久| 国产综合久久久| 精品国产一区在线| 日韩一区二区免费电影|