zashii-1434

Stats of My Life(おいしい人生を味わうために、コツコツとチャレンジしたことを書くブログ)

Webシステム作成時のボトルネックとなる制約の発見とその対処を学びたい①

 

本やネットを漁り、手探り感は拭えないけどタイトルに書かれていることができるようになりたい。

 

なので一旦、現時点で自分が調べたことをまとめてました。

こんな観点がもっと必要、とかあれば教えて頂けると助かります。

 

■CPU

 

CPU使用率は応用情報の問題に載ってあったので。計算方法を整理してみた。

 

【問題】

次のシステムにおいて,ピーク時間帯のCPU使用率は何%か。ここで,トランザクションはレコードアクセス処理と計算処理から成り,レコードアクセスはCPU処理だけでI/Oは発生せず,OSのオーバヘッドは考慮しないものとする。また,1日のうち発生するトランザクション数が最大になる1時間をピーク時間帯と定義する。

 

〔システムの概要〕
CPU数:1個
1日に発生する平均トランザクション数:60,000件
1日のピーク時間帯におけるトランザクション数の割合:20%
1トランザクション当たりの平均レコードアクセス数:100レコード
1レコードアクセスに必要な平均CPU時間:1ミリ秒
1トランザクション当たりの計算処理に必要な平均CPU時間:100ミリ秒

 

解法は次のステップで解くことができます。

①ピーク時間帯のトランザクション数は 60,000 * 0.2 = 12,000

②1トランザクション当たりの平均CPU時間は、レコードアクセス時間と計算処理時間の合計のため、

100*1ミリ秒(レコードアクセス時間) + 100ミリ秒 = 200ミリ秒 / 1トランザクション

③ピーク時間帯にかかるCPU使用時間は12,000 * 200 = 2,400,000 ミリ秒 = 2,400秒

④1時間は3,600秒のため 使用率は2,400 / 3,600  = 約67%

 

Hzとクロック数も応用情報の問題に載ってあったので。計算方法を書いてみた。

・Hzとクロック数から何回命令をだせるか?

 

【問題】

 「1GHzで動作するCPUがある。このCPUは,機械語の1命令を平均0.8クロックで実行できることが分かっている。このCPUは1秒間に約何万命令実行できるか。 

 

1秒間の命令実行回数=クロック周波数 ÷ 1命令の実行に必要なクロック数 

            = 1*10^9/0.8=1.25*10^9

 

ちなみに、ギガとかテラは10の何乗かは以下に整理してみました。

 

・キロ・・・1000倍 = 10^3
メガ・・・1000000倍 = 10^6
ギガ・・・1000000000倍 = 10^9
テラ・・・1000000000000倍 = 10^12

 

■I/O

レスポンスとスループットの違いは重要

 

・I/Oレスポンス=I/O要求処理にかかる応答時間
・I/Oスループット=単位時間当たりのI/O処理量

 

ここで、例えばレスポンスに時間がかかる場合は対処としてはどうしたらいいのでしょうか?何の処理によるものかをログを見ながら解析する?のかな。。。

 

■DB,SQL

 

実行計画から「cost」を分析して、重い場合はインデックスを貼ったり、Where条件の見直しをする、でしょうか。

 

ピーク時にどれぐらいのユーザ数がコミットや検索がするのかを算定することも重要ですね。この場合の計算方法はケースバイケース、なのでしょうか。

 

 

■Network

これも応用情報の問題にあったので解き方を整理してみました。

送るデータ容量とインターネットの処理量/秒から時間を求めていく、って感じでしょうか。

 

【問題】

100Mビット/秒のLANに接続されているブロードバンドルータ経由でインターネットを利用している。FTTHの実行速度が90Mビット/秒で,LANの伝送効率が80%のときに,LANに接続されたPCでインターネット上の540Mバイトのファイルをダウンロードするのにかかる時間は,およそ何秒か。ここで,制御情報やブロードバンドルータの遅延時間などは考えず,また,インターネットは十分に高速であるものとする。

 

解法としてはLANの伝送効率が80%なので、80Mビット/秒を。これはFTTHよりも遅いのでLANの計算のみでよい。

バイト単位に変換すると 10Mバイト/秒になるので、540Mでは54秒かかる計算になる。

 

まとめ

イマイチ網羅感がないため、体系立ったボトルネック分析ができていないですね。

現時点で理解していることを書いてみたので、もっといい情報があれば更新していきます。