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
2009年9月30日水曜日
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
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:シェルの設定ファイル)
今までプログラムを書き直していたってゆう無駄…
これからはちゃんとバックアップをとろう!!と思いました.
あと,先輩のススメで,エイリアス作りました.
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
例)
/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日日曜日
2008年11月22日土曜日
精度の高いSLEEP
sleep関数では,秒単位でしかsleepのインターバルを指定できません.
更に精度の高いsleepを使用したい場合には,usleepとnanosleepの2つがあります.
usleepは今はあまり推奨されていないようなので,一般的にはnanosleepのよう.
カーネル2.4系ではこの関数をリアルタイムプロセス内で使う必要があったようですが,今現在はその必要はないとのこと.
参照ページ:
Manpage of USLEEP
Manpage og NANOSLEEP
更に精度の高い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/"が含まれている
だから,なるべくハイフンをつけた方がいいような気がしますね.
ハイフンをつけない/つけるで,コマンド実行前のユーザーアカウントの操作環境を引き継ぐか,root仕様にするかが変わるみたいです.
(知らなかったー!気まぐれだと思ってました笑)
・su の場合
rootになったときに,ユーザアカウントの動作環境を引き継ぐため,
・ディレクトリが移動しない
・環境変数が一般ユーザのまま
→一般ユーザのデフォルトのPATHには"/usr/sbin/"が含まれていないため,実行時にパスを付けて実行しなければならない
・su - の場合
rootになったときに,rootの動作環境を用いるため,
・ディレクトリが"root"になる
・環境変数がroot仕様になる
→PATHに"/usr/sbin/"が含まれている
だから,なるべくハイフンをつけた方がいいような気がしますね.
登録:
投稿 (Atom)