CodeZine(コードジン)

特集ページ一覧

スループットとは何か ~ 改善に役立つ性能試験を行うための前提知識

性能改善ノウハウを現場から直送! NTTデータのよりぬき『週刊まかせいのう』 第8回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

スループットがなぜ大事か

そもそも、なぜスループットが性能要件として重要かというと、ハードウェアのリソース使用量がスループットに比例するからです。スループットが高ければ高いほど、多くの処理が単位時間内に実行されることになるので、CPU、メモリ、ストレージ、ネットワークなどのリソースをそれだけ多く消費することになります。この点で、スループットというのは処理の「密度」あるいは「混雑度」を表しているともいえます。

また、単位時間が小さいほど、スループットの指標としての精度は高くなります。「1時間に1000ユーザがアクセスする」という要件を考えてみましょう。このときの「1秒あたりのスループット値」は、次に示すように、アクセスの集中度の違いによって大きく変わってきます。

  • すべてのユーザが均等にアクセスする場合:0.28人/秒
  • 半分のユーザが特定の1分にアクセスする場合:8.33人/秒

集中度が高いほど、ピークのアクセス数も増え、リソース消費量も増えます。スループットは「割り算」で表すことからも明らかなように、単位時間内では負荷が均等分布していることを仮定しています。そのため、「1時間あたり」とか「1日あたり」という粒度の粗い単位時間だと、集中度が現実と乖離して不当に低い値になるというリスクが生じます。

単位時間あたりの処理量が同じでも、集中率が高い場合(左)と<br/>均等分散の場合(右)とでは、必要な最大リソースが異なる
単位時間あたりの処理量が同じでも、集中率が高い場合(左)と
均等分散の場合(右)とでは、必要な最大リソースが異なる

こうした(不当に)低いスループットを要件とした負荷試験を行うと、商用サービス開始後に、はるかに大きな負荷がやってきてシステムが大遅延を起こし、慌てふためくことになります。単位時間は、可能であれば「秒」、少なくとも「分」単位で定義する必要があります。

システムにおけるスループットの単位としては、TPS(Transaction Per Second)やPV/S(Page View per Second)などがよく使われます。TPSのトランザクションの単位は自由に決められるため、バッチ処理における1レコードに対する処理を1トランザクションと見なすこともあれば、複数のWebリクエストから成る一連の処理をまとめて1トランザクションと見なすこともあります。そのため、TPSがスループット指標として使われているシステムでは、トランザクションがどう定義されているかを把握することが非常に重要です。「T」の単位をそろえておかないと、複数システム間の性能をTPSによって比較することはできません。同じ「トランザクション」といっても、その「重さ」が違うことになるからです。

これに対し、PV/Sの場合は、1ユーザが1ページにアクセスするのを1つのトランザクションと見なす指標なので、TPSよりもバラつきは小さくなります。それゆえ、参照系の多いWebシステムではよくスループット指標として使われます[6]。ApacheやIISといったWebサーバには、HTTPリクエストを記録したアクセスログを出力する機能があるので、これによってスループットを把握することができます[7]

はい、この公式テストに出ます

  • 性能要件はレスポンスタイムとスループットで定義する。
  • 多重度はスループットではない。
  • ゆえに多重度を性能要件にはならない。

三段論法的にいえば、裸の「ユーザ数」が性能要件にならない理由はこうです。ただ、多重度とスループットが全く無関係かというと、そうでもありません。多重度、スループット、レスポンスタイムの間には、次のような関係が成り立ちます。

多重度 / (レスポンスタイム + シンクタイム) = スループット …… 公式①

レスポンスタイムは、いわゆる処理時間、ユーザが体感する待ち時間です。シンクタイムは、ユーザが次のアクションに移るまでの思考時間(Think time)です。ECサイトの前で何の商品を買おうか悩んでいる時間などは、このシンクタイムに含まれます。

この公式は一見して分かりにくいかもしれませんが、次の図を見ると意味が理解できます。

公式「多重度 / (レスポンスタイム + シンクタイム) = スループット」の意味
公式「多重度 / (レスポンスタイム + シンクタイム) = スループット」の意味

仮に単純化して、全ユーザが同じ業務しかせず、レスポンスタイム+シンクタイム(r+th)もみな同じだと仮定します。

このとき、単位時間(t)あたりに実行される総トランザクション数Tは、次のようにして求められます。

まず、ユーザ一人の総トランザクション数は、t / (r+th) です。それがユーザ数(p)だけ存在するので、これを乗じて、

   (t * p) / (r + th) = T …… 公式②

ここで、左辺の分子tを右辺に移して、

   p / (r + th) = T / t …… 公式②'

ところで、T / t は、「総トランザクション数 / 単位時間」なので、これはスループットの定義そのものです。 したがって、②' = ①が証明されました。

これはかなり簡略化した話です。実際の負荷試験では、異なる業務を混合(ロードミックス)で行いますし、そうすれば当然、各トランザクションのレスポンスタイムもバラバラです。しかしその場合でも、計算方法は原理的には同じです。


関連リンク

  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2018/10/09 18:59 LoadRunnerのリンク先を更新しました。

バックナンバー

連載:性能改善ノウハウを現場から直送! NTTデータのよりぬき『週刊まかせいのう』

もっと読む

著者プロフィール

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5