SR-IOV


SR-IOV

來源 http://blog.csdn.net/liushen0916/article/details/52423507

 

摘要: 介紹SR-IOV 的概念、使用場景、VMware 和 KVM 中的配置方法。

第一部分:

生產業務中,我們在虛擬化平台中遇到了部分虛擬機在業務高峰的時候,出現高延遲的情況。排查問題的時候,確認了兩種情況,1是Hypervisor 的延遲是正常的, 2是GuestOS 內部的延遲也是正常的。所以判斷應該是Hypervisor和GuestOS 之間的通信出現了問題。這時候想到了SR-IOV,想看看SR-IOV 能不能提供低延遲提供給對延遲敏感的業務。

寫這篇文章之前,正好看到Red Hat 發布了 Red Hat Virtualization V4版,官方文檔中,專門有一篇《Hardware considerations for implementing SR-IOV with Red Hat 
Virtualization》。文章很短,主要介紹Red Hat Virtualization 中使用SR-IOV的前提條件:

  • CPU 必須支持IOMMU(比如英特爾的 VT-d 或者AMD的 AMD-Vi,Power8 處理器默認支持IOMMU)
  • 固件Firmware 必須支持IOMMU
  • CPU 根橋必須支持 ACS 或者ACS等價特性
  • PCIe 設備必須支持ACS 或者ACS等價特性
  • 建議根橋和PCIe 設備中間的所有PCIe 交換設備都支持ACS,如果某個PCIe交換設備不支持ACS,其后的所有PCIe設備只能共享某個IOMMU 組,所以只能分配給1台虛機。

這里寫圖片描述

Red Hat 虛擬化平台V4 先介紹到這里。

第二部分:

現在介紹一下IO 虛擬化。IO 虛擬化目前主要也是分為3種, 第一是全虛擬化,通過VMM來模擬IO設備實現,VMM截獲GuestOS的IO請求,通過軟件模擬真實的硬件。VMM必須處理所有虛機的IO請求,然后將所有的IO情況序列化為可以被底層硬件處理的單一IO流。好處是GuestOS不需要考慮硬件設備的情況。問題是效率相對較低。例如 qemu。

第二種是IO半虛擬化技術。通過前端和后端模擬實現虛擬化。GuestOS中的半虛擬化驅動為前端,VMM 提供的與GuestOS 通訊的驅動程序為后端。前端驅動將GuestOS的請求通過與VMM之間的特殊通信機制發生給VMM后端需求,后端驅動處理完IO請求之后再發送給物理驅動。全虛擬化為了完成一次操作要涉及到多個寄存器的操作,使得VMM要截獲每個寄存器訪問並進行相應的模擬,就會導致多次上下文切換。這種方式能很大程度的減少上下文切換的頻率,提供更大的優化空間。例如 virtio 。

這里寫圖片描述 
軟件的共享IO虛擬化技術

第三種是硬件輔助的IO虛擬化。主要包括 英特爾VT-d, AMD的IOMMU(AMD-Vi) 和PCI-SIG 的IOV 。 前兩種屬於Directed I/O。物理設備直接分配給虛擬機使用,通過硬件芯片完成GPA到MA 的翻譯。IOV 通過在硬件設備中增加一個PCIe 設備,用於呈現一個PF或多個VF,從而可以將每個VF單獨分配給不同的虛機使用。

這里寫圖片描述 
Intel VT-d

這里寫圖片描述

SR-IOV

下面花一些篇幅介紹 SR-IOV。 
SR-IOV 是PCI-SIG的一個IOV的規范,目的是提供一種標准規范,通過為虛擬機提供獨立的內存空間,中斷,DMA流,來繞過VMM實現數據移動。SR-IOV 架構被設計用於將單個設備通過支持多個VF,並減少硬件的開銷。

SR-IOV 引入了兩種類型:

PF: 包含完整的PCIe 功能,包括SR-IOV的擴張能力,該功能用於SR-IOV的配置和管理。

FV: 包含輕量級的PCIe 功能。包含數據移動所需要的最小的必要的資源。

這里寫圖片描述

注:部分圖片源自 《PCI-SIG SR-IOV Primer》

第三部分: 
接下來介紹Intel 網卡在VMware 環境 實現 SR-IOV 需要的條件和配置方法。 
硬件需求: 
兼容ESXi版本; 
支持IOMMU,並且在BIOS中已開啟; 
支持VT-d 和 SR-IOV 規范; 
在BIOS中開啟SR-IOV;

軟件需求: 
ESXi 5.1 及以上版本; 
Red Hat Enterprise Linux 6.x 及以上版本; 
Windows Server 2008 R2 with SP2 及以上版本; 
VF 驅動必須兼容,並且支持 GuestOS 。

 

大概配置步驟:

1、進入到ESXi 5.1/5.5的命令行界面,然后執行如下命令:
esxcli system module parameters set -m ixgbe -p "max_vfs=8"
備注:上文中的ixgbe表示的是SR-IOV設備的Module Name,max_vfs表示Virtual Functions數量;

2、如果是雙口卡或者兩張卡在同一個模塊上,則可以執行如下命令:
esxcli system module parameters set -m ixgbe -p "max_vfs=8,8"

3、完成之后,就可以重啟主機生效,依然可以用如下命令查看狀態:esxcli network sriovnic

4、最后,就可以按照為虛擬機添加passthrough的方式去settings里為虛擬機添加相關的PCI設備了。

 

具體配置方法: 
1) 創建VF 
開啟SSH, 登錄ESXi , 使用以下命令創建VF

esxcli system module parameters set -m ixgbe -p=max_vfs=20,20,0,0 esxcli system module parameters list --module=ixgbe | grep max_vfs

這里寫圖片描述

esxcfg-module -g ixgb

這里寫圖片描述

配置完成之后,重啟ESXi,參看以及創建的VF

lspci | grep -i intel | grep -i 'ethernet\|network'

這里寫圖片描述
這里寫圖片描述

補充一下,這一步可以通過Host Profile 盡快批量配置。

2)將VF分配給虛機 
編輯虛機,添加PCI設備 
這里寫圖片描述 
這里寫圖片描述 
選擇VF,確定。 
這里寫圖片描述 
完成VF的分配。

3)GuestOS 安裝VF 驅動。 
Windos 需要單獨去下載VF驅動, CentOS 6.x 自帶了igbx 的驅動。 
這里寫圖片描述
這里寫圖片描述

這里寫圖片描述

第四部分:

前面介紹了SR-IOV 在Red Hat Virtualization 的條件。下面簡單介紹一下配置方法:

1) 創建VF 
首先通過lscpi 驗證物理網卡,通過重新加載內核模塊參數,來創建VF:

modprobe -r igb modprobe igb max_vfs=7

或者在rc.local 中配置:

echo 2 > /sys/class/net/enp14s0f0/device/sriov_numvfs

查看創建的VF

 lscpi | grep 82587 virsh nodedev-list | grep 0b

這里寫圖片描述 
這里寫圖片描述

2) 將VF分配給虛機

virsh nodedev-dumpxml pci_0000_0b_00_0 >> /tmp/new-i nterface. xml virsh attach-device MyGuest /tmp/new-i nterface. xml --live --config

后面的步驟相同,不再贅述。SR-IOV 今天就介紹到這里。如果大家有興趣,推薦閱讀以下內容: 
《IBM Power Systems SR-IOV Technical Overview and Introduction》 
《How to Configure Intel Ethernet Converged Network Adapter-Enabled VF on VMware ESXi 5.1》 
《Implementing SR-IOV on HPE ProLiant Servers with VMware vSphere 5.1》 
《Red_Hat_Enterprise_Linux-7-Virtualization_Deployment_and_Administration_Guide-en-US》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM