IBM Powerで、SR-IOV の設定と QoS の動きを試してみました。
アダプターやスロットがSR-IOVに対応しているかなどは事前に確認が必要ですが、VIOS (Virtual I/O Server) のない環境でも、SR-IOVを使えば複数LPARでネットワーク・アダプタやポートを共有できますし、結果として搭載するアダプタ枚数も減らせるため、簡易な環境を用意したい時には良い案ではないかと思います。
SR-IOV とQoS 検証概要と参考情報
SR-IOV(シングルルート I/O 仮想化)とは、1つの物理的なPCI Expressデバイスを、複数の仮想マシン(LPAR)が直接共有できるようにするハードウェア仮想化技術です。
SR-IOVを使って、複数のLPARでアダプターやポートを共有する設定を行ってみます。
また QoS(Quality of Service)は、ネットワーク上で提供するサービス品質のことで、SR-IOV で共有する物理ポートの帯域幅を制御してみようと思います。
参考にした文書
-
IBM Power Systems SR-IOV Technical Overview and Introduction (@Redbook)
- Chapter2 が計画時に、Chapter4 が設定時に参考になりました。
-
SR-IOV, vNIC, and HNV Information (@Power Virtualization Community)
- こちらに添付されている文書で、アダプターのSR-IOV対応可否や最大論理ポート数などが確認できます。
- ハードウェア仮想化 I/O アダプターの管理 (@マニュアル)
環境
環境は以下を利用します。
- モデル:S914 (9009-41A)
- アダプター:PCIe2 4port (10Gb FCoE & 1GbE) SR&RJ45 Adapter (機構番号:#EN0H)
- LPARs
SR-IOVの設定
-
HMCメニューの「ハードウェア仮想化I/O」から、アダプターのSR-IOV化を行う。
SR-IOVとして使用したいアダプターを選択して、変更ボタンを押す。

モードが "共有"、所有者が "ハイパーバイザー"になっていること、 また最大論理ポートを確認する。
最大論理ポート数は、アダプターやポートによって異なるが、今回利用しているアダプターは、10Gbポートが2個、1Gbポートが2個あり、前者は最大20論理ポート、後者は最大4論理ポートまで構成可能であるため、トータルで48ポートのようです。
個々のアダプターの最大論理ポート数は、当記事冒頭の「参考にした文書」 "SR-IOV, vNIC, and HNV Information" に添付されている "PowerVM SR-IOV FAQs 07-09-2025.pdf" 内に記載されていました。

-
SR-IOV で提供される論理ポートをLPARに追加する。
LPAR (S914_SRIOV_2) 内の、「ハードウェア仮想化 I/O」メニューを選択し、「ポートの追加」ボタンを押す。


「SR-IOV 物理ポートの選択」ボタンを押すと、物理ポートのリストが表示される。使用したい物理ポートを選択してOKボタンを押す。

次の画面で、論理ポートの設定を行う。
ここでは、「論理ポート・キャパシティ(%)」を "80"、「ポート VLAN ID」を "10" としました。
ここで設定する「論理ポート・キャパシティ(%)」がいわゆる QoS なので、この物理ポートの1Gbの帯域のうち、80%をLPAR(S914_SRIOV_2)が使用する、という意味になるようです。

-
LPAR(S914_SRIOV_3)でも、LPAR(S914_SRIOV_2)と同じ物理ポートから提供される論理ポートを追加する。

-
システムのメニュー「ハードウェア仮想化 I/O」で、該当SR-IOVアダプターを選択すると、作成された論理ポートの情報が確認できた。

LPARのネットワーク設定
-
LPAR(S914_SRIOV_2) で、IPアドレスの設定を行う。
上記HMCからの論理ポートの追加により、ent1 (Defined)の定義までは出来ているようだ。cfgmgrを実施して、ent1 を "Available" に変更する。[root@s914102:/]# lsdev -Cc adapter ent0 Available Virtual I/O Ethernet Adapter (l-lan) ent1 Defined 01-00 PCIe3 100/1000 Base-TX 4-port Converged Network Adapter VF (df1028e214103c04) hdcrypt Available Data encryption nvme0 Available 00-00 PCIe3 x4 NVMe Flash Adapter pkcs11 Available ACF/PKCS#11 Device vsa0 Available LPAR Virtual Serial Adapter [root@s914102:/]# cfgmgr [root@s914102:/]# lsdev -Cc adapter ent0 Available Virtual I/O Ethernet Adapter (l-lan) ent1 Available 01-00 PCIe3 100/1000 Base-TX 4-port Converged Network Adapter VF (df1028e214103c04) hdcrypt Available Data encryption nvme0 Available 00-00 PCIe3 x4 NVMe Flash Adapter pkcs11 Available ACF/PKCS#11 Device vsa0 Available LPAR Virtual Serial Adapter [root@s914102:/]#
-
IPを設定する。
[root@s914102:/]# chdev -l 'en1' -a netaddr='10.1.1.2' -a netmask='255.255.255.0' -a state='up' en1 changed [root@s914102:/]# ifconfig -a en0: flags=1e084863,81cc0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN> inet 192.168.61.2 netmask 0xffff8000 broadcast 192.168.127.255 tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1 en1: flags=1e084863,18c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN> inet 10.1.1.2 netmask 0xffffff00 broadcast 10.1.1.255 tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0 lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,LARGESEND,CHAIN> inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255 inet6 ::1%1/64 tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1 [root@s914102:/]#
-
LPAR(S914_SRIOV_3) で、IPアドレスの設定を行う。
[root@s914103:/]# lsdev -Cc adapter ent0 Available Virtual I/O Ethernet Adapter (l-lan) ent1 Defined 01-00 PCIe3 100/1000 Base-TX 4-port Converged Network Adapter VF (df1028e214103c04) hdcrypt Available Data encryption nvme0 Available 00-00 PCIe3 x4 NVMe Flash Adapter pkcs11 Available ACF/PKCS#11 Device vsa0 Available LPAR Virtual Serial Adapter [root@s914103:/]# cfgmgr [root@s914103:/]# lsdev -Cc adapter ent0 Available Virtual I/O Ethernet Adapter (l-lan) ent1 Available 01-00 PCIe3 100/1000 Base-TX 4-port Converged Network Adapter VF (df1028e214103c04) hdcrypt Available Data encryption nvme0 Available 00-00 PCIe3 x4 NVMe Flash Adapter pkcs11 Available ACF/PKCS#11 Device vsa0 Available LPAR Virtual Serial Adapter [root@s914103:/]# chdev -l 'en1' -a netaddr='10.1.1.3' -a netmask='255.255.255.0' -a state='up' en1 changed [root@s914103:/]# ifconfig -a en0: flags=1e084863,81cc0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN> inet 192.168.61.3 netmask 0xffff8000 broadcast 192.168.127.255 tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1 en1: flags=1e084863,18c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN> inet 10.1.1.3 netmask 0xffffff00 broadcast 10.1.1.255 tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0 lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,LARGESEND,CHAIN> inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255 inet6 ::1%1/64 tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1 [root@s914103:/]#
-
LPAR(S914_SRIOV_2) と、LPAR(S914_SRIOV_3)で、接続を確認。
[root@s914102:/]# ping 10.1.1.3 PING 10.1.1.3 (10.1.1.3): 56 data bytes 64 bytes from 10.1.1.3: icmp_seq=0 ttl=255 time=0 ms 64 bytes from 10.1.1.3: icmp_seq=1 ttl=255 time=0 ms[root@s914103:/]# ping 10.1.1.2 PING 10.1.1.2 (10.1.1.2): 56 data bytes 64 bytes from 10.1.1.2: icmp_seq=0 ttl=255 time=0 ms 64 bytes from 10.1.1.2: icmp_seq=1 ttl=255 time=0 ms 64 bytes from 10.1.1.2: icmp_seq=2 ttl=255 time=0 ms
QoS を確認するため、もう1環境準備
-
QoS を確認するために、LPAR(S914_SRIOV_1)を準備する。
ここでは、同じ物理アダプター上の別の1Gbポートを使用することにする。
また、「論理ポート・キャパシティ(%)」は、"100" とし、「ポートVLAN ID」を "10" とする。



-
IP設定と接続テストを行う。
[root@s914101:/]# ifconfig -a en0: flags=1e084863,81cc0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN> inet 192.168.61.1 netmask 0xffff8000 broadcast 192.168.127.255 tcp_sendspace 262144 tcp_recvspace 262144 rfc1323 1 en1: flags=1e084863,18c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN> inet 10.1.1.1 netmask 0xffffff00 broadcast 10.1.1.255 tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0 lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,LARGESEND,CHAIN> inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255 inet6 ::1%1/64 tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1 [root@s914101:/]# ping 10.1.1.2 PING 10.1.1.2: (10.1.1.2): 56 data bytes 64 bytes from 10.1.1.2: icmp_seq=0 ttl=255 time=0 ms 64 bytes from 10.1.1.2: icmp_seq=0 ttl=255 time=0 ms --- 10.1.1.2 ping 統計情報 --- 2 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0/0/0 ms [root@s914101:/]# set -o vi [root@s914101:/]# ping 10.1.1.3 PING 10.1.1.3: (10.1.1.3): 56 data bytes 64 bytes from 10.1.1.3: icmp_seq=0 ttl=255 time=0 ms 64 bytes from 10.1.1.3: icmp_seq=1 ttl=255 time=0 ms --- 10.1.1.3 ping 統計情報 --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0/0/0 ms [root@s914101:/]#
QoS の確認
-
LPAR(S914_SRIOV_2, S914_SRIOV_3)を送信側、LPAR(S914_SRIOV_1)を受信側として、ファイル転送の準備をする。
以下の転送用ファイル(10GB程度)を準備- LPAR(S914_SRIOV_2): /img/file2
- LPAR(S914_SRIOV_3): /img/file3
LPAR(S914_SRIOV_1)に、test.sh スクリプトを準備し、パスワードなしでscpができるようにしておく。
[root@s914101:/img]# cat test.sh #/bin/ksh scp -p root@10.1.1.2:/img/file2 /img/file2 & scp -p root@10.1.1.3:/img/file3 /img/file3 & [root@s914101:/img]#
-
ファイル転送スクリプトを実行し、nmonでネットワーク転送量を確認。
概ね意図した帯域制御が出来ていることが確認できた。[root@s914101:/img]# test.sh [root@s914101:/img]#
LPAR(S914_SRIOV_2)からの転送が先に終了し、
LPAR(S914_SRIOV_3)からの転送のみとなった時は、約108MB/s程度で転送していました。
つまり、設定状況にかかわらず(20%の設定をしていても)、未使用の帯域(使われていない分)は、使えるということのようです。

まとめ
IBM Power の SR-IOV / QoS は意図通りに動作することが確認できました。 そのほか学んだことをメモに残します。
- アダプターの種類やPCIスロットによって、SR-IOV 対応可否があるので、事前に確認が必要そうです。
- VIOSがなくても、SR-IOV つまり HMC のメニューで言うと「ハードウェア仮想化 I/O 」によって、アダプターやポートの仮想化ができるので、簡易な環境でネットワーク・アダプター枚数を減らしたい場合には、良い選択肢だと思いました。
- Link Aggregationをしたい場合は、SR-IOVの1物理ポートに対して、1論理ポート(100%)にする必要があるようです。参考にした文書のRedbook「IBM Power Systems SR-IOV Technical Overview and Introduction」の「3.4 Link Aggregation」に記載されています。
- QoS 設定の「論理ポート・キャパシティ(%)」の意味合いは、"物理ポートに対して優先的に使用可能なminimumの帯域(%)"、という位置付けのようです。
- QoSの設定(%)は、送信にのみ意味を為すようです。(最初これに気づかず、80% vs 20%の QoS 設定をしたLPAR(S914_SRIOV_2, S914_SRIOV_3)がファイル転送の受信側になっていて全く帯域制御されず、悶々としていましたが、Redbookにはちゃんと記載がありました。)
以上です。






