2011年4月6日

TableストレージにおけるExpect100ContinueとUseNagleAlgorithmの効果(2)~EGTを用いたエンティティ追加の場合

前回の記事に引き続き、Expect100ContinueおよびUseNagleAlgorithmの無効化が与えるパフォーマンスへの影響をエンティティグループトランザクション(以下、EGT)を用いた場合について測定してみた。

ソースコード

計測に利用したソースコードは、前回の記事に載せたものと一緒。EGTの内容は10件のエンティティを追加するもの。

EGTを用いたエンティティ追加に関するパフォーマンス測定結果

ベースライン

まずはベースラインとして、Expect100ContinueおよびUseNagleAlgorithmを両方共trueにした場合の結果が以下の通り。

Time Avg 80% 90% 95% Min Max
20110404-0400 106.815 118 153 239 47 860
20110404-0410 103.968 111 145 213 48 923
20110404-0420 99.541 109 136 192 46 971

image

結果を見ると、平均で100ms程度のパフォーマンスが得られ、90%の処理が150ms以内に終わっていることが確認できた。その一方グラフを見ると、0~4000サンプルあたりまでの間パフォーマンスが向上している点と2000サンプル程度の間隔でパフォーマンスが低下する時間があることが確認できる。

Expect100Continue=falseの測定結果

続いて、Expect100Continueを無効化した場合の測定結果である。

Time Avg 80% 90% 95% Min Max
20110404-0400 95.929 99 131 209 43 1034
20110404-0410 98.944 101 138 194 46 1028
20110404-0420 90.513 97 130 172 46 641

image

得られた測定結果をベースラインと比較すると、平均で10ms程度、80%ラインや90%ラインにおいても10ms~20ms程のパフォーマンス向上が確認できる。またその一方、ベースライン測定においても見られたテスト初期のパフォーマンス向上および2000サンプル間隔でのパフォーマンス劣化の現象がこちらでも確認できた。

UseNagleAlgorithm=falseの測定結果

続いて、UseNagleAlgorithmを無効化した場合の測定結果を示す。

Time Avg 80% 90% 95% Min Max
20110404-0400 96.281 102 133 190 46 945
20110404-0410 95.94 101 127 183 46 992
20110404-0420 93.835 101 124 169 44 1479

image

ベースラインとの比較において前回の記事ほど劇的な変化はないが、平均で10ms程度、80%ラインや90%ラインにおいても10ms~20ms程のパフォーマンス向上が確認できた。この原因は10件のエンティティ追加を行うEGTの場合元々のベースラインがNagleアルゴリズムの対象とならないために、そこまで大きな影響がなかったものと考えられる。

またこのテストではテスト初期においてパフォーマンスが向上していく傾向は確認できていない。

一方、一定間隔でのパフォーマンス劣化傾向は上記グラフでは明確には確認できないが、計測サンプル数を増やした以下のグラフでは5000サンプル程度の間隔でパフォーマンスが劣化していることが確認できる。

image

まとめ

以上のEGTを用いたエンティティ追加におけるExpect100ContinueおよびUseNagleAlgorithmのパフォーマンスへの影響を測定したところ、以下の結果が得られた。

  • Expect100Continueを無効化することで10~20%程度パフォーマンスが向上する
  • UseNagleAlgorithmを無効化することで、1件のエンティティ追加の場合程の劇的な変化はないが10~20%程度パフォーマンスが向上している
  • テスト初期において、パフォーマンスが上昇していく傾向が見られた
  • 一定間隔でパフォーマンスが劣化することが確認できた

テスト初期のパフォーマンス上昇傾向および一定間隔でのパフォーマンス劣化の原因は不明であるが、内部で行われているパーティションの最適化などの影響なのかもしれないと思っています。

0 件のコメント:

コメントを投稿