性能計測#

はじめに#

以下の計測条件や計測項目はあくまで参考ですのでより良い計測方法があればそれぞれのアイデアで改善して報告してください.

Important

計測を行う前にサーバプログラムが正しく実装されていることを確認して下さい.複数の端末から telnet コマンドを用いて通信することで(多重化された)EchoBack が実現できているかどうかを確認することができます.

計測条件#

以下のパラメータの違いによってどのような結果となるかを測定せよ.

  • クライアント側の同時接続要求数

  • サーバ側の応答処理に要する時間

同時接続要求数#

クライアントプログラムの並列数を変更して,同時接続要求数の違いによって測定結果がどのように変化するかを分析してください.

処理に要する時間#

サーバプログラムの応答処理時間を変更して,応答処理時間の違いによって測定結果がどのように変化するかを分析してください.

応答処理時間は,サーバプログラムのEchoBack応答を行う箇所にusleep関数を挿入して処理時間を調整してください(遅延時間+EchoBack処理時間になる).

計測項目(例)#

  • クライアントプログラムが接続に失敗した回数

  • クライアントプログラムがメッセージの通信に失敗した回数

  • クライアントプログラムが接続に要した時間(合計)(平均)(最大)

  • クライアントプログラムがメッセージの通信(EchoBack)に要した時間(合計)(平均)(最大)

  • サーバプログラムのメモリの最大使用量

  • サーバプログラムのソケットの最大利用数

プロセス単位のメモリの最大使用量#

Linux OS上の実行プロセスのメモリ使用量は,psなどのコマンド(psの他にpmaptopなど)で調べることができます. また,procfsを介してカーネル情報を参照することでも調査することができます.例えば,プロセス番号1(/sbin/init splash)のメモリ使用量は /proc/1/status ファイルを参照して調べることができます.例えば,以下のようにファイルの内容を参照すると,29,052 kB のメモリをピーク時に利用したことが分かります.

$ cat /proc/1/status | grep VmPeak
cat /proc/1/status
VmPeak:   29052 kB

以下のようにプロセス名からメモリ使用量を収集することもできます.PATTERNにはコマンドラインに対するパターンを指定します.

$ pgrep -f PATTERN | xargs -t -IPID cat /proc/PID/status | grep VmPeak

例えば,上述のプロセス番号1(/sbin/init splash)を調査するには/sbin/initをパターンとして指定します.

$ pgrep -f "/sbin/init" | xargs -t -IPID cat /proc/PID/status | grep VmPeak
cat /proc/1/status
VmPeak:   29052 kB

ソケットの最大利用数#

各プロセスが作成したソケット数について,プロセス実行中の最大ソケット利用数を外部からのコマンド1つで調べる方法はなさそうです(もし見つけた人がいたら共有してください).ある時点でプロセスが開いているソケット数については以下のように調査することができます.以下の操作を周期的に実行して最大数を調べるという方法がありそうです(ただし,読み取り権限を持たないプロセスについては調べられませんので注意してください).もしくは,サーバプログラム自体に最大利用ソケット数を記録する仕組みを実装してもよいでしょう.

$ pgrep -f PATTERN | xargs -IPID -t lsof -p PID | grep TCP | wc -l