2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Power の SR-IOV と QoS を試してみました。

Last updated at Posted at 2025-12-05

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 で共有する物理ポートの帯域幅を制御してみようと思います。

参考にした文書

環境

環境は以下を利用します。

  • モデル:S914 (9009-41A)
  • アダプター:PCIe2 4port (10Gb FCoE & 1GbE) SR&RJ45 Adapter (機構番号:#EN0H)
  • LPARs
    • S914_SRIOV_2
    • S914_SRIOV_3
    • S914_SRIOV_1
      image-18_border.png

SR-IOVの設定

  1. HMCメニューの「ハードウェア仮想化I/O」から、アダプターのSR-IOV化を行う。
    SR-IOVとして使用したいアダプターを選択して、変更ボタンを押す。
    image_border.png

    モードを "共有" にして、"OK" ボタンを押す。
    image-1_border.png

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

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

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

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

    LPAR (S914_SRIOV_2)に、SR-IOVの論理ポートが追加されたことを確認。
    image-7_border.png

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

    「論理ポート・キャパシティ(%)」を "20" として、「ポート VLAN ID」を "10" にする。
    image-9_border.png
    image-10_border.png

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

LPARのネットワーク設定

  1. 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:/]#
    

  2. 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:/]#
    

  3. 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:/]#
    

  4. 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環境準備

  1. QoS を確認するために、LPAR(S914_SRIOV_1)を準備する。
    ここでは、同じ物理アダプター上の別の1Gbポートを使用することにする。
    また、「論理ポート・キャパシティ(%)」は、"100" とし、「ポートVLAN ID」を "10" とする。
    image-12_border.png
    image-13_border.png
    image-14_border.png

  2. 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 の確認

  1. 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]#
    

  2. ファイル転送スクリプトを実行し、nmonでネットワーク転送量を確認。
    概ね意図した帯域制御が出来ていることが確認できた。

    [root@s914101:/img]# test.sh
    [root@s914101:/img]#
    

    LPAR(S914_SRIOV_2) からの送信量は、約88MB/sになっていることを確認。
    image-15_border.png

    LPAR(S914_SRIOV_3) からの送信量は、約27MB/sになっていることを確認。
    image-16_border.png

LPAR(S914_SRIOV_2)からの転送が先に終了し、
LPAR(S914_SRIOV_3)からの転送のみとなった時は、約108MB/s程度で転送していました。 
つまり、設定状況にかかわらず(20%の設定をしていても)、未使用の帯域(使われていない分)は、使えるということのようです。  
image-17_border.png

まとめ

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にはちゃんと記載がありました。)

以上です。

2
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?