ラベル コマンド の投稿を表示しています。 すべての投稿を表示
ラベル コマンド の投稿を表示しています。 すべての投稿を表示

2009年9月30日水曜日

RDMSR / WRMSR in C

MSR(Model Specific Register)を読み書きするための命令
どちらも実行できるのは特権モード(ring 0)のみ

これらを C の中で使うには gcc インラインアセンブラを用いればOK

#ちなみにこのへんの記述は perfctr では /usr/include/asm-x86/msr.h にありますね

●インラインアセンブラ表記法
asm volatile ("アセンブラテンプレート"
: "出力オペランド"
: "入力オペランド"
: "アセンブラの実行で変更されてしまうもの");

出力オペランドは "=a" (出力先変数),
入力オペランドは "a" (入力) のように表記する.
ここで,各レジスタは以下のように表記する.
"a" eax
"b" ebx
"c" ecx
"d" edx
"A" edx:eax(上位bitにedx,下位bitにeax)
"g" gccが適当なレジスタに割り当てる


●RDMSR
ecx レジスタに MSR のアドレスを指定すると,edx:eax レジスタに MSR の内容を読み込む(上位 32bit が edx ,下位 32bit が eax に入る)
e.g.
asm volatile("rdmsr" : "=a"(low), "=d"(high) : "c"(msr_addr));
asm volatile("rdmsr" : "=A"(val) : "c"(msr_addr));

●WRMSR
ecx レジスタに指定した MSR のアドレスに,edx:eax レジスタの内容を書き込む(〃)
e.g.
asm volatile("wrmsr" : : "c"(msr_addr), "=a"(low), "=d"(high) : "memory");
asm volatile("wrmsr" : : "c"(msr_addr), "=A"(val) : "memory");


参照ページ:
ほげほげまん: gccインラインアセンブラ
ほげほげまん: RDMSR / WRMSR

ほげほげまんめっちゃ分かりやすい.お世話になってますw

2008年12月12日金曜日

sysstat

システムの状態を監視することができるツール.
rpmで発見したのでいれてみたところ,謎なことにドキュメントしかなくてw
READMEに書いてあったページにいってダウンロードしました.
ここからsysstat-8.1.7.tar.gz
をダウンロード.
以下README通りにやってみたことを.

% tar xvf sysstat-8.1.7.tar.gz
% cd sysstat-8.1.7
% ./configure
% make && make install


インストール完了.
ここで,例えば,プロセスIDが2001のMysqlサーバを5秒ごとに20回値を見たい場合,

% ./pidstat -p 2001 5 20

とすることで,そのプロセスのユーザモード,システムモードでのCPU使用率を監視することができ,平均値まで算出してくれます.

詳細は分かりませんが,ある程度の時間監視したい場合に便利そう.

参照ページ:
sysstatで性能管理(その1)
pidstatでプロセス毎のCPU使用率を測定 | gmt-24.net

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年11月23日日曜日

ファイルの中身を検索する

「この構造体どこに定義してあるのッ(怒)」というときのために.

shell> grep -r 文字列 *
これで全ファイル内から文字列を検索できる.

特定のファイルから文字列を検索するには,
shell> grep 文字列 ファイル名
でOK

2008年11月22日土曜日

精度の高いSLEEP

sleep関数では,秒単位でしかsleepのインターバルを指定できません.
更に精度の高いsleepを使用したい場合には,usleepとnanosleepの2つがあります.
usleepは今はあまり推奨されていないようなので,一般的にはnanosleepのよう.
カーネル2.4系ではこの関数をリアルタイムプロセス内で使う必要があったようですが,今現在はその必要はないとのこと.

参照ページ:
Manpage of USLEEP
Manpage og NANOSLEEP

2008年11月13日木曜日

su と su- の違い

スーパユーザになるときのコマンド,「su」に関して.
ハイフンをつけない/つけるで,コマンド実行前のユーザーアカウントの操作環境を引き継ぐか,root仕様にするかが変わるみたいです.
(知らなかったー!気まぐれだと思ってました笑)

・su の場合
 rootになったときに,ユーザアカウントの動作環境を引き継ぐため,
 ・ディレクトリが移動しない
 ・環境変数が一般ユーザのまま
  →一般ユーザのデフォルトのPATHには"/usr/sbin/"が含まれていないため,実行時にパスを付けて実行しなければならない

・su - の場合
 rootになったときに,rootの動作環境を用いるため,
 ・ディレクトリが"root"になる
 ・環境変数がroot仕様になる
  →PATHに"/usr/sbin/"が含まれている

だから,なるべくハイフンをつけた方がいいような気がしますね.