彷徨えるフジワラ

年がら年中さまよってます

OS毎のシステムコール実行性能 〜 その6(まとめ)

幾つかのシステムコールの実行性能をOS毎に計測して、「Mac OS X 上では、予想通りシステムコール実行性能が低めでした」という結論でサックリ終わる予定だったのですが、実際に計測してみると、思った以上に色々なバリエーションがあったため、予想外に内容が膨らんでしまい、今回を含めて6回にも渡るエントリになってしまいました。

とりあえずは、ある程度の傾向が掴めたので、今回のまとめをもって、一連のエントリは一旦終わりにしようと思います。

まとめ

本エントリ群での計測結果を、以下にまとめておきます。

まずは、各OSの計測環境は以下の通りです。

---- MacOSX Linux Solaris
OS 詳細 Lion (10.7.5) Debian (2.6.32-5) OpenIndiana (151.a2)
CPU Core i5 2415M (2.3GHz) Core i5 2410M (2.3GHz)
利用可能コア/スレッド数 4 2
メモリ 16GB 2GB
インストール形態 ベアメタル 仮想環境
(VirtualBox on Windows7 64bit)

そして、システムコール毎の計測結果は以下の通りです。
システムコール毎の計測結果を比較しやすいように、全ての「0x4000000 =約6千7百万回分の所要時間(単位:秒)」に正規化しました。

計測時の繰り返し回数が 0x10000 だったものに関しては、単純に計測値を 1024 倍していますので、あくまで傾向把握のための参考数値と考えてください。まぁ、仮想環境上での簡易計測の時点で、読む方も厳密性は期待していないとは思いますが……

---- MacOSX Linux Solaris 備考
execve 160962.56 22548.48 40355.84
fork 28016.64 9574.40 24903.68
vfork 532.48 6174.72 5816.32 Mac OS X では、呼び出し元のスレッドを流用
fork + execve 199577.60 31805.44 69672.96
vfork + execve 165754.88 26173.44 52336.64
fstat 31.12 8.36 62.13
lstat 51.18 27.41 165.26
gettimeofday 2.86 250.78 32.94 Mac OS X では(基本的に)システムコール実施なし
time 13.30 243.82 26.39 Mac OS X では、(基本的に)システムコール実施なし、浮動小数点演算環境の保存あり
umask 11.61 3.61 23.70
getpid ---- ---- 21.78 Solaris 以外は、2回目以降のシステムコール実施を抑止

今回の計測対象における全般的な傾向としては、システムコールの実行性能は「LinuxMac OS X」なのですが、gettimeofdaytime なので逆転しているあたりが面白いところですね。vfork の件もありますから、「システムコール所要時間は LinuxMac OS X」といった予断は、持たないようにした方が良さそうです。

また今回は、readwrite のようなファイル I/O、ファイルの生成・削除・改名といったディレクトリエントリ操作などは、計測対象から除外しましたが、いずれはイコールコンディションに近い状態(=ベアメタルなインストール)を作って、比較してみたいところではあります。

それから、Linux に対して Solaris があまり良い所無しな感じが強かったのが、個人的には少々残念かなぁ……