精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

探究I/O虛擬化及Virtio接口技術(上)

jf_78858299 ? 來源:軟硬件融合 ? 作者:Chaobowx ? 2023-04-04 16:54 ? 次閱讀

I/O虛擬化是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是從I/O硬件虛擬化開始,逐漸開啟了DPU這個新處理器類型的創新。而Virtio接口,已經是事實上的云計算虛擬化的標準化接口。Virtio成為整個問題的焦點:不管是SPDK/vhost、還是vDPA加速,都是圍繞著Virtio接口展開。

本文圍繞I/O設備虛擬化、通用接口Virtio以及虛擬化卸載等方面進行了詳細的解讀。推薦給大家。

**01 **I/O設備虛擬化:從軟件模擬到SR-IOV

I/O虛擬化是計算機虛擬化最復雜的部分,因為涉及到CPU操作系統、Hypervisor以及I/O設備的相互配合。I/O虛擬化也經歷了從軟件模擬虛擬化、類虛擬化向完全硬件虛擬化的轉變。

a. I/O軟件模擬虛擬化和類虛擬化

I/O設備虛擬化場景,既要關注I/O設備模擬,也要關注vCPU和虛擬I/O設備的交互,許多條件交織在一起,使得整個問題變的非常復雜。I/O虛擬化性能代價主要體現在三個方面:驅動訪問設備寄存器的代價;設備通過中斷和DMA訪問驅動的代價;設備模擬本身的代價。因此,I/O虛擬化性能優化主要是通過五個角度:

  • 減少I/O訪問寄存器的代價:一方面是把部分I/O的訪問變成MMIO訪問,這樣就不需要陷入Hypervisor;另一方面是優化VM-exit/VM-entry切換的代價。
  • 減少I/O訪問的次數:比如簡化通知機制,簡化虛擬化設備功能等。
  • 優化中斷:主要有如APIC的中斷硬件虛擬化或者不需要中斷的輪詢驅動。
  • 減少DMA訪問的代價:通過IOMMU等實現Pass Through模式。
  • 減少設備模擬的代價:則主要是通過硬件SR-IOV機制實現硬件設備。

如圖1(a),虛擬機中看到的設備,一般是由Hypervisor模擬出來的。虛擬設備的功能,可以少于也可以多于物理的設備,甚至可以模擬出一些不存在的特性,模擬出不存在的硬件設備。通過I/O軟件模擬的方式,我們稱之為I/O設備軟件模擬虛擬化。在I/O軟件模擬虛擬化的解決方案中,客戶機VM要使用底層的硬件資源,需要Hypervisor來截獲每一條請求指令,然后模擬出這些指令的行為。我們都知道Hypervisor截獲指令的動作就是從VM-exit,處理完模擬然后再VM-entry的過程,這個過程的代價很高,每條指令都要如此,帶來的性能開銷必然是非常龐大的。

如圖1(b)所示,Virtio提供的類虛擬化方式,客戶機完成設備的前端驅動程序,Hypervisor配合客戶機完成相應的后端驅動程序,這樣兩者之間通過交互機制就可以實現高效的虛擬化過程。

圖片

圖1 I/O設備虛擬化

Virtio框架如圖2所示,使用Virtqueue來實現其I/O機制,每個Virtqueue就是一個承載大量數據的Queue。VRing是Virtqueue的具體實現方式,針對VRing會有相應的描述符表格進行描述。Virtio是一個通用的驅動和設備接口框架,基于Virtio分別實現了Virtio-net、Virtio-blk、Virtio-scsi等很多不同類型的模擬設備及設備驅動。

圖片

圖2 Virtio框架

Virtio類虛擬化比傳統的I/O設備軟件模擬的性能優勢體現在:很多控制和狀態信息不需要通過寄存器讀寫操作來交互的,而是通過寫入Virtqueue的相關數據結構來讓驅動(Driver)和設備(Device)雙方交互。并且在數據交互的時候,只需要在一定批量數據變化需要對方處理的時候才會通知對方,驅動通知設備是通過寫Kick寄存器,設備通知驅動是通過中斷。

b. I/O完全硬件虛擬化

評價I/O虛擬化技術的兩個指標——性能和通用性。性能,當然是越接近無虛擬化環境下的I/O性能最好;而通用性,則是I/O虛擬化對客戶操作系統越透明越好。要想要高性能,最直接的方法就是讓客戶機直接使用真實的硬件設備;要想要通用性,則是要用想辦法讓客戶機操作系統自帶的驅動程序能夠發現設備并操作設備。

客戶機直接操作設備面臨兩個問題:第一,如何讓客戶機直接訪問到設備真實的I/O地址空間(包括I/O和MMIO);第二,如何讓設備的DMA直接訪問客戶機的內存空間。內存硬件虛擬化的EPT技術可以解決第一個問題。而VT-d技術則用來解決第二個問題。VT-d技術主要是引入地址重映射(IOMMU+IOTLB),負責提供重映射和設備直接分配。從設備端的DMA訪問,都會進入地址重映射進行地址轉換,使得設備可以訪問到對應客戶機特定的內存區域。

VT-d技術雖然可以將物理的I/O設備直接透傳給虛擬機,但是一臺計算機系統受限于接口,可以連的物理設備畢竟有限。因此,PCIe SR-IOV技術應運而生。通過PCIe SR-IOV技術,一個物理I/O設備可以虛擬出多個虛擬設備,分配給虛擬機使用。

如圖1(c)所示,SR-IOV引入了兩個PCIe的功能類型:

  • PFs(Physical Functions):包括管理SR-IOV功能在內的所有PCIe設備。
  • VFs(Virtual Functions):輕量級的PCIe設備,只能進行必要的配置和數據傳輸。

Hypervisor把VF分配給虛擬機,通過IOMMU等硬件輔助技術提供的DMA數據映射,直接在虛擬機和硬件設備之間傳輸數據。

c. I/O虛擬化總結

通過兼容性、性能、成本、擴展性四個方面對I/O虛擬化技術進行總結,詳見表1:

表1 不同I/O虛擬化方式對比

I/O虛擬化方式 VM的兼容性 性能 成本 擴展性
設備接口軟件模擬 重用已有驅動 頻繁的上下文切換 沒有額外硬件成本 受設備模擬的性能代價約束
類虛擬化前后端 需要加載特定驅動 基于共享隊列的機制減少了前后端交互 沒有額外硬件成本 受設備后端的性能代價約束
直接分配VT-d 重用設備驅動 直接訪問物理設備,減少虛擬化開銷 需要購買額外的較多的硬件 硬件設備獨占性,受主板擴展槽限制
直接分配SR-IOV 需要加載VF驅動 直接訪問物理設備,減少虛擬化開銷 需要購買額外的較少的硬件 硬件設備支持多個虛擬設備,擴展性較好

**02 **通用接口Virtio

Virtio旨在提供一套高效的、良好維護的通用的Linux驅動,實現虛擬機應用和不同Hypervisor實現的模擬設備之間標準化的接口。Virtio作為類虛擬化的I/O設備接口,廣泛應用于云計算虛擬化場景,某種程度上,Virtio已經成為事實上的I/O設備的接口標準。

在上一節介紹I/O虛擬化時,Virtio作為I/O類虛擬化技術做過介紹。本節會略去虛擬化相關的內容,把Virtio作為一個標準的接口進行詳細的闡述。

2.1 Virtio寄存器

Virtio寄存器有三種類型:設備狀態字、功能特征位以及PCIe配置空間。

a. 設備狀態字

如表2所示,設備狀態字(Device Status Field)標識了初始化序列步驟的完成情況。

表2 設備狀態字描述

Bit位置 狀態字值 定義 描述
0 1 ACKNOWLEDGE 表示操作系統已找到該設備并將其識別為有效的Virtio設備
1 2 DRIVER 表示操作系統已找到該設備并將其識別為有效的Virtio設備
2 4 DRIVER_OK 表示已安裝驅動程序并準備驅動設備
3 8 FEATURES_OK 表示驅動程序已確認其理解的所有功能,并且功能協商已完成
4 16 保留位 保留位
5 32 保留位 保留位
6 64 DEVICE_NEEDS_RESET 表示設備遇到了無法恢復的錯誤。
7 128 FAILED 表示操作系統出現問題,或者驅動和設備功能不匹配,或者設備運行過程中出現致命錯誤等。

基于設備狀態字,Virtio協議定義并約束了驅動程序必須按照以下順序初始化設備:

(1)重置設備。

(2)設置ACKNOWLEDGE狀態位,表示OS已發現此設備。

(3)設置DRIVER狀態位,表示OS知道如何驅動此設備。

(4)讀取設備功能位,并將操作系統和驅動程序可以理解的功能位子集寫入設備。

(5)設置FEATURES_OK狀態位。

(6)重新讀取設備狀態,如果FEATURES_OK讀取結果依然為1,則表示設備接受了驅動的功能位子集;否則,如果為0,則表示該設備不支持驅動的功能子集,該設備不可用。

(7)執行設備特定的設置,包括發現設備的虛擬隊列、讀取和可能寫入設備的virtio配置空間以及填充虛擬隊列等。

(8)將DRIVER_OK狀態位設置為1。此時,設備初始化完成,設備處于活動狀態。

(9)如果上述這些步驟中的任何一個發生不可恢復的錯誤,驅動程序會將FAILED狀態位設置為1。

b. 功能特征位

每個Virtio設備均提供其支持的所有功能對應的功能特征位。在設備初始化期間,驅動程序將讀取此信息并告知設備它接受的子集。

通過這種方式可以實現向前和向后兼容:如果設備增加了新功能位,則較舊的驅動程序就不會將該功能位寫回到設備中(意味著此功能不會被開啟)。同樣,如果驅動程序增加了新的功能,而設備未提供此功能,則同樣此功能不會被寫回到設備(意味著此功能不會被開啟)。

Virtio1.1協議中的功能位分配如下:

  • 比特位0 – 23:特定設備類型的功能位;
  • 比特位24 – 37:保留用于擴展隊列和功能協商機制的功能位;
  • 比特位38以上:保留功能位以供將來擴展。

c. 配置空間

Virtio over PCI使用的配置空間與標準的PCI配置空間相比,特殊的地方在于其Vendor ID和Device ID。Virtio的Vendor ID為0x1AF4,其Device ID編號從0x1040-0x107F。

為了跟PCI Capabilities格式兼容,Virtio定義的virtio_pci_cap格式如表3所示。

表3 Virtio的PCI capability結構

Byte 3 Byte 2 Byte 1 Byte 0
0x0 cfg_type cap_len cap_vndr cap_vndr
0x4 padding bar
0x8 offset
0xC Length

其中cfg_type標識virtio_pci_cap類型,共有五種,代表了映射在BAR空間的五組寄存器。virtio_pci_cap類型如表4所示。

表4 Virtio PCI capability類型

類型名稱 ID 描述
VIRTIO_PCI_CAP_COMMON_CFG 1 通用配置
VIRTIO_PCI_CAP_NOTIFY_CFG 2 通知
VIRTIO_PCI_CAP_ISR_CFG 3 ISR狀態
VIRTIO_PCI_CAP_DEVICE_CFG 4 設備具體的配置
VIRTIO_PCI_CAP_PCI_CFG 5 PCI配置訪問

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

    關注

    33

    文章

    8497

    瀏覽量

    150835
  • DPU
    DPU
    +關注

    關注

    0

    文章

    354

    瀏覽量

    24127
  • i/o
    i/o
    +關注

    關注

    0

    文章

    33

    瀏覽量

    4570
收藏 人收藏

    評論

    相關推薦

    LabVIEW的I/O接口設備驅動

    虛擬儀器系統的硬件平臺由i/o接口設備和計算機構成,為了能使計算機能夠對i/o
    發表于 11-18 11:04 ?1.3w次閱讀
    LabVIEW的<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>接口</b>設備驅動

    virtio I/O通信流程及設備框架的實現

    virtio 是一種通用的半虛擬I/O 通信協議,提供了一套前后端 I/
    的頭像 發表于 03-10 13:37 ?6400次閱讀

    《微機原理與接口技術》教學大綱

    微型計算機原理及接口技術,包括CPU的工作原理與時序,IO端口的地址譯碼,CPU和外設之間的數據傳送方式,中斷控制器及中斷技術應用,DMA控制器及應用,并行
    發表于 10-11 09:15

    淺析單片機原理及接口技術

    PPT內容這是單片機原理與接口技術課件ppt,包括了微型計算機基礎,MCS-51單片機結構與時序,習題課,MCS-51與存儲器連接示例,匯編語言程序設計,半導體存儲器,中斷系統,并行I/O接口
    發表于 09-10 07:27

    微機接口技術實用教程

    微機接口技術實用教程1微機接口技術實用教程第1章 微型計算機接口技術基礎 第1章 微型計算機接口技術基礎 1.1 接口技術概述 輸入/輸出(
    發表于 09-13 08:19

    微機原理及接口技術課件(教學)

    微機原理及接口技術課件:微機:IBM PC系列機原理:8088匯編語言程序設計接口:半導體存儲器及其接口I/O
    發表于 12-06 22:24 ?462次下載
    微機原理及<b class='flag-5'>接口技術</b>課件(教學)

    微機原理與接口技術精品課程(課件)

    微機原理與接口技術精品課程(課件):微機:IBM PC系列機原理:8088匯編語言程序設計接口:半導體存儲器及其接口 I/O
    發表于 12-06 22:26 ?170次下載
    微機原理與<b class='flag-5'>接口技術</b>精品課程(課件)

    單片機與接口技術實驗教程

    單片機與接口技術實驗教程 實驗一、P1口實驗……………………………………………… 3實驗二、簡單I/O口擴展實驗………………………………… 5實驗三
    發表于 04-14 14:31 ?39次下載

    輸入輸出設備I/O設備總結

    I/O設備又叫輸入輸出設備。對于I/O bus 包含數據總線、控制總線、地址總線;每一個I/O
    發表于 11-24 09:28 ?3605次閱讀
    輸入輸出設備<b class='flag-5'>I</b>/<b class='flag-5'>O</b>設備總結

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

    ,主要有計算資源,存儲資源和網絡資源。所以,系統虛擬技術又可以細分為計算虛擬,存儲虛擬
    的頭像 發表于 05-07 15:40 ?4826次閱讀
    系統<b class='flag-5'>虛擬</b><b class='flag-5'>化</b><b class='flag-5'>技術</b><b class='flag-5'>virtio</b>總體設計思想

    I/O軟件模擬虛擬和類虛擬

    I/O虛擬是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是從I/O硬件
    的頭像 發表于 10-13 11:09 ?2586次閱讀

    I/O虛擬Virtio接口介紹

    I/O虛擬是計算機虛擬最復雜的部分,因為涉及到CPU、操作系統、Hypervisor以及
    的頭像 發表于 10-26 17:21 ?4043次閱讀

    探究I/O虛擬Virtio接口技術(下)

    I/O虛擬是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是從I/O硬件
    的頭像 發表于 04-04 17:03 ?2648次閱讀
    <b class='flag-5'>探究</b><b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>虛擬</b><b class='flag-5'>化</b>及<b class='flag-5'>Virtio</b><b class='flag-5'>接口技術</b>(下)

    VirtIO Networking虛擬網絡設備實現架構

    VirtIO 由 Rusty Russell 開發,最初是為了支持自己開發的 lguest Hypervisor,其設計目標是在虛擬環境下提供與物理設備相近的 I/
    的頭像 發表于 05-08 10:48 ?1102次閱讀
    <b class='flag-5'>VirtIO</b> Networking<b class='flag-5'>虛擬</b>網絡設備實現架構

    panabit加載virtio網卡驅動

    引言:Panabit網絡流量管理系統是一款強大的企業級網絡管理軟件,它提供了豐富的功能和靈活的配置選項。而virtio網卡作為一種高性能的虛擬網絡設備,被廣泛應用于各種虛擬平臺。本文
    的頭像 發表于 11-17 11:13 ?1104次閱讀