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

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

分散ストレージの負荷を大幅に増やし、多数のユーザーの要求をエミュレートできます。
- 報告
- 入力で再び使用できる処理済みオブジェクト(ファイルなど)のリストを含む出力ファイル
- 個々の操作ごとに高解像度のタイムスタンプ(μs)を利用可能
- CRUD (Create / R ead / U pdate / D elete)-負荷を作成するために利用可能なタイプのI / O操作
- さまざまなタイプのストレージのサポート:
- Amazon S3 REST API
- EMC Atmos REST API
- OpenStack Swift REST API
- ファイルシステム(ローカル、NFSマウントなど)
- サポートされるオブジェクトタイプ:
- コンテナ(FSの場合はディレクトリ、S3の場合はバケット)
- データ(ファイルシステムを使用する場合のファイル)
- 読み取り操作中のデータの検証
- 任意のデータ生成 (非圧縮の均一なノイズ、テキストまたは同一のバイト)
- スクリプト言語
- 「スタブ」 :クラウドストレージシステムの機能を実装するHTTPサーバー。データを保存しませんが、読み取り時にデータを返すことができます。 実際、マングース自体の機能とパフォーマンスをテストするためのストレージモック。 彼は、FSスタブと同様に分散スタブになることに惹かれています。
- Web GUI
- そして、他にも多くの素晴らしいものがありますが、そのリストはスペースを取りすぎます。
既知の類似体
- Apache JMeter
アナログは非常にarbitrary意的であり、マングースとの共通点がほとんどないため、比較はほとんど不可能です。
- COSBench (Intel)
JMeterよりも機能的に類似しています。
利点:開発履歴が長く、開発者がより活発で、幅広いストレージシステムをサポートします。
欠点:多数の機能ポイント(たとえば、任意のデータの生成)およびパフォーマンス(いわゆる「S10K」の問題を解決しません)で劣っています。
高負荷について一言
パフォーマンステストツールは高いI / O負荷を作成する必要があるため、このツール自体は非常に生産性が高く、環境リソースを非常に効率的に使用する必要があります。
- C10Kのソリューション
以前のバージョンのマングースでは、スレッドは対応する接続にバインドされていました。 このアプローチに欠陥があることがすぐに明らかになりました。 多数のスレッドを持つ大きなオブジェクトを操作する場合、パフォーマンスインジケーターは特に悪かった。 ただし、イベント駆動型の非同期I / Oを適用すると、結果は印象的でした。 このツールは、100万の同時接続を開いた状態でも、また分散モードを使用しなくても、この数を増やすことができる操作性を実証しています。

- 可能な限りゼロコピー
- 送信データの既知のサイズに基づいたI / Oバッファーサイズの自動構成。 小さなオブジェクトはバッファよりも小さく、大きなオブジェクトはバッファよりも大きくなります。 書き込み-より多くの出力バッファ、読み取り-より多くの入力バッファ。 ゼロコピーを提供するために、バッファは実際にはダイレクトメモリに配置されます。
実際にどのように見えるか
最新バージョンのtarballをダウンロードして展開すると、mongooseが起動して、単に不名誉になります。
java -jar mongoose-<VERSION>/mongoose.jar
これにより、マングースはデフォルトですべてを実行しようとします。
- 新しいオブジェクトの作成(作成)を永久に実行します(ユーザーが割り込むまで)
- S3 APIを使用します(つまり、HTTP要求を生成します)
- デフォルトアドレス(127.0.0.1:9020)への接続を1つ使用します
この場合のエラー以外の何かを見るには、同じマシンで「スタブ」を実行してみてください(ストレージスモックとして機能します)。
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のアクティブな開発が進行中で、新しいアーキテクチャが適用され(モニター-ジェネレーター-ドライバー-モニター)、分散操作モードと「加重負荷」タイプのスクリプトの新しい可能性が開かれます。

将来の計画には次のものも含まれます。
- 拡張されたWeb GUI
- 不完全な(部分的な)データ読み取り操作の実装
- サポートされるストレージタイプの範囲の拡大(Google Cloud Storage、EMC Centeraなど)
- DBMSサポート(?)