Help us understand the problem. What is going on with this article?

qperfを使ってOracle Cloud(OCI)のAD間ネットワークパフォーマンスを測定してみた

More than 1 year has passed since last update.

2019/2/14 new
2019/2/15 参考に追記, 関連記事のリンク追加


はじめに

Oracle Cloud Infrastructure(OCI)の北米にあるリージョンについて、AD(Availability Domain = データセンター)間のネットワークパフォーマンスを測定してみました。ツールはqperfを使っています。

やりたいこと

AD間のネットワークパフォーマンス(帯域とレイテンシ)を測定する

image.png

前提

  • 北米のPhoenixリージョンとAshburnリージョンのみ確認
  • VCNは1つ(3つのADを跨いだネットワーク)
  • 以下のcomputeインスタンスを利用
    • Shape : VM.standard2.16(帯域最大16.4 Gbps)
    • OS : Oracle Linux 7.6( 4.14.35-1844.1.3.el7uek.x86_64 )

結果

  • 帯域
    • VM.standard2.16のシェイプの制限値(16Gb/s)まで利用することが出来た。
  • レイテンシ
    • どの組み合わせでも、公式発表通り「1ms以下」(片道500μs?)。
      • 片道100μs - 400μs程度
    • ADの組み合わせによってレイテンシに差があることも分かった(200 - 300μs程度の差)。
      • AshburnではAD1 - AD2間、PhoenixではAD1 - AD3間が最速
  • 注意:AD1,2,3が実際にどのデータセンターかはアカウントによって異なります。
Ashburn bandwidth(TCP) latency(one way)
AD1 -> AD2 16 Gb/s 111 μs
AD2 -> AD3 16 Gb/s 131 μs
AD3 -> AD1 16 Gb/s 291 μs

※レイテンシは3回測定した平均値(切り捨て)

Phoenix bandwidth(TCP) latency(one way)
AD1 -> AD2 16 Gb/s 402 μs
AD2 -> AD3 16 Gb/s 386 μs
AD3 -> AD1 16 Gb/s 113 μs

※レイテンシは3回測定した平均値(切り捨て)

他のクラウドベンダは?

作業

セットアップ

セキュリティリスト設定

省略(ingress/egressともに使用するポート/tcpを開ける)

ファイアーウォール設定

qperfが使う制御用とデータ用のポートをあける
sudo firewall-cmd --permanent --add-port=19765/tcp --add-port=19766/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
※すべてのインスタンスで実施

qperfインストール

$ sudo yum -y install qperf
※すべてのインスタンスで実施

インストールされたもの
(1/4): libibverbs-17.2-3.el7.x86_64.rpm                    | 245 kB   00:00
(2/4): librdmacm-17.2-3.el7.x86_64.rpm                     |  61 kB   00:00
(3/4): qperf-0.4.9-3.el7.x86_64.rpm                        |  58 kB   00:00
(4/4): rdma-core-17.2-3.el7.x86_64.rpm                     |  49 kB   00:00
--------------------------------------------------------------------------------
Total                                              3.8 MB/s | 414 kB  00:00

測定

※Phoenixで実施したもののみ記載

①AD1 -> AD2

帯域

  • サーバー側(AD2)
    qperf
ad2のcomputeインスタンス
[opc@ad2-instance ~]$ qperf

  • クライアント側(AD1)
    qperf -vvs -ip 19766 -t 60 --use_bits_per_sec <IP addr> tcp_bw
    ※オプション等の意味については末尾の「参考」に記載
ad1のcomputeインスタンス
[opc@ad1-instance ~]$ qperf -vvs -ip 19766 -t 60 --use_bits_per_sec 10.0.101.3 tcp_bw
tcp_bw:
    bw          =    16 Gb/sec  <--★シェイプの制限値
    msg_rate    =  30.4 K/sec
    send_bytes  =   120 GB
    send_msgs   =  1.83 million
    recv_bytes  =   120 GB
    recv_msgs   =  1.83 million

レイテンシ

  • サーバー側(AD2)
    qperf

  • クライアント側(AD1)
    qperf -vvs -ip 19766 -t <IP addr> tcp_lat

ad1のcomputeインスタンス
[opc@ad1-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.101.3 tcp_lat
tcp_lat:
    latency         =     402 us    <--★
    msg_rate        =    2.49 K/sec
    loc_send_bytes  =    74.6 KB
    loc_recv_bytes  =    74.6 KB
    loc_send_msgs   =  74,563
    loc_recv_msgs   =  74,562
    rem_send_bytes  =    74.6 KB
    rem_recv_bytes  =    74.6 KB
    rem_send_msgs   =  74,562
    rem_recv_msgs   =  74,562
[opc@ad1-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.101.3 tcp_lat
tcp_lat:
    latency         =     404 us    <--★
    msg_rate        =    2.48 K/sec
    loc_send_bytes  =    74.3 KB
    loc_recv_bytes  =    74.3 KB
    loc_send_msgs   =  74,260
    loc_recv_msgs   =  74,259
    rem_send_bytes  =    74.3 KB
    rem_recv_bytes  =    74.3 KB
    rem_send_msgs   =  74,259
    rem_recv_msgs   =  74,259
[opc@ad1-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.101.3 tcp_lat
tcp_lat:
    latency         =     402 us    <--★
    msg_rate        =    2.49 K/sec
    loc_send_bytes  =    74.6 KB
    loc_recv_bytes  =    74.6 KB
    loc_send_msgs   =  74,584
    loc_recv_msgs   =  74,583
    rem_send_bytes  =    74.6 KB
    rem_recv_bytes  =    74.6 KB
    rem_send_msgs   =  74,584
    rem_recv_msgs   =  74,584

②AD2 -> AD3

帯域

  • サーバー側(AD3)
    qperf
ad3のcomputeインスタンス
[opc@ad3-instance ~]$ qperf

  • クライアント側(AD2)
    qperf -vvs -ip 19766 -t 60 --use_bits_per_sec <IP addr> tcp_bw
ad2のcomputeインスタンス
[opc@ad2-instance ~]$ qperf -vvs -ip 19766 -t 60 --use_bits_per_sec 10.0.102.3 tcp_bw
tcp_bw:
    bw          =    16 Gb/sec  <--★シェイプの制限値
    msg_rate    =  30.4 K/sec
    send_bytes  =   120 GB
    send_msgs   =  1.83 million
    recv_bytes  =   120 GB
    recv_msgs   =  1.83 million

レイテンシ

  • サーバー側(AD3)
    qperf

  • クライアント側(AD2)
    qperf -vvs -ip 19766 -t <IP addr> tcp_lat

ad2のcomputeインスタンス
[opc@ad2-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.102.3 tcp_lat
tcp_lat:
    latency         =     386 us    <--★
    msg_rate        =    2.59 K/sec
    loc_send_bytes  =    77.7 KB
    loc_recv_bytes  =    77.7 KB
    loc_send_msgs   =  77,655
    loc_recv_msgs   =  77,654
    rem_send_bytes  =    77.7 KB
    rem_recv_bytes  =    77.7 KB
    rem_send_msgs   =  77,654
    rem_recv_msgs   =  77,654
[opc@ad2-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.102.3 tcp_lat
tcp_lat:
    latency         =     390 us    <--★
    msg_rate        =    2.57 K/sec
    loc_send_bytes  =      77 KB
    loc_recv_bytes  =      77 KB
    loc_send_msgs   =  77,019
    loc_recv_msgs   =  77,018
    rem_send_bytes  =      77 KB
    rem_recv_bytes  =      77 KB
    rem_send_msgs   =  77,018
    rem_recv_msgs   =  77,018
[opc@ad2-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.102.3 tcp_lat
tcp_lat:
    latency         =     383 us    <--★
    msg_rate        =    2.61 K/sec
    loc_send_bytes  =    78.4 KB
    loc_recv_bytes  =    78.4 KB
    loc_send_msgs   =  78,417
    loc_recv_msgs   =  78,416
    rem_send_bytes  =    78.4 KB
    rem_recv_bytes  =    78.4 KB
    rem_send_msgs   =  78,417
    rem_recv_msgs   =  78,417    

③AD3 -> AD1

帯域

  • サーバー側(AD1)
    qperf
ad1のcomputeインスタンス
[opc@ad1-instance ~]$ qperf

  • クライアント側(AD3)
    qperf -vvs -ip 19766 -t 60 --use_bits_per_sec <IP addr> tcp_bw
ad3のcomputeインスタンス
[opc@ad3-instance ~]$ qperf -vvs -ip 19766 -t 60 --use_bits_per_sec 10.0.100.4 tcp_bw
tcp_bw:
    bw          =    16 Gb/sec  <--★シェイプの制限値
    msg_rate    =  30.4 K/sec
    send_bytes  =   120 GB
    send_msgs   =  1.83 million
    recv_bytes  =   120 GB
    recv_msgs   =  1.83 million

レイテンシ

  • サーバー側(AD1)
    qperf

  • クライアント側(AD3)
    qperf -vvs -ip 19766 -t 60 --use_bits_per_sec <IP addr> tcp_bw

ad3のcomputeインスタンス
[opc@ad3-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.100.4 tcp_lat
tcp_lat:
    latency         =      111 us   <--★
    msg_rate        =     9.04 K/sec
    loc_send_bytes  =      271 KB
    loc_recv_bytes  =      271 KB
    loc_send_msgs   =  271,282
    loc_recv_msgs   =  271,281
    rem_send_bytes  =      271 KB
    rem_recv_bytes  =      271 KB
    rem_send_msgs   =  271,281
    rem_recv_msgs   =  271,281
[opc@ad3-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.100.4 tcp_lat
tcp_lat:
    latency         =      114 us   <--★
    msg_rate        =     8.73 K/sec
    loc_send_bytes  =      262 KB
    loc_recv_bytes  =      262 KB
    loc_send_msgs   =  262,029
    loc_recv_msgs   =  262,028
    rem_send_bytes  =      262 KB
    rem_recv_bytes  =      262 KB
    rem_send_msgs   =  262,028
    rem_recv_msgs   =  262,028
[opc@ad3-instance ~]$ qperf -vvs -ip 19766 -t 60 10.0.100.4 tcp_lat
tcp_lat:
    latency         =      116 us   <--★
    msg_rate        =     8.65 K/sec
    loc_send_bytes  =      259 KB
    loc_recv_bytes  =      259 KB
    loc_send_msgs   =  259,450
    loc_recv_msgs   =  259,449
    rem_send_bytes  =      259 KB
    rem_recv_bytes  =      259 KB
    rem_send_msgs   =  259,449
    rem_recv_msgs   =  259,449    

参考・補足情報

マニュアル他

  • OCIマニュアルではiperf3というツールを使っていました(「Network Performance」)
  • OCi Computeインスタンスのシェイプ毎のNW帯域は「Compute Shapes」を参照
  • FAQには、VCNを分けてLPGで接続しても変わらないと書いてある。いつか検証してみたい。
FAQサイトより引用
Is there a performance impact based on throughput and latency 
over the established local peering between two VCNs?

No. Throughput and latency should be close to intra-VCN connections. 
Traffic over the local peering has similar availability and 
bandwidth constraints as the traffic between instances in a VCN.

qperfについて

qperf
NAME
       qperf - Measure RDMA and IP performance

SYNOPSIS
       qperf
       qperf SERVERNODE [OPTIONS] TESTS

DESCRIPTION
       qperf  measures  bandwidth  and latency between two nodes.  It can work
       over TCP/IP as well as the RDMA transports.  On one of the nodes, qperf
       is typically run with no arguments designating it the server node.  One
       may then run qperf on a client node  to  obtain  measurements  such  as
       bandwidth, latency and cpu utilization.

       In  its  most  basic  form,  qperf is run on one node in server mode by
       invoking it with no arguments.  On the other node, it is run  with  two
       arguments:  the  name  of  the  server node followed by the name of the
       test.  A list of tests can be found in the section, TESTS.   A  variety
       of options may also be specified.
       -ip, --ip_port Port
              Use Port to run the socket tests.  This is different from --lis‐
              ten_port  which is used for synchronization.  This is only rele‐
              vant for the socket tests and  refers  to  the  TCP/UDP/RDS/SCTP
              port that the test is run on.


       -t, --time Time
              Set test duration to  Time.   Specified  in  seconds  however  a
              trailing  m, h or d indicates that the time is specified in min‐
              utes, hours or days respectively.

       -v, --verbose
              Provide more detailed output.  Turns on -vc, -vs, -vt and -vu.

       -vs, --verbose_stat
              Provide information on statistics.

       -vv, --verbose_more
              Provide even more detailed output.  Turns on  -vvc,  -vvs,  -vvt
              and -vvu.
       tcp_bw TCP streaming one way bandwidth

       tcp_lat
              TCP one way latency

以上

feifo
CloudとかDatabaseとかをやってます。 ※投稿内容は個人の見解であり所属する組織の公式見解ではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away