2008年1月18日金曜日

(FreeBSD) topコマンドで表示されるVCSWとIVCSWは何?

コンピュータでどんなプログラムが実行中かを表示する、とっても便利なコマンド「top」。



Windowsだと、タスクマネージャの「プロセス」タブで表示される内容が、topと、ちょっと似てるかな?



topは、FreeBSDのほかにも、各種Linux、Solarisなど、あちこちのOSに移植されているんですが、なんかそれぞれで微妙に違いがあるんですよね。



ふと、topって、オリジナルはどこなんだろう?と思って調べてみたら、ここにいろいろ書いてありました。

http://www.unixtop.org/about.shtml

topの最初のバージョンは、1984年はじめころ、マシンはVAX、OSはBSD 4.1だったそうです。





FreeBSDのtopコマンドでは、「m」キーを押すと、表示がcpuモードとioモードとの間で交互に切り替わります。



CPU使用率、メモリ使用量などが表示される
200801171





I/Oアクセスの頻度が表示される
200801172





ioモードのときに、VCSWIVCSWという情報が表示されてるのですが、VCSW、IVCSW、どっちもマニュアルには記載されていません。これってなんなんですかね?



同じ疑問を持つ人は多いようで、ネット検索したら、すぐに見つかりました。



たとえばこのあたり。

http://lists.freebsd.org/pipermail/freebsd-questions/2007-September/158479.html

VCSWは、Voluntary Context Switches

IVCSW
は、Involuntary Context Switches



の略だそうです。



マルチタスクOSとはいっても、基本的にCPUは1つしかないので(最近は2個とか4個とか8個とかゴロゴロありますし、SMTという技術だと、1つのCPUで同時に複数のスレッドを実行できちゃいますが・・・さらにSMTでも、実際には切り替え方式じゃねーか、ってのもあったり、細かいところでナニな感じはありますが・・・)、1つのCPUは、一度に1つのプログラムしか実行することはできません。とても短い時間間隔で(1ミリ秒とか10ミリ秒とか、その程度)、次々に実行するプログラムを切り替えていくと、同時に複数のプログラムが実行されているように見えるわけです。



その、実行対象のプログラムを切り替えることを、コンテキストスイッチ(context switch)といいます。



Voluntary Context Switchとは、プロセスが自発的にコンテキストスイッチを起こす、という意味なんだと思いますが、プロセスが、I/Oアクセス待ち(たとえば、ディスクの読み・書きをしようとして、データがディスクから取り出される・書き込まれるまで、しばらく待たされる)になったり、(処理速度を意図的に落とすためなどで)スリープしたとき、そういうときに発生するコンテキストスイッチだそうです。



プロセスがCPUを使い続けてもよい制限時間(先ほどの、数ミリ秒程度)」というのがあらかじめ決められているんですが、プロセスがI/O待ちになってしまったら、CPUを占有しつ続けていても、CPUにやってもらう処理が何もないので、無駄な時間を過ごすことになってしまいます。そこで、CPUの占有をやめて、だれか他の人、CPUを使ってもいいですよ、ということになるわけです(・・・ということになるように、OSが面倒を見てくれている)。



もう一方のInvoluntary Context Switchですが、in~は否定の意味の接頭辞ですから、自発的ではないコンテキストスイッチということ。つまりは、与えられていた、CPUを連続使用できる制限時間(数ミリ秒ほど)を、全部使い切ってしまったので、コンテキストスイッチが起きました、ってことなんでしょうね。





IVCSWの数が多いときは、ひたすらCPUが一生懸命、処理をしているときで、VCSWの数が多いときは、I/Oなど、何か他の処理待ちになることが多い、ってこと。



VCSWが思っている以上に多いときは、何かおかしなことがおきてんじゃない~?と疑って、ボトルネックとなっている箇所を探して、チューニングをするんじゃないかな?





voluntaryは形容詞で、~する人という意味の名詞volunteerは、日本語だとボランティアなんですけど、英語と日本語、かなり意味が違いますよね。



1 件のコメント:

  1. [E:smile]ありがとうございます。
    いい情報ですね。

    返信削除