sync() は劇的に遅い

後輩が面白いテストプログラムを作ってくれた。Linuxでsync()を発行すると、いかにプログラムの動作が遅くなるかをテストするためのプログラムだ。
自分は最近、UNIXでCのプログラムを書いていないので(と言い訳する)、今、この場でそのプログラムを再現することはできないのだが、大体次のような感じのプログラムだった。

ファイルを書き込み用に開く
「データを1バイト書き込み、書き込むたびにsync()を発行」を100回繰り返す
ファイルを閉じる

100バイトのデータが完成するだけの、単純なプログラムだ。
もちろん、sync()を取り除けば、こんなもの、最近のPCなら一瞬で終了してしまう。プログラムのロードのほうに時間がかかるくらいだ。
ところが、sync()が入っていることによって、このプログラム、劇的な遅さを発揮する。
終了までおおよそ10秒もかかるのだ。たった100バイトのデータを作るのに。人間がストップウォッチで計れるような時間だ。
(ちなみにCPU時間はほぼ0であった。プログラムの実行時間はほとんどがIOで占められているらしい)

PCのスペックの仔細は忘れたが、最近のものであることは間違いない。2GHz以上のCPUを搭載し、2GBのメモリを搭載し、80GB以上のSATAのHDDを搭載し、Reiserfsを採用したものだ。

「最近のHDDならHDD上にキャッシュがあるはずだけど、書き込みの際には効かないようになっているのかね?」とか、新たな疑問は出てきたものの、短い割にはなかなか面白いテストプログラムだった。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック