私たちの以前の投稿で、memcachedの拡張機能であるExtstoreを紹介しました。これにより、キャッシュデータをフラッシュストレージに移動できます。IntelとPacketと協力して、高速フラッシュSSDおよびOptane NVMeデバイスでextstoreをテストしました。ただし、これらのテストでは、多くの興味深い疑問が未解決のまま残りました。
この投稿では、以前よりも厳しい監視と悪い条件下でテストを実行し、これらの質問に答えようとします。memcachedは、RAMのみを使用し、大量のバッチ処理を行うことで、48コアマシンで1秒あたり5,000万を超えるキーを処理できます。印象的ですが、現実のシナリオは、小さな個々のリクエスト、システムコール、コンテキストスイッチングなどで満たされています。潜在的なベンチマーキングを回避するために、RAM、フラッシュ、Optaneデバイス間でテストするときに、これらのニュアンスを再現しようとします。
テールレイテンシは、少数の遅いバックエンドリクエストが大多数のユーザートラフィックに影響を与える可能性があります。キャッシュシステムを使用すると応答時間を改善できますが、応答カーディナリティの高いサービスは、さらに影響を受ける可能性があります。ヒット率が低いと、キャッシュサービスへのクエリにかかる時間が、それらの失敗したリクエストに対する単なる時間税になる可能性があります。
興味深い研究が、多くのバックエンドを持つサービスの背後にある共有キャッシュプールについて行われています。これにより、いくつかのユースケースはカバーされますが、バックエンドがますます大きな応答を持つようになり、RAMベースのキャッシュを圧倒する可能性があるため、すべてを網羅しているわけではありません。アプリケーションの地理的な拡大により、すべてのサービスをすべての場所にデプロイする必要があるため、コストもかかる可能性があります。
ストレージスペースを拡張することでこれらの問題を解決しようとするために、コードは2つの構成でテストされました。ベンチマークでは、「Just a Bunch of Devices」(JBOD)を使用しました。すべてのデバイスは、読み取りと書き込みを均等に分散する1つの大きなページプールを作成します。JBODサポートはmemcached 1.5.10でリリースされました。
ベンチマークを行わなかった別のアプローチは、階層化ストレージでした。extstoreでは、保存されたデータは論理バケットに整理されます。これらのバケットは特定のデバイスにグループ化できるため、ユーザーは小型/高速および大型/安価なNVMeデバイスを混在させてハードウェアをデプロイできます。ネットワークブロックデバイスも使用できます。
ドラフトはこちらで追跡できます。詳細については、今後の投稿で説明します。
テストでは、mc-crusherのタグ4を「test-optane」スクリプトの下で使用しました。
テストハードウェアは、デュアル16コアIntel Xeon(合計32コア)、192G RAM、4TBフラッシュSSD、および3x 750G optaneドライブを搭載したサーバーでした。
CPUとメモリはNUMAノード0にバインドされ、シングルソケットサーバーのように動作します。これはユーザーがデプロイするものに近く、調査結果に集中できます。
これまでに行った他のテストでは、サンプリングされたリクエストレイテンシを使用したスループットに焦点を当てていました。1秒あたり数百万のキーのフェッチレートを可能にするために、少数のTCP接続で大量のバッチ処理が使用されました。このテストでは、単一デバイス構成とJBOD構成の両方で最悪のシナリオに焦点を当てました。パイプライン化されたリクエストを大量に送信する少数の接続の代わりに、数百の接続が個々のGETコマンドのセットを定期的に送信しています。
RAMのみのテストは、ベースラインとして存在します。これは、extstoreにまったく触れない最悪の構成を示しています。キャッシュをディスクに移動することの影響を判断するために、RAMと問題のドライブのパーセンタイルと散布図を比較することが重要です。
これにより、最悪のケースに偏った中間地点に着地します。ほとんどのユーザーはマルチキーフェッチを介してある程度のバッチ処理を行っているため、このベンチマークは現実的である必要があります。
ターゲットリクエストレートが増加するにつれて、レイテンシパーセンタイルをプロットします。また、経時的に取得されたすべてのサンプルの点群もあります。これは、外れ値と、各テスト中のパフォーマンスがどれだけ一貫しているかを示しています。
パフォーマンスを測定するためにパーセンタイル平均を使用することがいかに問題であるかを強調することが重要です。最初のグラフで傾向を特定するために使用します。次に、レイテンシの概要と、テストの全期間の散布図で補完します。これがないと、折れ線グラフでは問題なく見えるテストでも、実際には深刻な外れ値が発生したり、数秒間すべてのトラフィックが途絶えたりする可能性があります。
レイテンシパーセンタイル- 本番環境のクエリレートにマウスオーバーして詳細な内訳を表示
ここで示す追加のテストは、1つまたは複数のデバイスを備えた単一マシンのパフォーマンスにおける最悪のシナリオのベースラインを示しています。1秒あたり約500,000のリクエストレートで、平均レイテンシが1ミリ秒未満の場合、ほとんどのワークロードは快適に適合します。ディスクスペースの拡張はうまく機能しますが、複数の高性能デバイスでのスループットを改善するには、さらなる開発が必要です。