国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

系統虛擬化技術virtio總體設計思想

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:孫雷 ? 2021-05-07 15:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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性能。

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

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

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

圖[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所示。

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

圖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的緩存,只能讓后端寫,前端讀;

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

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

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

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

圖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中。

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

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

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

圖6. virtio前端驅動通知QEMU

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

圖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等通信機制,因限于篇幅在這里不詳細描述了。

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

圖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前端。

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

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

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

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

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

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

文章出處:【微信公眾號:Linuxer】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    39

    文章

    8021

    瀏覽量

    144405
  • 虛擬化
    +關注

    關注

    1

    文章

    403

    瀏覽量

    30921

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    高精度云臺馬達驅動板總體設計手冊-艾畢勝

    高精度云臺是視覺采集、光電跟蹤、機載穩定系統的核心執行機構,馬達驅動板作為云臺的動力與控制核心,直接決定系統的定位精度、低速平穩性、響應速度與抗擾動能力。本手冊針對高精度云臺應用,明確驅動板總體設計
    的頭像 發表于 03-04 14:15 ?48次閱讀
    高精度云臺馬達驅動板<b class='flag-5'>總體設計</b>手冊-艾畢勝

    機載系統智能的基石:分布式網絡控制系統與容器虛擬技術的深度融合實踐

    隨著航空技術的飛速發展,機載系統正經歷從傳統分立式架構向高度綜合、智能、自動方向的深刻變革。傳統的
    的頭像 發表于 01-27 09:13 ?514次閱讀
    機載<b class='flag-5'>系統</b>智能<b class='flag-5'>化</b>的基石:分布式網絡控制<b class='flag-5'>系統</b>與容器<b class='flag-5'>虛擬</b><b class='flag-5'>化</b><b class='flag-5'>技術</b>的深度融合實踐

    開源鴻蒙技術大會2025丨虛擬與容器分論壇:構筑開源鴻蒙虛擬技術高地

    隨著開源鴻蒙技術的快速發展,各行各業、各品類的生態設備加速融入生態,當數字世界的邊界不斷拓寬,我們正站在操作系統革命的十字路口。虛擬技術
    的頭像 發表于 11-20 17:35 ?902次閱讀
    開源鴻蒙<b class='flag-5'>技術</b>大會2025丨<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>與容器分論壇:構筑開源鴻蒙<b class='flag-5'>虛擬</b><b class='flag-5'>化</b><b class='flag-5'>技術</b>高地

    車載軟件vECU虛擬測試解決方案

    虛擬測試:利用虛擬技術,實現將真實域控制器轉化為虛擬域控制器,運行在PC或服務器環境中運行,
    的頭像 發表于 10-30 09:34 ?1695次閱讀
    車載軟件vECU<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>測試解決方案

    KVM虛擬環境部署與性能優化教程

    在云計算時代,虛擬技術已經成為企業IT基礎設施的核心組件。作為一名在生產環境管理過上千臺虛擬機的運維工程師,我深知選擇正確的虛擬
    的頭像 發表于 09-08 17:13 ?1496次閱讀

    什么是服務器虛擬?一文讀懂原理、優勢與實戰部署

    什么是服務器虛擬?當企業服務器CPU利用率長期低于15%,卻仍需不斷采購新硬件應對業務增長時,一場基礎設施領域的革命早已悄然發生——服務器虛擬。這項
    的頭像 發表于 08-25 10:52 ?1192次閱讀
    什么是服務器<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>?一文讀懂原理、優勢與實戰部署

    RISC-V 虛擬堆棧和硬件的最新進展

    運行實時操作系統(RTOS)、高可靠性任務以及 Linux 等通用系統。 ? 在云計算場景中,虛擬更是 “入場券”。它為云計算提供了高可用性,例如傳統 CPU 遇到硬件故障、斷電,操
    發表于 07-18 16:00 ?3909次閱讀

    車用虛擬技術:域控融合的必經之路

    本文闡述了汽車電子架構從分布式向集中演進的趨勢,黑芝麻智能分析了集中帶來的安全隔離、實時性等關鍵挑戰,并指出車用虛擬技術是實現域控融合
    的頭像 發表于 07-05 16:14 ?1289次閱讀

    智慧閘門遠程控制系統的主要功能有哪些?

    ,輔以現地控制的指導思想,進行總體設計系統配置,保證系統投運后可實現“無人值班,少人值守”的要求。本系統具有自動
    的頭像 發表于 06-11 15:36 ?708次閱讀
    智慧閘門遠程控制<b class='flag-5'>系統</b>的主要功能有哪些?

    虛擬數據恢復—XenServer虛擬平臺上VPS不可用的數據恢復案例

    系統,運行Web服務器。有系統盤 + 數據盤兩個虛擬機磁盤。 虛擬故障: 機房斷電導致XenServer服務器中一臺VPS(Xen
    的頭像 發表于 05-30 11:35 ?691次閱讀
    <b class='flag-5'>虛擬</b><b class='flag-5'>化</b>數據恢復—XenServer<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>平臺上VPS不可用的數據恢復案例

    虛擬電廠接入新型電力微電網管理系統

    虛擬電廠的基本概念 技術支持 安科瑞 程瑜 187 0211 2087 虛擬電廠是一種基于現代信息技術和能源互聯網的能源管理模式,它將分散的、可再生能源和儲能設備通過
    的頭像 發表于 05-26 13:42 ?540次閱讀
    <b class='flag-5'>虛擬</b>電廠接入新型電力微電網管理<b class='flag-5'>系統</b>

    鴻道Intewell操作系統實時虛擬技術的優勢

    實時虛擬技術結合了實時性與虛擬的優勢,通過硬實時調度算法和輔助隔離機制,廣泛應用于工業控制、嵌入式
    的頭像 發表于 05-15 15:13 ?473次閱讀
    鴻道Intewell操作<b class='flag-5'>系統</b>實時<b class='flag-5'>虛擬</b><b class='flag-5'>化</b><b class='flag-5'>技術</b>的優勢

    如何在Centos系統中部署KVM虛擬平臺

    KVM 通過將 Linux 內核轉換為一個裸機(bare-metal)管理程序(hypervisor),使得用戶可以在單一物理主機上運行多個虛擬機(VM),每個虛擬機都擁有獨立的操作系統和資源。這樣的架構不僅提高了硬件資源的利用
    的頭像 發表于 05-09 13:40 ?918次閱讀
    如何在Centos<b class='flag-5'>系統</b>中部署KVM<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>平臺

    基于云端虛擬技術云手機解決方案

    云手機解決方案基于云端虛擬技術,通過整合軟硬件資源實現多設備集群化管理與智能操作,以下是針對不同應用場景的核心要素與技術架構解析: 一、
    的頭像 發表于 05-09 08:04 ?843次閱讀
    基于云端<b class='flag-5'>虛擬</b><b class='flag-5'>化</b><b class='flag-5'>技術</b>云手機解決方案

    虛擬數據恢復—VMware虛擬環境下重裝系統導致服務器數據丟失的數據恢復

    VMware虛擬平臺 vmfs文件系統 工作人員誤操作重裝操作系統,服務器崩潰。 重裝系統會導致文件
    的頭像 發表于 03-13 10:33 ?783次閱讀
    <b class='flag-5'>虛擬</b><b class='flag-5'>化</b>數據恢復—VMware<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>環境下重裝<b class='flag-5'>系統</b>導致服務器數據丟失的數據恢復