前回の記事に引き続き、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 |
結果を見ると、平均で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 |
得られた測定結果をベースラインと比較すると、平均で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 |
ベースラインとの比較において前回の記事ほど劇的な変化はないが、平均で10ms程度、80%ラインや90%ラインにおいても10ms~20ms程のパフォーマンス向上が確認できた。この原因は10件のエンティティ追加を行うEGTの場合元々のベースラインがNagleアルゴリズムの対象とならないために、そこまで大きな影響がなかったものと考えられる。
またこのテストではテスト初期においてパフォーマンスが向上していく傾向は確認できていない。
一方、一定間隔でのパフォーマンス劣化傾向は上記グラフでは明確には確認できないが、計測サンプル数を増やした以下のグラフでは5000サンプル程度の間隔でパフォーマンスが劣化していることが確認できる。
まとめ
以上のEGTを用いたエンティティ追加におけるExpect100ContinueおよびUseNagleAlgorithmのパフォーマンスへの影響を測定したところ、以下の結果が得られた。
- Expect100Continueを無効化することで10~20%程度パフォーマンスが向上する
- UseNagleAlgorithmを無効化することで、1件のエンティティ追加の場合程の劇的な変化はないが10~20%程度パフォーマンスが向上している
- テスト初期において、パフォーマンスが上昇していく傾向が見られた
- 一定間隔でパフォーマンスが劣化することが確認できた
テスト初期のパフォーマンス上昇傾向および一定間隔でのパフォーマンス劣化の原因は不明であるが、内部で行われているパーティションの最適化などの影響なのかもしれないと思っています。
0 件のコメント:
コメントを投稿