昨日の記事で、ボトルネックでない部分を改善してしまうと逆に性能(=スループット)が落ちてしまう危険性があると書きました。
システムの性能やパフォーマンスは「レイテンシ」と「スループット」という指標を用いて表現されます。レイテンシは処理時間のことを指します。スループットは単位時間に行う処理量を指します。
高速道路に例えると、それぞれこんなイメージです。
- レイテンシ:ある地点から次の地点までに車で到着するまでにかかった時間
- スループット:1時間あたりに道路を通過できる車の台数
より具体的なイメージだと、東京インターチェンジ(IC)から大阪の吹田ICまでを車で移動する場合、ジャンクション(JCT)を経由していくつもの高速道路で移動しますね。それぞれの高速道路での距離や道幅、地形などによって到達する時間や通過できる台数が変わってきます。
ここでボトルネックとなるのが、渋滞している区間や道幅が狭くなっている場所だと言えます。たとえば、四日市JCT付近の渋滞や吹田JCTの合流渋滞が該当します。
一箇所でも渋滞となっていると、到着するのが遅くなってしまいますよね。同様にシステムでも性能低下となってしまいます。
ここで、ボトルネックを把握して改善できれば到着時間が早くできます。しかし、ボトルネックでない場所を改善するとどうなるか。たとえば、新東名高速道路で工事をして道幅を広げたとします。
新東名高速道路の拡張工事によって、渋滞が緩和され、今まで2時間かかっていたのが1時間に短縮されたとします。これはレイテンシの改善となります。
しかし、次に乗り継ぐ伊勢湾岸自動車道で乗り入れる車の台数が増えてしまうことで、かえって渋滞となってしまうかもしれません。したがって全体のスループットは改善されません。逆に悪化するかもしれません。
システムのパフォーマンス向上させる目的を達成させたい場合、レイテンシとスループットのどちらを指すのかをきちんと定義したほうがいいでしょう。レイテンシであれば、上述のように改善しやすいところから手をつければ全体の改善につながります。スループットであれば、ボトルネックを正しく特定できないと意味をなしません。
まあ、ボトルネックの特定が難しいのですが・・・
技術評論社 (2017-09-23T00:00:01Z)
¥5,925 (コレクター商品)