Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

CentOS7でvThunderのセットアップ

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を選択
f:id:metonymical:20180428192118j:plain

Local install mediaを選択して、Forwardをクリック
f:id:metonymical:20180429100035j:plain

前項でコピーしたACOS_vThunder_4_1_1-P5_20.isoを選択して、Choose Volumeをクリック
f:id:metonymical:20180429162353j:plain

下図の通りであることを確認して、Forwardをクリック
f:id:metonymical:20180429162426j:plain

下図の通りであることを確認して、Forwardをクリック
最低3GBで起動しますが、ACOSver4.x系は4GB必要です。
CPUsは1で起動します
f:id:metonymical:20180429100349j:plain
下図の通りであることを確認して、Forwardをクリック
公式Docを読む限り16GBでOKみたいです。
f:id:metonymical:20180429162603j:plain
Nameに任意の名前を入力
Customize configuration before installにチェック(必須)
Network selectionは任意のインターフェースを選択(mgt用なので後で変更可)
f:id:metonymical:20180429162630j:plain

Device modelにe1000を選択(必須)*2
Applyをクリック
f:id:metonymical:20180429162708j:plain

SR-IOVのVFを追加していきます。
画面左下のAdd Hardwareをクリック
PCI Host Deviceを選択
任意のVirtualFunctionを選択
Finishをクリック
f:id:metonymical:20180429101259j:plain

Begin Installationをクリックするとisoファイルから起動が開始されます。
以下の画面で一旦停止しますので、ユーザ名/パスワードとYesSと入力するとインストールが進みます。

  • 1行目:install
  • 2行目:password
  • 最終行:YesS

f:id:metonymical:20180429163047j:plain

その後、自動的に再起動して以下の画面でしばらく待たされます。
f:id:metonymical:20180429163320j:plain
起動が完了すると、以下の画面が表示されますので、ユーザ名/パスワードを入力するとログインできます。
ログイン後のenableパスワードは無いため、そのままEnterでOKです。

  • 1行目:admin
  • 2行目:a10

f:id:metonymical:20180429163420j:plain

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 NICMACアドレスをどこで生成しているのか?が掴めていないので、継続調査したいと思っています。

以上です。

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の作り込みレベルの高さは流石だなと思いますし、とても好感が持てます。
上記コマンドが一体何をやっているのか?なぜその設定が必要なのか?ということを調べていると、すごく勉強になります。

*1:VNCサーバのインストール方法について、ここではあえて触れません、あしからず。

*2:公式DocではACOSver411-P2以降、e1000が無い場合、virtioで起動すると記載があります。