Linuxのタスクスケジューラーの切り替えを覗いてみた(SystemTap)
Linuxカーネスソースを読む環境は準備できたのですが、どこから手をつけたら良いか分からないので、カーネルの動きを確認できるSystemTapという機能を使用して、遊んでみようと思いました。
まずはLinuxカーネルのタスクスケジューラ機能がどのようにタスクを切り替えているのかsched_switch.stpというスクリプトを使用して覗いてみようと思います。
sched_switch.stpスクリプトはこちらのサイトからダウンロードします。
PCにダウンロードして、サーバにアップロードするのはめんどうなので、wgetコマンドで適当なディレクトリに配置します。
# wget http://sourceware.org/systemtap/examples/profiling/sched_switch.stp
そして下記コマンドを実行します。
# stap ./sched_switch.stp
すると下記のログが出力されます。
各カラムの説明をすると、
1列目:プロセス名 2列目:CPU識別子 3列目:実行時間 4列目:プロセスID 5列目:優先度
といった情報を確認することができます。
僕のサーバはCPUを1コアしか積んでいないので、CPU識別子が全て0となっていますが、複数コアがある場合はこちらの数が増えます。
ログを見ると、物凄い短い時間でプロセスを切り替えていることが分かります。
もしタスクの切り替えが上手くいっておらず、性能がでないという状況になった場合は、上記のsched_switch.stpスクリプトを使用してどのプロセスがボトルネックになっているか分かるかと思います。
他にもSystemTapのサイトではおもしろそうなスクリプトがたくさんあるので、遊び倒したいと思います。