1. 程式人生 > >OpenStack SR-IOV

OpenStack SR-IOV

centos6.6 ech 以太網 switch 簡單 img 光纖卡 stack 局限

本文主要介紹SR-IOV及實踐openstack的SR-IOV功能的過程。

sriov功能介紹

SR-IOV 使一個單一的功能單元(比如,一個以太網端口)能看起來像多個獨立的物理設備,即支持SR-IOV 功能的物理設備能被配置為多個功能單元。

SR-IOV 兩種功能(function):

  • 物理功能(Physical Functions,PF):這是完整的帶有 SR-IOV 能力的PCIe 設備。PF 能像普通 PCI 設備那樣被發現、管理和配置。
  • 虛擬功能(Virtual Functions,VF):簡單的 PCIe 功能,它只能處理I/O。每個 VF 都是從 PF 中分離出來的。每個物理硬件都有一個 VF 數目的限制。一個 PF,能被虛擬成多個 VF 用於分配給多個虛擬機。
Hypervisor 能將一個或者多個 VF 分配給一個虛機。在某一時刻,一個 VF 只能被分配給一個虛機。一個虛機可以擁有多個 VF。在虛機的操作系統看來,一個 VF 網卡看起來和一個普通網卡沒有區別。SR-IOV 驅動是在內核中實現的。

網卡 SR-IOV 的例子:

技術分享

光纖卡 SR-IOV 的例子:

技術分享

OpenStack實踐SR-IOV

系統運行環境:

系統:Centos 6.6, Intel 82576

openstack版本: Juno

配置計算節點物理主機:

開啟 VT-d #BIOS配置

開啟IOMMU功能 #在文件中添加 /boot/grub.conf intel_iommu=on

技術分享

創建VF設備 #modprobe igb max_vfs=8 或 echo 8 > /sys/class/net/ethx/device/sriov_numb

配置Openstack(Juno):

Controller Node:

1.配置sriov mechanism driver

編輯 /etc/neutron/plugins/ml2/ml2_conf.ini

技術分享

2.配置支持SR-IOV網卡類型

查看系統網卡類型 lspci -nn | grep Eth

技術分享

編輯 /etc/neutron/plugins/ml2/ml2_conf_sriov.ini

技術分享

3.修改 neutron-server 腳本 /etc/init.d/neutron-server

技術分享

4.重啟neutron-server 服務.

Compute Node:

1.配置計算節點 PCI Device 重啟 openstack-nova-compute 服務

編輯 /etc/nova/nova.conf

技術分享

2.配置計算節點 neutron-sriov-agent

編輯 /etc/neutron/plugins/ml2/ml2_conf_sriov.ini

技術分享

3.啟動neutron-sriov-agent 服務

技術分享

虛機使用SR-IOV網卡的步驟:

1.創建sriov類型的Port

# neutron port-create ${net-id} --binding:vnic-type direct

2.創建虛機

# nova boot --flavor ${flavor_name} --image ${image_id} --nic port-id=${port_id} ${vm_name}

實踐總結

Openstack(Juno)使用SRIOV特性存在以下局限:

  1. 不支持遷移
  2. 不支持卡的熱插入虛機
  3. 不支持虛機的Qos .
  4. 不支持安全組
  5. 僅支持Vlan

虛機使用sriov類型的網卡時,1.創建sriov類型的Port . 2.將sriov類型的Port分配給虛機.

1) 暫時不支持遷移,

冷遷移:

https://bugs.launchpad.net/nova/+bug/1400784
https://bugs.launchpad.net/nova/+bug/1512880

熱遷移:虛機直接使用物理設備造成不能實時遷移和保存,https://blueprints.launchpad.net/nova/+spec/sriov-live-migration

後續跟進macvtap,Liberty支持macvtap https://blueprints.launchpad.net/nova/+spec/libvirt-macvtap-vif。

2) sriov類型虛擬網卡只能新建時加入目標虛機。在創建虛機時,nova會關聯Instance和sriov類型port(保存到數據庫)

和配置binding profile信息,interface_attach則會不能配置bind profile導致port綁定失敗。

3) 不支持虛機的Qos,最終支持虛機Qos。 openstack對Qos有兩種支持方式 :1.基於

Qos-Service ,Agent(OVS,sriov),該部分功能代碼還在master分支. 2. 基於虛機的Quota(Libvirt ,TC).

4) 系統環境(centos6.6 + intel 82576)不支持管理員手動配置vf的狀態,計算節點不需要啟動neutron-server-agent服務.

5) 創建vnic-type為macvtap類型的sriov的port,計算節點libvirt會產生設置ethx(vf對應的eth) MAC的錯誤.

6) 在創建虛機時可以指定Net,不能指定被創建Port的vnic-type。 建議後期將Port抽象成虛擬網

卡的概念,用戶直接管理虛機網卡類型。後續通過擴展,提供方便的sriov類型網卡使用方式。

需要處理的問題:無ovs-agent服務的計算節點(僅支持sriov類型的port),可能會被選中來vnic-type為normal的虛擬網卡,這樣

會導致虛機啟動失敗,建議計算節點有開啟neutron-openvswitch-agent,創建非sriov類型的網卡。

*使用SRIOV Feather 怎麽物理網卡的的HA ?

SRIOV直接從物理網卡分配VF,VF的狀態與PF的狀態保持一直,物理網卡或網卡直連的交換機down都會引起VF不能正常通信,應該怎麽處理這個問題呢?

在OVS的場景下bonding多塊網卡保證網卡HA。在SRIOV的場景下直接bonding物理網卡,並不能網卡HA的問題,因為VF狀態與物理網卡保持一致,VF直接通過物理網卡處理packet。

方案參見:https://communities.intel.com/thread/54061?start=0&tstart=0

Openstack 網卡bonding 參見:https://blueprints.launchpad.net/nova/+spec/libvirt-sriov-nic-bonding

參考文檔:

http://www.openstack.cn/?p=2118

http://www.ovirt.org/Feature/SR-IOV

http://www.cnblogs.com/sammyliu/p/4548194.html

http://docs.openstack.org/networking-guide/adv_config_sriov.html

OpenStack SR-IOV