天天看點

linux pcie SR-IOV配置1 SR-IOV概述2 實作SR-IOV條件3 配置SR-IOV

1 SR-IOV概述

SR-IOV是Single Root I/O Virtualization的縮寫,在虛拟機中,一切皆虛拟,比如網卡,虛拟機看起來好像有一個真實網卡,但是這個網卡是主控端虛拟出來的硬體,沒有真實的硬體;

由于主控端需要進行資料處理,那麼就産生了延時;

VT-D可以将實體的PCI-E裝置直接配置設定給虛拟機,讓虛拟機直接控制硬體,但是虛拟機會獨占這個PCI-E裝置,一台主控端如果有多個虛拟機,那麼PCI-E實體裝置顯然不夠使用;

為了解決上述問題,intel提出SR-IOV,SR-IOV可以将一個實體網卡虛拟出多個輕量化的PCI-E實體裝置,進而配置設定給虛拟機使用;

SR-IOV是虛拟化的一個重要功能。啟用SR-IOV的這個功能,将大大減輕主控端的CPU負荷,提高網絡性能,降低網絡延時等。

2 實作SR-IOV條件

2.1 硬體條件

1. CPU 支援 Intel VT-X 和 VT-D (或者 AMD 的 SVM 和 IOMMU)
2. CPU必須支援IOMMU(例如英特爾的 VT-d 或者AMD的 AMD-Vi,Power8 處理器預設支援IOMMU),并且在BIOS中已開啟。
3. 支援PCI-SIG* Single Root I/O Virtualization and Sharing(SR-IOV),并且在BIOS中已開啟。           

2.2 軟體條件

1. 需要QEMU/KVM支援
2. 需要安裝以下軟體包
$ yum -y install kvm libvirt virt-* bridge-utils qemu-img
 
 kvm: 含有KVM核心子產品,在預設linux核心中提供kvm管理程式
 libvirts: 虛拟機管理工具
 virt-*: 管理和控制虛拟機指令
 bridge-utils: 設定網絡網卡橋接
 qemu-img: qemu元件
           

使用指令檢視系統是否支援虛拟化

$ egrep -c '(vmx|svm)' /proc/cpuinfo
128           

大于1表示已經開啟,等于0表示沒有開啟,需要在BIOS中開啟intel VT-D

檢視KVM子產品是否被加載

$ lsmod |grep kvm
kvm_amd              2177260  18 
kvm                   621392  1 kvm_amd
irqbypass              13503  12 kvm,vfio_pci
           

如果有資訊,則代表加載成功

在grub檔案中加入intel_iommu=on 或者 amd_iommu=on

linux pcie SR-IOV配置1 SR-IOV概述2 實作SR-IOV條件3 配置SR-IOV

檢測是否生效 

$ sudo virt-host-validate           
linux pcie SR-IOV配置1 SR-IOV概述2 實作SR-IOV條件3 配置SR-IOV

3 配置SR-IOV

檢視實體網卡是否支援SR-IOV

$ lspci | grep Eth           
linux pcie SR-IOV配置1 SR-IOV概述2 實作SR-IOV條件3 配置SR-IOV
$ lspci -vvs 41:00:0           

顯示如下代碼段,說明支援SR-IOV,并且可以看出支援多少VFs等詳細資訊

linux pcie SR-IOV配置1 SR-IOV概述2 實作SR-IOV條件3 配置SR-IOV

通過以下指令來enable SR-IOV功能

$ echo 2 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs           

0000:41:00.0    代表支援SR-IOV功能的PCI-E裝置

2                       代表要enable出VF的數量

從下圖可以看到enable了2個VF之後,多出來了兩個PCI-E裝置

linux pcie SR-IOV配置1 SR-IOV概述2 實作SR-IOV條件3 配置SR-IOV

至此,SR-IOV配置成功

繼續閱讀