CentOS7でA10 vThunderのセットアップを実施したため、その手順を記載しておきます。
vthはisoファイルからインストールができるので、c1kvと同様、直観的にインストールできると思います。
以下のサイトで必要事項を入力するとisoやDocがDL可能です。
Get a Trial VThunder Appliance
vthの足回りとしては、virtioとSR-IOVの両方で構成可能ですが、今回はSR-IOVの構成で記載します。
また、インストールした後から諸々変更できるので助かります。
但し、公式Docにはインストール時に設定せよと記載されていますが。。
1.環境
筐体 : ProLiant DL360e Gen8 System ROM : P73 01/22/2018 NIC : Intel X540-AT2 OS : CentOS7.4(1708) Kernel : kernel-3.10.0-693.21.1.el7.x86_64 Installed Environment Groups : Server with GUI Add-Ons for Selected Environment : Virtualization Client, Virtualization Hypervisor, Virtualization Tools
2.vThunderのインストール
公式Docを読む限り、virt-managerによるGUIでのインストール方法のみとなるようです。
IPMIなどが無ければ、tigervncなどを起動させておきましょう。*1
2-1.事前準備
SR-IOVの設定方法は過去の記事を参照ください。
ここではSR-IOVの設定後、VFIOについて記載します。
公式Docを読む限り、vthではVFIO-PCI Driverを設定せよと記載があります。VFIOとは、IOMMUベースのデバイスに依存しないドライバで、IOMMUに保護された環境で、ユーザ空間への直接デバイスアクセスが可能になるそうです。
以下のRedHatのスライドに説明が記載されています。
https://www.linux-kvm.org/images/b/b4/2012-forum-VFIO.pdf
以下に設定方法を記載します。
[root@ ~]# lspci |grep 540 08:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01) 08:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01) 08:10.0 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 08:10.1 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 08:10.2 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) 08:10.3 Ethernet controller: Intel Corporation X540 Ethernet Controller Virtual Function (rev 01) [root@ ~]# lspci -n -s 08:10.0 08:10.0 0200: 8086:1515 (rev 01) [root@ ~]# modprobe vfio_pci [root@ ~]# echo 8086 1515 > /sys/bus/pci/drivers/vfio-pci/new_id
lspciでVFのBus,Slot,Function番号を表示させる
lspci -n -s でPCIデバイスのベンダID(8086)とデバイスID(1515)を確認
ベンダID(8086)とデバイスID(1515)をVFIO-PCI driverに登録
[root@ ~]# ls -Fal /dev/vfio/ total 0 drwxr-xr-x 2 root root 140 Apr 29 12:51 ./ drwxr-xr-x 21 root root 3460 Apr 29 09:28 ../ crw------- 1 root root 241, 0 Apr 29 12:51 56 crw------- 1 root root 241, 1 Apr 29 12:51 57 crw------- 1 root root 241, 2 Apr 29 12:51 58 crw------- 1 root root 241, 3 Apr 29 12:51 59 crw-rw-rw- 1 root root 10, 196 Apr 29 09:27 vfio
/dev/vfio/配下に56~59として登録されていることが確認できます。
余談ですが、0~55はどうなっているのか?を確認したい場合には、以下のようにdmesでgrepをかけてください。ここでは0~5まで表示させましたが、実際は55までズラッと表示されます。
[root@ ~]# dmesg |grep iommu [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.21.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.21.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet intel_iommu=on iommu=pt pci=realloc [ 1.270002] iommu: Adding device 0000:00:00.0 to group 0 [ 1.270038] iommu: Adding device 0000:00:01.0 to group 1 [ 1.270071] iommu: Adding device 0000:00:01.1 to group 2 [ 1.270099] iommu: Adding device 0000:00:03.0 to group 3 [ 1.270129] iommu: Adding device 0000:00:03.1 to group 4 [ 1.270165] iommu: Adding device 0000:00:03.2 to group 5
2-2.virt-managerによるインストール
まずはisoファイルを/var/lib/libvirt/images/直下にコピー
cp ACOS_vThunder_4_1_1-P5_20.iso /var/lib/libvirt/images/
File>New Virtual Machineを選択
Local install mediaを選択して、Forwardをクリック
前項でコピーしたACOS_vThunder_4_1_1-P5_20.isoを選択して、Choose Volumeをクリック
下図の通りであることを確認して、Forwardをクリック
下図の通りであることを確認して、Forwardをクリック
最低3GBで起動しますが、ACOSver4.x系は4GB必要です。
CPUsは1で起動します
下図の通りであることを確認して、Forwardをクリック
公式Docを読む限り16GBでOKみたいです。
Nameに任意の名前を入力
Customize configuration before installにチェック(必須)
Network selectionは任意のインターフェースを選択(mgt用なので後で変更可)
Device modelにe1000を選択(必須)*2
Applyをクリック
SR-IOVのVFを追加していきます。
画面左下のAdd Hardwareをクリック
PCI Host Deviceを選択
任意のVirtualFunctionを選択
Finishをクリック
Begin Installationをクリックするとisoファイルから起動が開始されます。
以下の画面で一旦停止しますので、ユーザ名/パスワードとYesSと入力するとインストールが進みます。
- 1行目:install
- 2行目:password
- 最終行:YesS
その後、自動的に再起動して以下の画面でしばらく待たされます。
起動が完了すると、以下の画面が表示されますので、ユーザ名/パスワードを入力するとログインできます。
ログイン後のenableパスワードは無いため、そのままEnterでOKです。
- 1行目:admin
- 2行目:a10
2-3.諸注意
私が検証した結果、上記ログイン画面にて、admin/a10を何度入力しても同じ画面に戻ってしまう事象を確認しました。
この場合の対処方法は、一旦仮想マシンをForce offなどで停止してから再度起動し、改めてユーザ名/パスワードを入力してみてください。
3.起動後の確認
3-1.telnet接続方法
Virtual Console(VGA)出力で頑張るのはしんどいので、mgtにtelnetアクセスできるようにします。ほぼほぼCiscoライクに設定できます。
vThunder(NOLICENSE)#conf t vThunder(config)(NOLICENSE)#enable-management service telnet vThunder(config-enable-management telnet)(NOLICENSE)#management vThunder(NOLICENSE)#show interfaces brief Port Link Dupl Speed Trunk Vlan MAC IP Address IPs Name ------------------------------------------------------------------------------------ mgmt Up Full 1000 N/A N/A 5254.0005.45bf 192.168.122.87/24 1 1 Disb None None None 1 5254.009d.9f90 0.0.0.0/0 0 2 Disb None None None 1 5254.00ac.2319 0.0.0.0/0 0 3 Disb None None None 1 1236.991c.1e03 0.0.0.0/0 0 4 Disb None None None 1 1236.991c.1e04 0.0.0.0/0 0 5 Disb None None None 1 1236.991c.1e05 0.0.0.0/0 0
configモードに移動
telnetサービスを有効化
telnetサービスへのアクセスインターフェースをmgtに設定
mgtインターフェースのIPを確認
上記設定およびIP確認後、mgtインターフェースにtelnet接続が可能となります。ちなみに、KVMのDefaultNAT(virbr0)が192.168.122.1/24を持っているハズなので、上記IP(192.168.122.87→DHCPで動的アサイン)にそのままtelnet可能です。
ホストOS上でifconfigにて確認してみてください。
3-2.SR-IOV NICの確認
mgt以外の各インターフェースをenable化(Ciscoでいうno shut)すると、以下のようにLinkUpします。
vThunder(NOLICENSE)#show interfaces brief Port Link Dupl Speed Trunk Vlan MAC IP Address IPs Name ------------------------------------------------------------------------------------ mgmt Up Full 1000 N/A N/A 5254.0005.45bf 192.168.122.87/24 1 1 Up Full 10000 None 1 5254.009d.9f90 0.0.0.0/0 0 2 Up Full 10000 None 1 5254.00ac.2319 0.0.0.0/0 0 3 Up Full 10000 None 1 1236.991c.1e03 0.0.0.0/0 0 4 Up Full 10000 None 1 1236.991c.1e04 0.0.0.0/0 0 5 Up Full 10000 None 1 1236.991c.1e05 0.0.0.0/0 0 vThunder(NOLICENSE)#
5254から始まるMACアドレスはvirtioで設定したNICで、1236から始まるMACアドレスはSR-IOVで設定したNICです。但し、SR-IOV NICのMACアドレスをどこで生成しているのか?が掴めていないので、継続調査したいと思っています。
以上です。
4.最後に
VFIOについて少し記載しましたが、他の仮想ルータなどには無いのかな?と確認したところ、vMXをインストールする際に生成されるvfconfig-generated.shでは、VFIOではないもののpci-stub(パススルー)の設定が入っているようです。
[root@ images]# cat vmx/build/vmx01/xml/vfconfig-generated.sh #Handling interface ens1f0 ifconfig ens1f0 up sleep 2 ifconfig ens1f0 promisc ifconfig ens1f0 allmulti ifconfig ens1f0 mtu 9198 echo 8086 1515 > /sys/bus/pci/drivers/pci-stub/new_id sleep 2 echo 0000:08:10.0 > /sys/bus/pci/devices/0000:08:10.0/driver/unbind echo 0000:08:10.0 >> /sys/bus/pci/drivers/pci-stub/bind ip link set ens1f0 vf 0 spoofchk off ip link set ens1f0 vf 0 rate 10000 ip link set ens1f0 vf 0 mac 02:06:0A:0E:FF:E3 bridge link set dev ens1f0 hwmode vepa
こういった点におけるJuniperの作り込みレベルの高さは流石だなと思いますし、とても好感が持てます。
上記コマンドが一体何をやっているのか?なぜその設定が必要なのか?ということを調べていると、すごく勉強になります。