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
檢測是否生效
$ sudo virt-host-validate
3 配置SR-IOV
檢視實體網卡是否支援SR-IOV
$ lspci | grep Eth
$ lspci -vvs 41:00:0
顯示如下代碼段,說明支援SR-IOV,并且可以看出支援多少VFs等詳細資訊
通過以下指令來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裝置
至此,SR-IOV配置成功