web-dev-qa-db-ja.com

いくつのIOPSが必要ですか?私のワークロードのボトルネックはストレージです

過負荷のLinuxサーバーに配信するためにストレージが必要な数を知るにはどうすればよいですか? [〜#〜] iops [〜#〜]

私はサーバーを持っていて、そのボトルネックとしてストレージがあることを知っています。ボトルネックがストレージにならないようにしたいので、ストレージアレイのパフォーマンスのサイズを決定する必要があります。つまり、必要以上のIOPSを提供するアレイを購入します。

システムのIO統計やその他の情報が与えられた場合、必要以上にサービスを提供するためにストレージパフォーマンス(何を購入するか)のサイズを決定する方法を知るにはどうすればよいですか(最悪のシナリオをとる-重いIO contention-を参照)。

たとえば、iostatユーティリティは、IOの使用状況に関する興味深い統計を提供できます。その情報を使用して、必要なハードウェアのパフォーマンスを知ることができますか?どうやって?

これは一般的な質問です。実際のワークロードのタイプやソフトウェアは関係ありません(たとえばデータベースでもかまいません)。現在のIO統計と使用法。

5
Totor

ストレージが制限されていることがわかっている場合、サーバーのベンチマークでは、必要な量が明確に示されることはありません。彼らは限られたストレージの影響下であなたが行くことができる速度を伝えることができるだけです。探している答えを適切に取得するには、可能であれば、ストレージスロットルのさまざまな方法を分離し、それらを個別にテストする必要があります。

もちろん、IOPSは誰もが言う簡単な制限です。ディスクはシークが得意ではなく、データベースはシークが好きだからです。最近のキャッシュとSSDでは、小さなブロックIOランダムシーク読み取りは以前よりもはるかに簡単です。SSDの小さな層と大きなキャッシュは、それが本当にIOPSである場合におそらく確実になります(小さなブロックの「シーク」タイプのIOの場合)これがボトルネックになるため、これ以上影響を受けることはありません。ただし、これらのベンチマークには注意してください。人々がIOの数を測定するときに、あらゆる種類の非現実的な数値が読み取られます。ミラーリングされていないキャッシュに直接実行できます。それはLinuxサーバーの助けにはなりません。

別のタイプのストレージ制限は、帯域幅、つまりスループットです。これを特定することは困難ですが、読み取りまたは書き込みを試みているデータの量がわかっていて、それがどれだけの時間かかるかがわかっている場合は、新しい時間ターゲットを選択すると、それが新しい数値になります。たとえば、アプリケーションが大規模なバックアップなどを実行するために4時間費やしているのを観察し、その最後に9 TB移動した場合、現在のスループット制限は約650MB /秒です。その間に18 TBを移動する場合は、1300 MB/sが必要です。ほとんどの場合、イーサネット、ファイバー、およびSASストレージハードウェアよりも高速になるように構成されています。通常、転送層をフルに保つストレージの能力が実際のボトルネックです。フロントエンドポートの数と、キャッシュミラーリングがオンになっているベンチマークの数値を確認する必要があります(ボトルネックがないことを確認するため)キャッシュされた書き込みをミラーリングするコントローラー間)。

最後に、SCSIキューに関して、ストレージ構成が不適切であることによって制限される可能性があります。これはばかげて一般的ではありませんが、ストレージハードウェアを必要な速度でプッシュできないことによって定義されます。ホストからの書き込みで500ミリ秒の遅延が発生しているが、ストレージで3ミリ秒の100%キャッシュヒットが報告されている場合は、ターゲットのSCSIキューが不十分であることが問題である可能性があります。基本的に、SCSIイニシエーターは、要求を受け取るために使用できるキュー内のスロットを解放するために最大500ミリ秒待機しています。このためのホストキューの深さ設定とファンアウト率に関するベストプラクティスについて、ストレージベンダーに問い合わせる必要があります。

これがお役に立てば幸いです。期待していたほど簡単な答えではありません。

4
Basil

iostatコマンドは、必要な情報を表示します。ただ走れ:

iostat 1

出力は次のようになります。

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              42.00       128.00        84.00        128         84

tpstransactions per secondこれはopsと同じです。

これにより、毎秒更新されます。

Iostatを使用可能にするには、通常、Linuxディストリビューションにsystatパッケージをインストールする必要があります。

3
phoops

アプリケーションの負荷を1TPSからボトルネックのポイントをはるかに超えて変化させることができる場合は、TPSとI/Oの動作速度および帯域幅の関係のモデルを構築できます。

まあ言ってみれば:

  1 TPS causes   6 IOs and   2 KB of transfer, per second
 10 TPS causes  16 IOs and  11 KB
100 TPS causes 106 IOs and 101 KB
  but
200 TPS causes 107 IOs and 102 KB
300 TPS causes 107 IOs and 102 KB

1)次に、100 TPSのボトルネックが発生します。

2)5 IOと1 KBのオーバーヘッドがあり、その後、各トランザクションは1 IOと1 KBの転送を使用します。

今:

  1. は既存のデバイスの制限です。
  2. は予算であり、処理するTPSごとにプロビジョニングする量を計算するために使用します

それが良いと言ったら

10,000 IOPs and 100 KB/S、後者だけがあなたにとって意味があります。 100 IOPS and 10,000 KB/Sに適していると書かれている場合、前者だけが意味を持ちます。 IPS最初は、大規模な構成の帯域幅でボトルネックになることがあります

これを測定するには、繰り返して多くの個別のテストを行い、結果をグラフにプロットします。あなたの目は、数字の表よりも写真の方が優れています。

スループットグラフは、/のような勾配として始まり、その後突然横ばいになり、水平になるか、場合によっては再び下がるはずです。応答時間をプロットすると、_/のようになります。ボトルネックの負荷のあたりで、ベンドが整列します。

そして、はい、それはニースの直線ではなく、それらの曲線を近似する点の散布図になります(;-))

-デイブ

1
davecb