覚書っていうのと、ConnectX/ConnectX-2でのSR-IOV有効化の情報が少なすぎるのでまとめてみます。
ドライバーのインストール方法などはMellanoxの公式サイトからダウンロードすれば何となく分かると思います。
ちょっと前に10G NICを買いまいた。Mellanox ConnectX-2 EN というやつです。
中古で1枚3,000円ぐらいで買えます。安い!
Single-Port 10G(SFP+)が使えます。
他にも仮想支援と言う名のSR-IOVという機能、その他諸々あります。
今回はSR-IOVの有効化を覚書で書き残します?
TOC
SR-IOV とは
IIJさんが詳しく解説しています。
OpenStack環境でのSR-IOV活用法 – IIJ
hypervisor(VMM)が処理していた要求を、NICに直接やらせて
ネイティブに近いパフォーマンスを出そうといった感じです。
SR-IOV の利用条件
・VT-x 対応のCPUとマザーボード
・SR-IOV 対応のNIC
の2つが絶対条件
SR-IOVの有効化
ドライバーはCentOS7(多分CentOS5も)で標準で入ってますが
このままではSR-IOVが有効化できない(Mellanoxのツール郡が入ってない)ので
OFED版をインストールしてください。
# mst start
# mst status MST modules: ------------ MST PCI module loaded MST PCI configuration module loaded MST devices: ------------ /dev/mst/mt26448_pci_cr0 - PCI direct access. domain:bus:dev.fn=0000:03:00.0 bar=0xfbb00000 size=0x100000 Chip revision is: B0 /dev/mst/mt26448_pciconf0 - PCI configuration cycles access. domain:bus:dev.fn=0000:03:00.0 addr.reg=88 data.reg=92 Chip revision is: B0
# flint -d /dev/mst/mt26448_pci_cr0 dc > connectx-2.ini
# wget http://www.mellanox.com/downloads/firmware/ConnectX2-rel-2_9_1000.tgz # tar azxvf ConnectX2-rel-2_9_1000.tgz # mv connectx-2.ini ConnectX2-rel-2_9_1000/ # cd ConnectX2-rel-2_9_1000
# vim connectx-2.ini [HCA] hca_header_device_id = 0x6750 hca_header_subsystem_id = 0x0015 eth_xfi_en = true mdio_en_port1 = 0 +total_vfs = 126 //下記で説明 +sriov_en = true //SR-IOVの有効化(コメントは削除)
# mlxburn -d /dev/mst/mt26448_pci_cr0 -fw fw-ConnectX2-rel.mlx -conf connectx-2.ini
# vim /etc/modprobe.d/mlx4.conf options mlx4_core port_type_array=2 num_vfs=6 probe_vf=6
total_vfs
NICで作成可能な最大VF数
ファームウェアのバージョンによって最大数が変わる。
ConnectX/ConnectX-2の最新ファームウェアでは63が最大
実際に作成するVF数に関わらずここで設定したVF数分のMMIO領域が確保される。
BIOSによっては最大が6ぐらいだったりする。(今回使用したPCが6 GA-X58-UD3R)
MMIO領域が足りないと not enough MMIO resources for SR-IOV とdmesgに吐き出されてSR-IOVが無効になります。
port_type_array
1= InfiniBand, 2 = Ethernet
num_vfs
実際に作成するVF数
もちろん total_vfs > num_vfs じゃないとエラーになります。
probe_vf
良くわかってない…。
Mellanoxフォーラムには
probe_vf – is the number of VF to be probed in the hypervisor. Probed in the hypervisor means that the VF will also have interface in the hypervisor (e.g. can be seen using the command ifconfig).
In this example there are no probed VFs. when running ifconfig, no new interfaces will be added (per VF). In case, probe_vf was equal to 1 for example, we would get 2 new interfaces in the hypervisor (check ifconfig -a), one each port.
Probed VFs can be used by the IT administrator to monitor the traffic on that hypervisor without the need of doing that via logging to the VM itself.
と書かれてる。
分からねえ!グループで囲うってことか?
例があった → https://community.mellanox.com/docs/DOC-1484
何となく分かるような分からないような。コメント下さると助かります\(^o^)/
試しにポートは1つ、1:1の関係がいいので
num_vfs=6 probe_vf=6 としてみた。
見えてる見えてる。
SR-IOVの優位性などは冒頭に書いた IIJさんの資料がめっちゃ参考になるので
見てみてください。
はじめまして、こんにちは。
Connect X-2でもVF生成まではできそうですね。
この記事を参考にさせてもらって自分でもやってみたいと思います。(現在、物品の購入中)
SR-IOVは本来VFを仮想マシンに割り当てて、仮想マシン内からのネットワークの処理をCPUを介さずNIC側で行って負荷を分散するために使うと思っています。
probe_vfについては、VFを仮想マシンに加えたときに、仮想マシン内で見えるVF由来のネットワークインターフェースの数に影響するようだと言うのは読めます。何のためにそんなことをするのかと言うのが、ピンときませんが。
このあと(多分3週間ぐらいは開いちゃいますが)自分でConnect X-2のVFを仮想マシンに割り当てるのをやってみようと思うのですが、
もしよろしければ、VFを仮想マシンに割り当てて動作するかの検証の記事があると、
私としては安心感が増しますw
仮想マシンにVFを割り当てる場合は、IntelのCPUだとVT-xに加えて、VT-d(I/O Virtualization)にCPUとマザボの両方が対応している必要があります。対応していた場合、BIOSでVT-dを有効にした上で、kernel parameterでiommuを有効にしてPCI Passthroughができるようにします。
以上、長々と失礼致しました。