色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

系統(tǒng)虛擬化技術(shù)virtio總體設(shè)計思想

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:孫雷 ? 2021-05-07 15:40 ? 次閱讀

virtio基礎(chǔ)篇

1. virtio的提出

系統(tǒng)虛擬化技術(shù)是云計算最重要的核心技術(shù)之一。云計算平臺的資源池化,資源統(tǒng)一管理以及后續(xù)的動態(tài)分配都是基于系統(tǒng)虛擬化技術(shù)才得以實現(xiàn)的。在計算機系統(tǒng)中,主要有計算資源,存儲資源和網(wǎng)絡(luò)資源。所以,系統(tǒng)虛擬化技術(shù)又可以細分為計算虛擬化,存儲虛擬化和網(wǎng)絡(luò)虛擬化。其中存儲設(shè)備和網(wǎng)絡(luò)設(shè)備一般都是以外設(shè)的形式和CPU通過I/O總線連接起來的,所以存儲虛擬化和網(wǎng)絡(luò)虛擬化又可以統(tǒng)一歸類為I/O虛擬化技術(shù)。我們這里介紹的virtio就是當前最流行的I/O虛擬化技術(shù)。I/O虛擬化技術(shù)可以分成兩種,一種是全虛擬化,另外一種是半虛擬化。

全虛擬化:Guest OS不知道自己是虛擬機,所以也就不需要修改Guest OS的驅(qū)動程序。這樣Guest OS移植性好,但是虛擬機的I/O性能不高。

半虛擬化:Guest OS知道自己是虛擬機,通過前端驅(qū)動和后端模擬設(shè)備互相配合實現(xiàn)IO虛擬化。和全虛擬化相比,半虛擬化技術(shù)可以幫助大幅度提高虛擬機I/O的性能。目前在云計算場景中廣泛使用的就是virtio在Linux上的具體實現(xiàn),而且virtio已經(jīng)成為虛擬化I/O技術(shù)的抽象接口規(guī)范和事實標準,即使非Linux系統(tǒng)也可以適用。

2. virtio總體設(shè)計思想

virtio的總體設(shè)計思想可以概括為以下四點:直觀,高效,標準化,可擴展。1) 直觀:virtio設(shè)備被設(shè)計的和之前的硬件設(shè)備一樣,支持常用的總線機制,比如中斷和DMA。這樣的設(shè)計使得驅(qū)動開發(fā)人員能夠快速上手,完成virtio設(shè)備驅(qū)動的開發(fā)。2) 高效:virtio設(shè)備能支持單獨的輸入和輸出通道,在大量數(shù)據(jù)傳送的時候也能保持高效。3) 標準化:對硬件架構(gòu)和操作系統(tǒng)環(huán)境沒有依賴,支持多種不同總線的傳輸機制(在virtio規(guī)范1.1中支持PCI, MMIO和Channel I/O總線。比如在那些不支持PCI的嵌入式設(shè)備還可以通過使用MMIO的方式使用virtio)。4) 可擴展:在virtio設(shè)備發(fā)現(xiàn)和設(shè)備初始化的時候通過引入特性位(Feature Bits)標識符實現(xiàn)動態(tài)適配的協(xié)商機制,能夠保證virtio前端驅(qū)動和后端模擬設(shè)備之間的兼容性。

3. virtio基本原理

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

virtio前后端在QEMU/KVM中的實現(xiàn)

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

ceb1c860-aa73-11eb-9728-12bb97331649.png

圖[1]。 virtio-net前后端在QEMU/KVM中的實現(xiàn)

virtio設(shè)備發(fā)現(xiàn)和初始化

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

cecad90e-aa73-11eb-9728-12bb97331649.png

圖2. virtio設(shè)備初始化,協(xié)商特性并最終設(shè)置設(shè)備狀態(tài)位這里有兩個比較重要的數(shù)據(jù)結(jié)構(gòu)需要介紹一下。

特性位(Feature Bits),用來表示設(shè)備所能支持的特性。在virtio設(shè)備初始化的時候,驅(qū)動會去讀取特性位,并且告訴設(shè)備哪些是它能接受特性。如果后端模擬設(shè)備升級了,使能了某個新特性,但是虛擬機里面的驅(qū)動還不能識別的話,那么兩者就是通過特性進行協(xié)商。

設(shè)備狀態(tài)位(Device Status),用來表示設(shè)備的當前狀態(tài)。在virtio設(shè)備發(fā)現(xiàn),初始化和特性協(xié)商的過程中,都可以查看設(shè)備狀態(tài)位的方式查看virtio設(shè)備的狀態(tài)。比如,virtio_CONFIG_S_FEATURES_OK表示特性協(xié)商成功,virtio_CONFIG_S_DRIVER_OK表示驅(qū)動已經(jīng)配置成功。

virtio網(wǎng)卡發(fā)送數(shù)據(jù)處理過程

虛擬隊列(Virtqueue)是被用來在virtio前端驅(qū)動和virtio后端模擬設(shè)備之間雙向數(shù)據(jù)傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)。每個virtio設(shè)備都維護著一個或者多個虛擬隊列。以virtio網(wǎng)絡(luò)設(shè)備為例,它至少維護兩個虛擬隊列,一個用來存儲要發(fā)送的數(shù)據(jù),一個用來存儲接收的收據(jù)。每個虛擬隊列數(shù)據(jù)結(jié)構(gòu)都由三部分組成,分別是descriptor table,available ring和used ring。

descriptor table用來描述一組緩存,是virtio前端驅(qū)動創(chuàng)建的。和緩存相關(guān)的信息主要是物理地址和長度;緩存數(shù)組的數(shù)量是有隊列大小(Queue Size)決定的;

available ring是給virtio前端驅(qū)動給virtio后端模擬設(shè)備傳輸數(shù)據(jù)時使用的,比如虛擬機用virtio-net設(shè)備發(fā)送數(shù)據(jù)的時候,所發(fā)送的數(shù)據(jù)就會先緩存在這里,再通知virtio后端模擬設(shè)備來讀取;也就是說available ring的緩存,只能讓前端寫,后端讀;

used ring是給virtio后端模擬設(shè)備給virtio前端驅(qū)動傳輸數(shù)據(jù)時使用的,比如virtio后端模擬設(shè)備從tap網(wǎng)絡(luò)接口收到數(shù)據(jù)之后,會把收到的數(shù)據(jù)緩存到這里,再通知virtio前端驅(qū)動程序;也就是說used ring的緩存,只能讓后端寫,前端讀;

cede38dc-aa73-11eb-9728-12bb97331649.png

圖3. Virtio規(guī)范中虛擬隊列的定義

cf135292-aa73-11eb-9728-12bb97331649.png

cf1af182-aa73-11eb-9728-12bb97331649.png

圖4. used ring和available ring在virtio規(guī)范中的定義

下面我們以虛擬機發(fā)送數(shù)據(jù)為例,結(jié)合Linux 3.10和QEMU1.5的代碼實現(xiàn),詳細說明一下在QEMU/KVM場景下具體的實現(xiàn)過程。

virtio前端驅(qū)動填充數(shù)據(jù)包,并發(fā)出通知

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

cf2a1bb2-aa73-11eb-9728-12bb97331649.png

圖5. virtio設(shè)備發(fā)送數(shù)據(jù)報文

cf3a4c26-aa73-11eb-9728-12bb97331649.png

圖6. virtio前端驅(qū)動通知QEMU

cf4d8746-aa73-11eb-9728-12bb97331649.png

圖7. virtio通知函數(shù)最終會寫寄存器

KVM截獲I/O后通知后端

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

cf5f0a20-aa73-11eb-9728-12bb97331649.png

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

virtio后端模擬設(shè)備處理通知

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

cf7473f6-aa73-11eb-9728-12bb97331649.png

圖9. virtio后端設(shè)備接收通知后的處理

cf86599a-aa73-11eb-9728-12bb97331649.png

圖10. virtio-net預先注冊的數(shù)據(jù)報接收函數(shù)

cf974a52-aa73-11eb-9728-12bb97331649.png

原文標題:孫雷: 虛擬化之——virtio-net基礎(chǔ)篇

文章出處:【微信公眾號:Linuxer】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 云計算
    +關(guān)注

    關(guān)注

    39

    文章

    7824

    瀏覽量

    137450
  • 虛擬化
    +關(guān)注

    關(guān)注

    1

    文章

    373

    瀏覽量

    29806

原文標題:孫雷: 虛擬化之——virtio-net基礎(chǔ)篇

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RAID 5 在虛擬環(huán)境中的應用

    隨著信息技術(shù)的飛速發(fā)展,虛擬技術(shù)已經(jīng)成為數(shù)據(jù)中心和企業(yè)IT基礎(chǔ)設(shè)施的重要組成部分。虛擬
    的頭像 發(fā)表于 12-27 17:18 ?331次閱讀

    深入KVM虛擬之構(gòu)建高效、可擴展的虛擬環(huán)境

    的計算機,而且每個邏輯計算機 它可以是不同操作系統(tǒng) 虛擬技術(shù):可以擴大硬件容量,單個cpu模擬出多個cpu并行, 允許一個平臺上同時運行多個操作
    的頭像 發(fā)表于 11-26 17:22 ?260次閱讀
    深入KVM<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>之構(gòu)建高效、可擴展的<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>環(huán)境

    eBPF技術(shù)實踐之virtio-net網(wǎng)卡隊列可觀測

    系統(tǒng)領(lǐng)域中,最具挑戰(zhàn)性的問題通常是組件之間的邊界定位。其中,virtio-net前后端的定界尤為困難。當網(wǎng)絡(luò)報文從內(nèi)核發(fā)送到virtio-net后端,或者從virtio-net后端發(fā)
    的頭像 發(fā)表于 11-14 11:18 ?217次閱讀
    eBPF<b class='flag-5'>技術(shù)</b>實踐之<b class='flag-5'>virtio</b>-net網(wǎng)卡隊列可觀測

    虛擬數(shù)據(jù)恢復—UFS2文件系統(tǒng)數(shù)據(jù)恢復案例

    虛擬數(shù)據(jù)恢復環(huán)境: SAN環(huán)境下通過iSCSI實現(xiàn)FreeNAS,F(xiàn)reeNAS采用的UFS2文件系統(tǒng)。物理存儲架構(gòu)在一臺服務器上,另外兩臺服務器上安裝ESXi虛擬
    的頭像 發(fā)表于 11-11 11:02 ?166次閱讀

    虛擬數(shù)據(jù)恢復—XenServer虛擬機數(shù)據(jù)恢復案例

    Server操作系統(tǒng)虛擬機,該虛擬機有2塊虛擬磁盤(系統(tǒng)盤+數(shù)據(jù)盤),當作網(wǎng)站服務器使用。 服務器
    的頭像 發(fā)表于 11-08 10:32 ?150次閱讀
    <b class='flag-5'>虛擬</b><b class='flag-5'>化</b>數(shù)據(jù)恢復—XenServer<b class='flag-5'>虛擬</b>機數(shù)據(jù)恢復案例

    emc虛擬技術(shù)的應用場景

    在當今的數(shù)字化時代,企業(yè)面臨著數(shù)據(jù)爆炸式增長和業(yè)務需求不斷變化的挑戰(zhàn)。為了應對這些挑戰(zhàn),企業(yè)需要靈活、高效且可擴展的IT基礎(chǔ)設(shè)施。EMC虛擬技術(shù)正是在這樣的背景下應運而生,它通過將物理資源抽象
    的頭像 發(fā)表于 11-01 15:26 ?352次閱讀

    云計算中的虛擬技術(shù)應用

    云計算中的虛擬技術(shù)是一種將計算機物理實體(如服務器、存儲設(shè)備、網(wǎng)絡(luò)設(shè)備)通過軟件技術(shù)劃分為多個虛擬實體的
    的頭像 發(fā)表于 10-24 09:22 ?736次閱讀

    什么是虛擬機?什么是虛擬

    在日新月異的科技世界中,虛擬技術(shù)如同一座橋梁,連接著現(xiàn)實與數(shù)字的鴻溝,為我們打開了全新的計算維度。虛擬機,這一概念,自其誕生以來,就以其獨特的魅力和強大的功能,深深地影響了軟件開發(fā)、
    的頭像 發(fā)表于 09-04 14:55 ?972次閱讀

    虛擬數(shù)據(jù)恢復—XenServer虛擬平臺數(shù)據(jù)恢復案例

    虛擬數(shù)據(jù)恢復環(huán)境: 某品牌R720服務器,4塊STAT硬盤通過H710P陣列卡組建了一組raid10磁盤陣列。服務器上部署XenServer虛擬平臺,
    的頭像 發(fā)表于 07-30 13:18 ?268次閱讀
    <b class='flag-5'>虛擬</b><b class='flag-5'>化</b>數(shù)據(jù)恢復—XenServer<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>平臺數(shù)據(jù)恢復案例

    訊維數(shù)字孿生可視系統(tǒng):開啟智慧醫(yī)療虛擬手術(shù)訓練新紀元

    訊維數(shù)字孿生可視系統(tǒng)在智慧醫(yī)療虛擬手術(shù)訓練領(lǐng)域的應用,標志著該領(lǐng)域進入了全新的紀元。該系統(tǒng)通過集成先進的數(shù)字孿生技術(shù)和可視
    的頭像 發(fā)表于 05-07 16:30 ?484次閱讀

    水電站閘門遠程控制系統(tǒng)建設(shè)方案介紹

    國科ZK4000系列水電站閘門遠程控制系統(tǒng),采用了計算機、光纖網(wǎng)絡(luò)通訊和現(xiàn)場總線、現(xiàn)地控制單元、傳感器、測控軟件等多種現(xiàn)代技術(shù),遵循“技術(shù)先進、安全可靠、經(jīng)濟適用”等原則,以計算機監(jiān)
    的頭像 發(fā)表于 04-15 11:37 ?406次閱讀
    水電站閘門遠程控制<b class='flag-5'>系統(tǒng)</b>建設(shè)方案介紹

    水電站閘門遠程智能控制系統(tǒng)解決方案概述

    國科ZK4000系列水電站閘門遠程控制系統(tǒng),采用了計算機、光纖網(wǎng)絡(luò)通訊和現(xiàn)場總線、現(xiàn)地控制單元、傳感器、測控軟件等多種現(xiàn)代技術(shù),遵循“技術(shù)先進、安全可靠、經(jīng)濟適用”等原則,以計算機監(jiān)
    的頭像 發(fā)表于 04-15 11:33 ?746次閱讀
    水電站閘門遠程智能控制<b class='flag-5'>系統(tǒng)</b>解決方案概述

    配電系統(tǒng)實施總體綜合設(shè)計方案

    配電系統(tǒng)實施總體思路:根據(jù)屏體用電量,現(xiàn)場施工要求,以及配電柜所帶負荷情況,總體綜合設(shè)計配電系統(tǒng)
    發(fā)表于 03-06 10:31 ?426次閱讀
    配電<b class='flag-5'>系統(tǒng)</b>實施<b class='flag-5'>總體</b>綜合設(shè)計方案

    虛擬軟件棧有哪些防御措施

    虛擬軟件棧是一種在物理服務器上運行多個虛擬機的技術(shù),可以提高服務器資源的利用率和靈活性。然而,虛擬
    的頭像 發(fā)表于 01-25 11:27 ?768次閱讀

    美格智能LXC容器化解決方案,輕松玩轉(zhuǎn)多系統(tǒng)虛擬

    技術(shù)的優(yōu)勢在于,它突破了操作系統(tǒng)和物理硬件的局限,可以更好地整合異構(gòu)資源、集中管理及提高硬件利用率。容器技術(shù)虛擬
    的頭像 發(fā)表于 01-17 17:03 ?401次閱讀
    美格智能LXC容器化解決方案,輕松玩轉(zhuǎn)多<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>虛擬</b><b class='flag-5'>化</b>
    主站蜘蛛池模板: 红杏俱乐部| JIZZ学生13| 两个人看的www免费高清直播 | av在线观看地址| 亚洲国产精品嫩草影院永久| 免费看到湿的小黄文软件APP| 国产色婷亚洲99精品AV| a圾片目录大全| 亚洲视频无码高清在线| 日本亚洲欧洲免费旡码| 久久偷拍免费2017| 国产亚洲精品成人a在线| www.青青草原| 最新黄yyid| 亚洲日韩在线天堂一| 视频一区国产第一页| 牛牛在线视频| 老师给美女同学开嫩苞| 好妞操| 国产成人欧美日韩在线电影| 97SE亚洲国产综合在线| 伊人久在线| 亚洲欧美综合中文字幕| 午夜伦理网| 特黄特色大片免费播放器试看| 欧美videosgratis杂交| 两个人的视频日本在线观看完整| 精品精品国产yyy5857香蕉| 国产精品一区二区亚瑟不卡| 拔萝卜电视剧高清免费| jjzz韩国| avtt天堂网2014| 99精品在线播放| 3DNagoonimation动漫| 中国特级黄色大片| 中国女人精69xxxxxx视频| 在线播放一区| 中文无码在线观| 月夜直播视频免费观看| 一本一本之道高清在线观看| 亚洲妈妈精品一区二区三区|