Mongoose:ストレージパフォーマンステストツール

こんにちは、Habr。 もともと内部のニーズのためにEMCの腸内で開発されたストレージシステム(データストレージシステム)のパフォーマンスをテストするためのツールになりますが、スムーズに成長する能力があります。 ところで、文字通り「昨日」、 マングースオープンソースプロジェクトのステータスを受け取りました。 そして、それは彼について少し話す時間です。 それで、この獣は何ですか?



画像



主な機能



  1. 分散モード

    これは、集中制御とメトリックの収集により、多くのネットワークノードから同時にロードタスクを実行する方法です。 ドキュメントの簡略図:



    分散ストレージの負荷を大幅に増やし、多数のユーザーの要求をエミュレートできます。



  2. 報告

    • 入力で再び使用できる処理済みオブジェクト(ファイルなど)のリストを含む出力ファイル
    • 個々の操作ごとに高解像度のタイムスタンプ(μs)を利用可能


  3. CRUD (Create / R ead / U pdate / D elete)-負荷を作成するために利用可能なタイプのI / O操作

  4. さまざまなタイプのストレージのサポート:

    • Amazon S3 REST API
    • EMC Atmos REST API
    • OpenStack Swift REST API
    • ファイルシステム(ローカル、NFSマウントなど)


  5. サポートされるオブジェクトタイプ:

    • コンテナ(FSの場合はディレクトリ、S3の場合はバケット)
    • データ(ファイルシステムを使用する場合のファイル)


  6. 読み取り操作中のデータの検証
  7. 任意のデータ生成 (非圧縮の均一なノイズ、テキストまたは同一のバイト)
  8. スクリプト言語
  9. 「スタブ」 :クラウドストレージシステムの機能を実装するHTTPサーバー。データを保存しませんが、読み取り時にデータを返すことができます。 実際、マングース自体の機能とパフォーマンスをテストするためのストレージモック。 彼は、FSスタブと同様に分散スタブになることに惹かれています。

  10. Web GUI
  11. そして、他にも多くの素晴らしいものがありますが、そのリストはスペースを取りすぎます。


既知の類似体





高負荷について一言



パフォーマンステストツールは高いI / O負荷を作成する必要があるため、このツール自体は非常に生産性が高く、環境リソースを非常に効率的に使用する必要があります。

  1. C10Kのソリューション

    以前のバージョンのマングースでは、スレッドは対応する接続​​にバインドされていました。 このアプローチに欠陥があることがすぐに明らかになりました。 多数のスレッドを持つ大きなオブジェクトを操作する場合、パフォーマンスインジケーターは特に悪かった。 ただし、イベント駆動型の非同期I / Oを適用すると、結果は印象的でした。 このツールは、100万の同時接続を開いた状態でも、また分散モードを使用しなくても、この数を増やすことができる操作性を実証しています。







  2. 可能な限りゼロコピー
  3. 送信データの既知のサイズに基づいたI / Oバッファーサイズの自動構成。 小さなオブジェクトはバッファよりも小さく、大きなオブジェクトはバッファよりも大きくなります。 書き込み-より多くの出力バッファ、読み取り-より多くの入力バッファ。 ゼロコピーを提供するために、バッファは実際にはダイレクトメモリに配置されます。


実際にどのように見えるか



最新バージョンのtarballをダウンロードして展開すると、mongooseが起動して、単に不名誉になります。

java -jar mongoose-<VERSION>/mongoose.jar
      
      





これにより、マングースはデフォルトですべてを実行しようとします。



この場合のエラー以外の何かを見るには、同じマシンで「スタブ」を実行してみてください(ストレージスモックとして機能します)。

 java -jar mongoose-<VERSION>/mongoose.jar wsmock
      
      







GUIを使用する場合は、次のコマンドを実行する必要があります。

 java -jar mongoose-<VERSION>/mongoose.jar webui
      
      





そして、127.0.0.1:8080のブラウザーに移動します。





もう1つの重要な機能は、カスタムスクリプトです。 スクリプトはJSON形式で記述されており、起動時に次のように指定できます。

 java -jar mongoose-<VERSION>/mongoose.jar -f <PATH_TO_SCENARIO_FILE>.json
      
      





最も単純なシナリオの1つは次のとおりです。

 { "type": "load" }
      
      





このスクリプトは、他のスクリプトファイルが明示的に指定されていない場合、デフォルトのmongooseで使用されます。 もう少し複雑なスクリプトの例:

 { "type" : "for", "value" : "threads", "in" : [ 1, 10, 100, 1000, 10000, 100000 ], "config" : { "load" : { "threads" : "${threads}" } }, "jobs" : [ { "type" : "load" } ] }
      
      







より詳細な使用情報は、mongoose Webサイトの 「ドキュメント」セクションで入手できます。



次は?



執筆時点で、最新の安定バージョンは2.4.1です。 現在、バージョン3のアクティブな開発が進行中で、新しいアーキテクチャが適用され(モニター-ジェネレーター-ドライバー-モニター)、分散操作モードと「加重負荷」タイプのスクリプトの新しい可能性が開かれます。







将来の計画には次のものも含まれます。




All Articles