MS-01で遊んでみた 3 SR-IOVに触れた話(MS-01/ESXi/Almalinux/iperf)
この記事の続きになります。
https://note.com/enokiko/n/n870134561fc7
はじめに
SR-IOVという機能を触ってみました。
前の記事で触ってみたPCIパススルーでは、仮想マシンが持つIF(仮想IF)と物理的なNIC(物理IF)が1対1の関係になります。
これだと物理IFが足りなくなってしまうので、物理IFを仮想的に複数に見せる機能がSR-IOVです。
すごそうなので使ってみました。
※PCIパススルーもSR-IOVもPCI Expressデバイスに関する機能なので、物理NICに限定した機能ではないです。
SR-IOVの用語の説明
SR-IOV :英語で書くとSingle-Root Input/Output Virtualization。シングルルートI/O仮想化ともいう。
PF:英語で書くとPhysical Function。PCIカードやオンボードデバイスなどの物理的なポート
VF:英語で書くとVirtual Function。PFをもとに作成される仮想的なポート。
※PCI-SIGがSR-IOVの仕様を策定
構成
構成準備
SR-IOVの設定
「管理」→「ハードウェア」からPCIデバイスの様子を確認
パススルーが無効である確認をして、チェックを入れて「SR-IOVの構成」を左クリック
※パススルーは無効化しておかないとSR-IOVの最大が0になり、SR-IOVが構成できない。
有効→「はい」を選択、仮想機能→「2」を入力
末尾「00.0」でSR-IOVを有効にしたところ、末尾「02.0」と「02.1」が作成された。
末尾「00.1」でも同様にして合計4つパススルーがアクティブなポートができた
ネットワーク設定
物理NICは確認できる。vmnic0とvmnic1が10GbpsのSFP+ポート
vSwtichを2つ作成。作成したのは「vSwitchSFP1」と「vSwitchSFP2」
ポートグループを2つ作成。作成したのは「SFP1 Network」と「SFP2 Network」
仮想マシンの設定
仮想マシンの編集を開く
その他のデバイスの追加を開く
SR-IOVで作成したPCIデバイスが確認できるので割り当てる
Linux上でlspciをするとSR-IOVのVFが認識されている
※ALMA-LOAD-001~012まで4台とも同じ文言
[root@localhost ~]# lspci | grep Ethernet
02:02.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
02:05.0 Ethernet controller: Intel Corporation Ethernet Virtual Function 700 Series (rev 02)
負荷試験
002→001への負荷
クライアント:CPU25%程度で9.42Gbpsで送信
サーバ:CPU55%程度で9.41Gbpsで受信
※PCIパススルー(SR-IOVなし)と同程度
【クライアント側】
[root@localhost ~]# iperf3 -c 172.16.37.1 -t 1000
(略)
[ 5] 266.00-267.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 267.00-268.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 268.00-269.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 269.00-270.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 270.00-271.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 271.00-272.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 272.00-273.00 sec 1.09 GBytes 9.41 Gbits/sec 0 2.58 MBytes
[ 5] 273.00-274.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 274.00-275.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 275.00-276.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 276.00-277.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 277.00-278.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 278.00-279.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.58 MBytes
[ 5] 279.00-280.00 sec 1.09 GBytes 9.41 Gbits/sec 0 2.58 MBytes
【サーバ側】
[root@localhost ~]# iperf3 -s
(略)
[ 5] 266.00-267.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 267.00-268.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 268.00-269.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 269.00-270.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 270.00-271.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 271.00-272.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 272.00-273.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 273.00-274.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 274.00-275.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 275.00-276.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 276.00-277.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 277.00-278.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 278.00-279.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 279.00-280.00 sec 1.10 GBytes 9.41 Gbits/sec
011→001への負荷
クライアント:CPU55%程度で約16.7Gbpsで送信
サーバ:CPU90%程度で約16.7Gbpsで受信
※10GbpsのNICに関わらず10Gbpsを超える速度が出た
【クライアント側】
[root@localhost ~]# iperf3 -c 172.16.37.1 -t 1000
(略)
[ 5] 127.00-128.00 sec 1.95 GBytes 16.8 Gbits/sec 627 479 KBytes
[ 5] 128.00-129.00 sec 1.95 GBytes 16.8 Gbits/sec 613 457 KBytes
[ 5] 129.00-130.00 sec 1.94 GBytes 16.7 Gbits/sec 617 576 KBytes
[ 5] 130.00-131.00 sec 1.94 GBytes 16.7 Gbits/sec 634 506 KBytes
[ 5] 131.00-132.00 sec 1.94 GBytes 16.7 Gbits/sec 770 450 KBytes
[ 5] 132.00-133.00 sec 1.94 GBytes 16.7 Gbits/sec 528 518 KBytes
[ 5] 133.00-134.00 sec 1.93 GBytes 16.6 Gbits/sec 644 434 KBytes
[ 5] 134.00-135.00 sec 1.94 GBytes 16.6 Gbits/sec 638 551 KBytes
[ 5] 135.00-136.00 sec 1.93 GBytes 16.6 Gbits/sec 933 411 KBytes
【サーバ側】
[root@localhost ~]# iperf3 -s
(略)
[ 5] 127.00-128.00 sec 1.96 GBytes 16.8 Gbits/sec
[ 5] 128.00-129.00 sec 1.94 GBytes 16.7 Gbits/sec
[ 5] 129.00-130.00 sec 1.95 GBytes 16.7 Gbits/sec
[ 5] 130.00-131.00 sec 1.94 GBytes 16.7 Gbits/sec
[ 5] 131.00-132.00 sec 1.94 GBytes 16.7 Gbits/sec
[ 5] 132.00-133.00 sec 1.94 GBytes 16.7 Gbits/sec
[ 5] 133.00-134.00 sec 1.93 GBytes 16.6 Gbits/sec
[ 5] 134.00-135.00 sec 1.93 GBytes 16.6 Gbits/sec
[ 5] 135.00-136.00 sec 1.93 GBytes 16.6 Gbits/sec
012→001への負荷
クライアント:CPU25%程度で9.42Gbpsで送信
サーバ:CPU55%程度で9.41Gbpsで受信
※PCIパススルー(SR-IOVなし)と同程度
【クライアント側】
[root@localhost ~]# iperf3 -c 172.16.37.1 -t 1000
(略)
[ 5] 210.00-211.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 211.00-212.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 212.00-213.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 213.00-214.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 214.00-215.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 215.00-216.00 sec 1.09 GBytes 9.41 Gbits/sec 0 2.49 MBytes
[ 5] 216.00-217.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 217.00-218.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 218.00-219.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
[ 5] 219.00-220.00 sec 1.10 GBytes 9.42 Gbits/sec 0 2.49 MBytes
【サーバ側】
[root@localhost ~]# iperf3 -s
(略)
[ 5] 210.00-211.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 211.00-212.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 212.00-213.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 213.00-214.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 214.00-215.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 215.00-216.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 216.00-217.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 217.00-218.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 218.00-219.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 5] 219.00-220.00 sec 1.10 GBytes 9.41 Gbits/sec
結果
物理NICを跨ぐと9.4Gbps出る。一方で同一物理NIC間だと16.7Gbps程度だった。
余談だが、ケーブルを抜くとIFがリンクダウンし、物理NIC跨ぎも同一物理NIC間も通信はできなくなる。