日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【KVM系列04】KVM的I/O 设备直接分配和SR-IOV

發(fā)布時間:2025/3/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【KVM系列04】KVM的I/O 设备直接分配和SR-IOV 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第四章 I/O 設(shè)備直接分配和 SR-IOV?


1. PCI/PCI-E 設(shè)備直接分配給虛機 (PCI Pass-through)

1.1 PCI/PCIe Pass-through 原理

1.2 在 RedHat Linux 6 上使用 virt-manger 分配一個光纖卡給虛機

1.3 在 RedHat Linux 6 上使用 qemu-kvm 分配一個光纖卡給虛機

1.4 設(shè)備直接分配讓客戶機的優(yōu)勢和不足

2. SR-IOV 設(shè)備分配

2.1 原理

2.2 SR-IOV 的條件

2.3 分配 SR-IOV 設(shè)備的步驟

2.4 優(yōu)勢和不足

3. 各種設(shè)備虛擬化方式的比較

3.1 架構(gòu)上的比較(以網(wǎng)卡為例)

3.2 性能上的比較 (以網(wǎng)卡為例)

3.3??Virtio 和 Pass-Through 的詳細比較

?4. 綜合結(jié)論


【KVM系列文章】https://blog.csdn.net/baidu_37107022/article/details/88812463

?

本文將分析 PCI/PCIe 設(shè)備直接分配(Pass-through)和 SR-IOV, 以及三種 I/O 虛擬化方式的比較。

1. PCI/PCI-E 設(shè)備直接分配給虛機 (PCI Pass-through)

設(shè)備直接分配 (Device assignment)也稱為 Device Pass-Through。

先簡單看看PCI 和 PCI-E 的區(qū)別(AMD CPU):

(簡單點看,PCI 卡的性能沒有 PCI-E 高,因為 PCI-E 是直接連在 IOMMU 上,而 PCI 卡是連在一個 IO Hub 上。)

主要的 PCI 設(shè)備類型:

  • Network?cards?(wired?or?wireless)
  • SCSI?adapters
  • Bus?controllers:?USB,?PCMCIA,?I2C,?FireWire,?IDE
  • Graphics?and?video?cards
  • Sound?cards

1.1 PCI/PCIe Pass-through 原理

這種方式,允許將宿主機中的物理 PCI 設(shè)備直接分配給客戶機使用。較新的x86平臺已經(jīng)支持這種類型,Intel 定義的 I/O 虛擬化技術(shù)成為 VT-d,AMD 的稱為 AMD-V。KVM 支持客戶機以獨占方式訪問這個宿主機的 PCI/PCI-E 設(shè)備。通過硬件支持的 VT-d 技術(shù)將設(shè)備分給客戶機后,在客戶機看來,設(shè)備是物理上連接在PCI或者PCI-E總線上的,客戶機對該設(shè)備的I/O交互操作和實際的物理設(shè)備操作完全一樣,不需要或者很少需要 KVM 的參與。運行在 VT-d 平臺上的 QEMU/KVM,可以分配網(wǎng)卡、磁盤控制器、USB控制器、VGA 顯卡等設(shè)備供客戶機直接使用。

幾乎所有的 PCI 和 PCI-E 設(shè)備都支持直接分配,除了顯卡以外(顯卡的特殊性在這里)。PCI Pass-through 需要硬件平臺?Intel VT-d 或者?AMD IOMMU 的支持。這些特性必須在 BIOS 中被啟用。Red Hat Enterprise Linux 6.0 及以上版本支持熱插拔的 PCI 設(shè)備直接分配到虛擬機。

網(wǎng)卡直接分配:

硬盤直接分配:

  • 一般?SATA 或者 SAS 等類型的硬盤的控制器都是直接接入到 PCI 或者 ?PCI-E 總線的,所以也可以將硬盤作為普通的PCI設(shè)備直接分配個客戶機。需要注意的是,當(dāng)分配硬盤時,實際上將其控制器作為一個整體分配到客戶機中,因此需要在硬件平臺上至少有另兩個或者多個SATA或者 SAS控制器。?

1.2 在 RedHat Linux 6 上使用 virt-manger 分配一個光纖卡給虛機

準備工作:

(1)在 BIOS 中打開?Intel VT-d?

(2)在 Linux 內(nèi)核中啟用 PCI Pass-through

添加?intel_iommu=on 到?/boot/grub/grub.conf 文件中。(在我的 RedHat Linux 6上,該文件是 /boot/grub.conf)

(3)重啟系統(tǒng),使得配置生效

實際分配:

(1)使用 lspci -nn 命令找到待分配的 PCI 設(shè)備。這里以一個 FC 卡為例:

使用 lspci 命令得到的 PCI 數(shù)字的含義,以后使用 libvirt API 分配設(shè)備時會用到:

(2)使用 virsh nodedev-list 命令找到該設(shè)備的 PCI 編號

(3)將設(shè)備從主機上解除

(4)使用 virt-manager 將設(shè)備直接分配給一個啟動了的虛擬機

?

(5)添加好了后的效果

(6)在虛機中查看該PCI設(shè)備

(7)不再使用的話,需要在 virt-manager 中首先將該設(shè)備移除,然后在主機上重新掛載該設(shè)備

??

1.3 在 RedHat Linux 6 上使用 qemu-kvm 分配一個光纖卡給虛機

除了步驟(4),其他步驟同上面。

?

1.4 設(shè)備直接分配讓客戶機的優(yōu)勢和不足

  • 好處:在執(zhí)行 I/O 操作時大量減少甚至避免 VM-Exit 陷入到 Hypervisor 中,極大地提高了性能,可以達到幾乎和原生系統(tǒng)一樣的性能。VT-d 克服了?virtio 兼容性不好和 CPU 使用頻率較高的問題。
  • 不足:(1)一臺服務(wù)器主板上的空間比較有限,因此允許添加的 PCI 和 PCI-E 設(shè)備是有限的。大量使用?VT-d 獨立分配設(shè)備給客戶機,讓硬件設(shè)備數(shù)量增加,這會增加硬件投資成本。(2)對于使用 VT-d 直接分配了設(shè)備的客戶機,其動態(tài)遷移功能將受限,不過也可以使用熱插拔或者libvirt 工具等方式來緩解這個問題。
  • 不足的解決方案:(1)在一臺物理宿主機上,僅少數(shù) I/O 如網(wǎng)絡(luò)性能要求較高的客戶機使用 VT-d直接分配設(shè)備,其他的使用純模擬或者 virtio 已達到多個客戶機共享同一個設(shè)備的目的 (2)對于網(wǎng)絡(luò)I/O的解決辦法,可以選擇 SR-IOV 是一個網(wǎng)卡產(chǎn)生多個獨立的虛擬網(wǎng)卡,將每個虛擬網(wǎng)卡分配個一個客戶機使用。

2. SR-IOV 設(shè)備分配

2.1 原理

? ? VT-d 的性能非常好,但是它的物理設(shè)備只能分配給一個客戶機使用。為了實現(xiàn)多個虛機共享一個物理設(shè)備,并且達到直接分配的目的,PCI-SIG 組織發(fā)布了 SR-IOV (Single Root I/O Virtualization and?sharing) 規(guī)范,它定義了一個標(biāo)準化的機制用以原生地支持實現(xiàn)多個客戶機共享一個設(shè)備。不過,目前 SR-IOV (單根 I/O 虛擬化)最廣泛地應(yīng)用還是網(wǎng)卡上。?

SR-IOV 使得一個單一的功能單元(比如,一個以太網(wǎng)端口)能看起來像多個獨立的物理設(shè)備。一個帶有 SR-IOV 功能的物理設(shè)備能被配置為多個功能單元。SR-IOV 使用兩種功能(function):

  • 物理功能(Physical Functions,PF):這是完整的帶有 SR-IOV 能力的PCIe 設(shè)備。PF 能像普通 PCI 設(shè)備那樣被發(fā)現(xiàn)、管理和配置。
  • 虛擬功能(Virtual Functions,VF):簡單的 PCIe 功能,它只能處理I/O。每個 VF 都是從 PF 中分離出來的。每個物理硬件都有一個 VF 數(shù)目的限制。一個 PF,能被虛擬成多個 VF 用于分配給多個虛擬機。

Hypervisor 能將一個或者多個 VF 分配給一個虛機。在某一時刻,一個 VF 只能被分配給一個虛機。一個虛機可以擁有多個 VF。在虛機的操作系統(tǒng)看來,一個 VF 網(wǎng)卡看起來和一個普通網(wǎng)卡沒有區(qū)別。SR-IOV 驅(qū)動是在內(nèi)核中實現(xiàn)的。

網(wǎng)卡 SR-IOV 的例子:

?

光纖卡 SR-IOV 的例子:

2.2 SR-IOV 的條件

  • 需要 CPU 支持 Intel VT-x 和 VT-D (或者 AMD 的 SVM 和 IOMMU)?
  • 需要有支持 SR-IOV 規(guī)范的設(shè)備:目前這種設(shè)備較多,比如Intel的很多中高端網(wǎng)卡等。
  • 需要 QEMU/KAM 的支持。
  • ?RedHat Linux 6.0 官方只完整測試了下面的幾款 SR-IOV 網(wǎng)卡:

    • Intel? 82576NS Gigabit Ethernet Controller (?igb?驅(qū)動)
    • Intel? 82576EB Gigabit Ethernet Controller (?igb?驅(qū)動)
    • Intel? 82599ES 10 Gigabit Ethernet Controller (?ixgbe?驅(qū)動)
    • Intel? 82599EB 10 Gigabit Ethernet Controller (?ixgbe?驅(qū)動)

    2.3 分配 SR-IOV 設(shè)備的步驟

    手頭沒有支持SR-IOV的設(shè)備。這是 RedHat 上 SR-IOV 的配置步驟:?Using SR-IOV。

    簡單來說,SR-IOV 分配步驟和設(shè)備直接分配相比基本類似,除了要使 PF 虛擬化成多個 VF 以外。

    2.4 優(yōu)勢和不足

    優(yōu)勢不足
  • 真正實現(xiàn)設(shè)備共享 (多個客戶機共享一個 SR-IOV 設(shè)備的物理端口)
  • 接近原生性能
  • 相比 VT-d, SR-IOV 可以使用更少的設(shè)備來支持更多的客戶機,可以提高數(shù)據(jù)中心的空間利用率。
  • 對設(shè)備有依賴,目前只有部分設(shè)備支持 SR-IOV。RedHat Linux 只是測試了 Intel 的幾款高端網(wǎng)卡。
  • 使用 SR-IOV 時不方便動態(tài)遷移客戶機。 這是因為這時候虛機直接使用主機上的物理設(shè)備,因此虛機的遷移(migiration)和保存(save)目前都不支持。這個在將來有可能被改變。
  • 3. 各種設(shè)備虛擬化方式的比較

    3.1 架構(gòu)上的比較(以網(wǎng)卡為例)

    3.2 性能上的比較 (以網(wǎng)卡為例)

    純模擬網(wǎng)卡和物理網(wǎng)卡的比較:

    (來源:Evaluating and Optimizing I/O Virtualization in Kernel-based Virtual Machine (KVM), Binbin Zhang, Xiaolin Wang, Rongfeng Lai, Liang Yang, Zhenlin Wang,Yingwei Luo, Xiaoming Li)

    (測試環(huán)境:兩臺物理服務(wù)器 HostA 和 HostB,都使用GB以太網(wǎng)。HostA 使用?82566DC 網(wǎng)卡,HostB 使用?82567LM-2 網(wǎng)卡,一臺虛機運行在 HostB 上,使用 KVM-76.)

    結(jié)論:

    • 純模擬網(wǎng)卡的性能只有物理網(wǎng)卡的四成到六成
    • 純模擬網(wǎng)卡的 UDP 性能比 TCP 性能高 50% 到 100%
    • 在虛擬網(wǎng)卡上使用 NAPI,不但不會提高性能,反而會是性能下降
    • e1000 的性能比 rt18139 的性能高不少(為什么 RedHat Linux KVM 上默認的網(wǎng)卡是 rt18139 呢?)

    Virtio 和 vhost_net 的吞吐量比較:

    • 來源:CANONICAL, KVM Performance Optimization, Paul Sim,Cloud Consultant, paul.sim@canonical.com
    • 結(jié)論: vhost_net 比 virtio 的 UDP 和 TCP 性能高 20% 左右。

    RedHat Linux 6 上 virtio,vhost_net,SR-IOV 和物理設(shè)備網(wǎng)絡(luò)延遲的比較:

    (來源:RedHat 官網(wǎng))

    RedHat Linux 6 上 virtio 和 vhost_net 所消耗的主機CPU資源的比較:

    (來源同上)

    使用 virtio 的 KVM 與物理機的 TCP 吞吐量對比:

    (數(shù)據(jù)來源:RedHat 官網(wǎng))

    物理機與使用 SR-IOV 的 KVM 的網(wǎng)絡(luò)性能對比:

    (來源:同上)

    物理機與使用 Pass-through 的KVM?的 TCP 性能對比:

    ?

    (資料來源:Open Source Virtualization: KVM and Linux, Chris Wright, Principal Software Engineer, Red Hat,September 4, 2009)

    3.3??Virtio 和 Pass-Through 的詳細比較


    (來源:Reconnaissance of Virtio: What’s new?and how it’s all connected? by?Mario Smarduch)

    ?4. 綜合結(jié)論

    KVM 依賴的Intel/AMD 處理器的各種虛擬化擴展:

    處理器CPU 虛擬化內(nèi)存虛擬化PCI Pass-through
    IntelVT-xVPID,EPTVT-d
    AMDAMD-VASID,NPTIOMMU

    I/O 虛擬化方案的選擇:

    • I/O設(shè)備盡量使用準虛擬化(virtio 和 vhost_net)
    • 如果需要實時遷移,不能使用 SR-IOV
    • 對更高I/O要求又不需要實時遷移的,可以使用 SR-IOV
    • 每種方案都有優(yōu)勢和不足,在特定環(huán)境下其性能有可能反而下降,因此在生產(chǎn)環(huán)境中使用各種虛擬化方式前需要經(jīng)過完整測試

    總結(jié)

    以上是生活随笔為你收集整理的【KVM系列04】KVM的I/O 设备直接分配和SR-IOV的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。