スマートスタイル TECH BLOG

データベース&クラウド技術情報

OCIのブロック・ボリュームを超高パフォーマンスに設定してみる

はじめに

OCIのブロック・ボリュームには、パフォーマンス・レベル という設定があります。
これは、ブロックボリュームのパフォーマンスを表す ボリューム・パフォーマンス・ユニット(VPU) をいくつ割り当てるかで パフォーマンス・レベル が決定します。

パフォーマンス・レベル には、以下4つのレベルが存在し、VPUを多く割り当てる程、高パフォーマンスをだせるようになります。

レベル VPU 用途
より低いコスト 0 コスト最適型でシーケンシャルIOのスループット重視のワークロード向け
バランス 10 ランダムIOを実行する様々なワークロードに最適なバランス型
より高いパフォーマンス 20 超高パフォーマンスまでのパフォーマンスは必要ないが、高I/O要件のワークロード向け
超高パフォーマンス 30-120 I/O要件が非常に高く、最大限のパフォーマンスを必要とするワークロード向け

それぞれの パフォーマンス・レベル 及び VPU でのスループット等は、以下のリファレンスをご確認下さい。

超高パフォーマンスが使用できる対象について

最も高パフォーマンスとなる「超高パフォーマンス」を使用したいと思っても、全ての コンピュート・シェイプ 及び イメージ で使用できる訳ではありません。
マルチパスに対応している必要があり、ブロック・ボリュームのアタッチメントタイプによって、異なります。

アタッチメントタイプ = iSCSI の場合

対応するコンピュート・シェイプ

対応するイメージ

  • Oracle Linux、またはOracle Linuxイメージをベースとするカスタム・イメージが対象

詳細については、以下のリファレンスをご確認ください。

アタッチメントタイプ = 準仮想化 の場合

対応するコンピュート・シェイプ

  • VMシェイプの場合
    • 16 OCUP以上が割り当てられているインスタンスが対象
  • BMシェイプの場合
    • 全てのシェイプが対象外(※iSCSI アタッチメントのみが対象)

対応するイメージ

  • Oracle Linux
  • Ubuntu
  • CentOS
  • Windows

詳細については、以下のリファレンスをご確認ください。

超高パフォーマンスの使用

それでは、「超高パフォーマンス」を設定したブロックボリュームを実際に使用してみたいと思います。
コンピュート及びブロック・ボリュームは、それぞれ以下のように設定しています。

  • コンピュート
項目 設定
シェイプ VM.Standard.E4.Flex
イメージ Oracle Linux 8
OCPU 16
Memory(GB) 32
  • ブロック・ボリューム
項目 設定
アタッチメントタイプ iSCSI
VPU/GB 30
ボリューム・サイズ 1024 GB

ブロック・ボリューム管理プラグインの有効化

アタッチメントタイプ を iSCSI とする場合は、コンピュートの設定で、「Oracle Cloud エージェント」の「ブロック・ボリューム管理」を有効化する必要があります。
こちらは、デフォルトでは無効となっていますので、有効にします。

有効化処理が完了すると、/etc/multipath.conf が作成されます。

ブロック・ボリュームの作成

アタッチするブロック・ボリュームを作成します。
ボリューム・サイズは、デフォルトの 1024GB 、VPU は 超高パフォーマンス となるように 30 を設定します。




ブロック・ボリュームのアタッチ

作成したブロック・ボリュームをコンピュートにアタッチします。
アタッチメント・タイプは ISCSI 、デバイス・パスは /dev/oracleoci/oraclevdb としました。


アタッチ処理が完了すると、「マルチパス」が「はい」になっていることを確認します。

パーティション、ファイルシステムの作成

ブロック・ボリュームのアタッチ後にコンピュートでブロック・ボリュームをマルチパス構成で認識していることが確認できます。

それでは、以下の手順に沿って、パーティション及びファイルシステムの作成を行っていきます。

まずは、パーティションの作成を行います。

Failed to add partition 1 to system: Invalid argument とエラーが出力されていますが、以下は RedHat の情報になりますが、マルチパス構成の場合は必ず出力されるもので、対応不要とされています。

パーティションが作成されていることが確認できます。

続いてファイルシステムを作成してマウントします。

正常にマウントされています。

簡易検証

もう1つバランスタイプ(VPU=10)のブロック・ボリュームを同じボリュームサイズで /mnt/balance にアタッチしました。

両方のブロック・ボリュームに対して、以下のリファレンスに記載されているFIOを使用した「IOPSパフォーマンス・テスト」の「ランダム読取り/書込みをテスト」を実施してみました。

バランス(VPU=10)

  • 検証コマンド

  • 結果

ブロック・ボリューム・パフォーマンス によると、バランス(VPU=10)では、1GB あたり 60 IOPS となるので、1024 GB × 60 = 61,440 となりますが、ボリュームあたりの最大 IOPS は 25,000 と記載されています。
read,write ともに 12.6k なので、合算した値からすると、最大IOPSで制限されているように思います。

超高パフォーマンス(VPU=30)

  • 検証コマンド

  • 結果

超高パフォーマンス(VPU=30)では、1GB あたり 90 IOPS となるので、1024 GB × 90 = 92,160 となりますが、ボリュームあたりの最大 IOPS は 75,000 となります。
read,write ともに 37.9k なので、合算した値からすると、こちらも最大IOPSで制限されているように思いますが、バランスの3倍程度のIOPSとなっています。

まとめ

必要に応じて、ブロック・ボリュームのパフォーマンス・レベルを変更することで性能の向上が見られますが、当然、高いパフォーマンスになる程、利用価格が高くなります。
執筆時点での コスト試算ツール では、以下のようになっていますが、パフォーマンス・レベルを変更する場合は、価格の差分についても把握しておくようにしましょう。

パフォーマンス・レベル(VPU) 1GBあたりの月単価
より低いコスト(0) 3.57円
バランス(10) 5.95円
より高いパフォーマンス(20) 8.33円
超高パフォーマンス(30) 10.71円
超高パフォーマンス(40) 13.09円
超高パフォーマンス(50) 15.47円
超高パフォーマンス(60) 17.85円
超高パフォーマンス(70) 20.03円
超高パフォーマンス(80) 22.61円
超高パフォーマンス(90) 24.99円
超高パフォーマンス(100) 27.37円
超高パフォーマンス(110) 29.75円
超高パフォーマンス(120) 32.13円
Return Top