2008年12月12日金曜日

プロセスごとのCPU使用率の計算

(調べたいプロセスの使用時間) / (全体の時間)
で算出できます.

●調べたいプロセスの使用時間
/proc/(pid)/stat内の,
utime(14番目の値)+stime(15番目の値)
で算出可能

●全体の時間
/proc/stat内のCPU情報
cpu 3357 0 4313 1362393
(左から順に,ユーザーモード,低い優先度 (nice) でのユーザーモード,システムモード,タスク待ち(idle task))
を全て足し合わせた時間

*どちらの値も,積算されているものなので,同じ間隔をとって差をとる必要があります

/procの内容に関する詳細は,%man procで見られます.
この/proc以下の情報はクロック割り込みごとに値を更新します.
が,ユーザ空間から見るためには,ファイル形式になっているため,ファイルのopen,read,closeをしなければならず,多少の時間が必要です.
よって,1msや10ms間隔で見ることは無理そうです.

間隔がある程度大きくても大丈夫な場合は,調べたいプロセスに関する情報のみを追うことができる便利なツール,sysstatもあります.
詳細は次の記事へ.

全体を眺めるならばtopを利用.
ちなみにtopの更新はデフォルト5sだそうです.
オプションをつけることで更新間隔を変更することも可能です.

2008年12月10日水曜日

strcatには要注意

strcat(str1,str2)
によって文字列str1とstr2を連結することが可能です.
…が.
これは,str1にstr2をつないでいるので,str1の大きさを十分にとっておかないと,他の領域まで侵入してくちゃくちゃにしてしまうことがあります.
要注意.

参考ページ:
Manpage of STRCAT

C言語で字句解析

strtokが便利!
スペースを区切り文字として文字列bufferを区切るなら,
char buffer[1024];
strtok(buffer, " ");

とした後,strtokの戻り値がNULLになるまで,
strtok(NULL, " ")
を続ければOK.

参考ページ:
strtok…説明がとても分かりやすかったです
Manpage of STRTOK

2008年12月8日月曜日

subversion

みんなに教えてもらって,バージョン管理をすることにしました.
それとともに,今までの実験のやり方を見直し.

まず,実験マシンは書いたソースをコピーして動かすだけに.
(やりやすい様にscpを入れたシェルスクリプト作っちゃう)

NAS上でバージョン管理を.

eclipse上だと管理が楽なプラグイン(subclipse)があるとのことなので,
ついでにeclipseも最新版(ganymede)にインストール.

以下,Subclipseプラグインを参照

2008年12月5日金曜日

エイリアスの設定

つい先日,ディレクトリの中身を"rm *"で全消ししてしまいました涙
今までプログラムを書き直していたってゆう無駄…

これからはちゃんとバックアップをとろう!!と思いました.

あと,先輩のススメで,エイリアス作りました.

homeディレクトリ下の.bash_profileに,alias clr='rm *~'の記述を追加.

これでこれからは,rm *~なんて危ないコマンドを使わず,"clr"でゴミを消せることになりました!笑

参考ページ:
Linux全般編 シェルの基本操作法(後編1:エイリアスやヒストリの使い方)
Linux全般編 シェルの基本操作法(後編4:シェルの設定ファイル)

2008年12月2日火曜日

/proc ってすごい!!

システムのCPU使用率や,メモリ使用量などの情報が全て入っています.
例)
/proc/meminfo :メモリ搭載量・空きメモリ量などが記載
/proc/cpuinfo :CPUの情報が記載

また,/procディレクトリ以下には,それぞれのプロセスの情報も格納されています.
プロセスIDごとにディレクトリがあり,その中に格納されています
例)
/proc/pid/map :そのプログラムがどのアドレスを何に使っているか
/proc/pid/status :そのプロセスの名前や状態などの情報

全て情報がここを見ればわかっちゃうわけですねー!
すごい.

今得たいのは,それぞれのプロセスの情報なので,
/proc/pid/statを見ればOKなようです.

参考ページ:
/procによるLinuxチューニング
Manpage of PROC

2008年12月1日月曜日

三項演算子が二項?

perfctrの中にあるglobal.cで謎な記述がありました.
info.tsc_to_cpu_mult ? : 1
三項演算子っぽいのに条件の後ろの値が1つしか値がない.

これは,条件部分の値がfalseでない場合は,その値を返り値とし,
falseならばセミコロンの後ろの値を返す,ということらしい.

つまり,ここは,
info.tsc_to_cpu_mult ? info.tsc_to_cpu_mult : 1
ってことですね.