在 Intel 官方網站上的 Intel® 82575 Gigabit Ethernet 有支援 VMDq 和 SR-IOV 新版的 10G網卡 igb 版本 2.2.9
http://downloadcenter.intel.com/default.aspx?lang=zht&iid=gg_support-ZH_01+home_downloadctr
在 RHEL5 編譯 driver 時,需要 kernel-devel 的套件才可以做編譯的動作.
[root@benjr ~]# rpm -aq |grep -i kernel-devel kernel-devel-2.6.18-194.el5 [root@benjr ~]# tar zxvf igb-2.2.9.tar.gz [root@benjr ~]# cd src [root@benjr src]# make ; make install
看一下這一版的10G網卡 igb driver 有支援什麼功能.
[root@benjr src]# modinfo -p igb debug:Debug level (0=none, …, 16=all) QueuePairs:QueuePairs – TX/RX queue pairs for interrupt handling max_vfs:max_vfs – SR-IOV VF devices VMDQ:VMDQ – VMDq multiqueue receive RSS:RSS – multiqueue receive count LLISize:Low Latency Interrupt on Packet Size LLIPush:Low Latency Interrupt on TCP Push flag LLIPort:Low Latency Interrupt TCP Port IntMode:Interrupt Mode InterruptThrottleRate:Interrupt Throttling Rate
可以清楚看到他提供了 max_vfs:max_vfs – SR-IOV VF devices 以及 VMDQ:VMDQ – VMDq multiqueue receive 不過目前手邊沒有 Intel® 82575 Gigabit Ethernet 找時間再來試試看.
昨天和同事試了一張板子有 Intel® 82575 10 Gigabit Ethernet 網卡,但是怎麼試都不對,雖然 VMDq 和 VMDc(SR-IOV) 的參數可以啟動,但是這張卡怎麼就是無法同時指派給多個 VM 來使用,到底是出了什麼問題.
上 Intel 網站詳細查詢了一下,
http://www.intel.com/Assets/PDF/general/linecard_ec.pdf
原來 Intel® 82575 10 Gigabit Ethernet 網卡只支援 VMDq 並不支援 VMDc(SR-IOV),如果要同時支援 VMDq 和 VMDc(SR-IOV) 需要的是 Intel® 82576 10 Gigabit Ethernet 網卡
Intel® 82576EB2 | Intel® I/O Acceleration Technology (Intel® QuickData Technology, MSI-X, RSS, Direct Cache Access, checksum and segmentation offload, header splitting/replication, low latency interrupts), 16Rx/16Tx queues/port, jumbo frames, Intel® VT for Connectivity (Virtual Machine Device Queues (VMDq), Virtual Machine Direct Connect (VMDc – PCI-SIG SR-IOV based), Security (IPsec offload, LinkSec3), IEEE 1588 (time stamp) |
Intel® 82575EB | Intel® I/O Acceleration Technology (Intel® QuickData Technology, MSI-X, RSS, Direct Cache Access, checksum and segmentation offload, header splitting/replication, low latency interrupts), 8Rx/8Tx queues/port, jumbo frames, Intel® VT for Connectivity (Virtual Machine Device Queues (VMDq) |
-
KVM PCI Device Assignment
http://fedoraproject.org/wiki/Features/KVM_PCI_Device_Assignment -
SR-IOV
http://fedoraproject.org/wiki/Features/SR-IOV
手邊有一張 Intel® 82599 10 Gigabit Ethernet Controller 想說來試試看 VMDQ + SR-IOV 的功能 Intel® 82599 在 Linux 下模組名稱為 ixgbe.ko 在 Intel 官方網站都可以下載編輯 http://downloadcenter.intel.com/default.aspx?lang=zht&iid=gg_support-ZH_01+home_downloadctr
在載入 Intel® 82599 模組前可以透過 #modinfo -p 來查詢這個模組提供了哪一些參數.
[root@benjr ko]# modinfo -p ixgbe.ko RxBufferMode:0=1 descriptor per packet, 1=use packet split, multiple descriptors per jumbo frame 2 (default)=use 1buf mode for 1500 mtu, packet split for jumbo LLIVLANP:Low Latency Interrupt on VLAN priority threshold LLIEType:Low Latency Interrupt Ethernet Protocol Type LLISize:Low Latency Interrupt on Packet Size (0-1500) LLIPush:Low Latency Interrupt on TCP Push flag (0,1) LLIPort:Low Latency Interrupt TCP Port (0-65535) InterruptThrottleRate:Maximum interrupts per second, per vector, (956-488281), default 8000 max_vfs:Number of Virtual Functions: 0 = disable (default), 1 = default settings, 2-63 = enable this many VFs VMDQ:Number of Virtual Machine Device Queues: 0/1 = disable, 2-16 enable (default=8) RSS:Number of Receive-Side Scaling Descriptor Queues, default 1=number of cpus DCA:Disable or enable Direct Cache Access, 0=disabled, 1=descriptor only, 2=descriptor and data MQ:Disable or enable Multiple Queues, default 1 Node:set the starting node to allocate memory on, default -1 IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 InterruptType:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default IntMode (deprecated)
可以看到 ixgbe 模組的確有提供 VMDQ 和 SR-IOV 的功能.先來回想一下什麼是 VMDQ 和 SR-IOV – https://benjr.tw/3593 .
- VMDc Virtual Machine Direct Connect
傳統的 VM 虛擬機上的虛擬網卡傳送主要透過 VMM (或是 hypervisor) 來進行傳輸, 而 Virtual Machine Direct Connect (VMDc) 允許 VM 可以直接針對實體網路 I/O 進行存取.雖然在 Intel VT-d 虛擬化技術中已經允許 VM 虛擬機可以直接和實體 I/O 連結.不過VMDc 使用了 PCI-SIG 的 Single Root I/O Virtualization (SR-IOV) 的技術. 透過 SR-IOV 這一項技術更進一步提升 VT-d 的功能.他可以同時讓多個 VM 虛擬機與實體 I/O 裝置同時建立通道(communication channels). - VMDq Virtual Machine Device Queues
目前我們使用的虛擬化不管是 RHEL 的 KVM 或是 Xen 還是 VMware / Citrix ,在處理虛擬機的網卡時都會透過一個由 VMM (或是叫 Hypervisor) 所管理的虛擬化 switch ,而這 switch 主要的功能就是轉送封包給正確的虛擬機.,但哪一些封包要流向哪一個 Vitual Machine (虛擬機器) 都需要額外的 CPU 資源才能完成這些工作. 而 Intel 所使用的 VMDq 就是為了減少這些額外 CPU 的處理. 透過網卡晶片內建的 Layer 2 classifier / sorter 以加速網路資料的傳送,它可以先行將不同的虛擬機所需的封包,直接在晶片裡面安排好再透過 receive queue,直接給虛擬機.這樣就不需再透過 Virtual switch 轉送封包. 進而達到減少網路的負載與 CPU 的使用率.
[root@benjr ko]# insmod ixgbe.ko VMDQ=6 PCI: Enabling device 0000:30:00.0 (0000 -> 0003) PCI: Enabling device 0000:30:00.1 (0000 -> 0003)
VMQD 的使用範圍從 0/1 = disable, 2-16 enable 載入模組時加上參數 VMDQ = 6 就可以產生 6 個 Queue.不過我在載入 SR-IOV 的功能時卻發生錯誤,我的作業環境是 RHEL5.5 x86_64 .
[root@benjr ko]# insmod ixgbe.ko max_vfs=1 PCI: Enabling device 0000:30:00.0 (0000 -> 0003) PCI: Failed to allocate mem resource #12:100000@fbe00000 for 0000:30:00.0 ixgbe 0000:30:00.0: not enough MMIO resources for SR-IOV ixgbe: 0000:30:00.0: ixgbe_probe_vf: Failed to enable PCI sriov: -16 PCI: Enabling device 0000:30:00.1 (0000 -> 0003)
在 RedHat 官方網站這個問題 "not enough MMIO resources for SR-IOV"https://bugzilla.redhat.com/show_bug.cgi?id=523341 最快的解決方式就是暫時使用有 patch 核心 http://people.redhat.com/ddutile/.2414719547/ 如果有需要可以同時啟動 VMDQ + SR-IOV 的功能.
max_vfs 的參數可以從 0 = disable (default), 1 = default settings, 支援到 2-63 = enable VFs