Linuxのパフォーマンスを改善する3つのTipsLinux Hacks(2/3 ページ)

» 2007年07月19日 03時54分 公開
[Federico-Kereki,Open Tech Press]
SourceForge.JP Magazine

ファイルシステムのアクセスを最適化する

 Linuxは、ファイルの作成時刻、最終更新時刻、最終アクセス時刻を記録する。しかし最終アクセス時刻の記録は、ファイルを読んだだけのときにも、システムが最終時刻の記録のためにファイルのディレクトリエントリを更新するため、通常はファイルのアクセス速度の低下を招くことになる。書き込みによって速度が低下することがあるということは、この更新を行うのをやめてしまえば性能が向上するはずだ。

 このスピードアップを実現するためには、ファイルシステムのマウント方法を変更すればよい。そのためにはまず、ルートとして「cat /etc/fstab」を実行してみよう。わたしの場合、以下のような結果になった。


/dev/hda3        /                  reiserfs  acl,user_xattr     1 1
/dev/hda1        /boot              ext2      acl,user_xattr     1 2
/dev/hda2        swap               swap      defaults           0 0
proc             /proc              proc      defaults           0 0
sysfs            /sys               sysfs     noauto             0 0
debugfs          /sys/kernel/debug  debugfs   noauto             0 0
usbfs            /proc/bus/usb      usbfs     noauto             0 0
devpts           /dev/pts           devpts    mode=0620,gid=5    0 0
/dev/fd0         /media/floppy      auto      noauto,user,sync   0 0
/dev/hdd1        /media/disk2       reiserfs  defaults           1 2

 最適化するのに最も適したハードディスクのパーティーションは、/と/dev/hdd1だ。というのも/bootは起動時にしか使用されず、/swapは立ち入り禁止となっていて(Linuxカーネルが特別の目的に使用するため)、そのほかはハードディスクではないためだ。

 変更するのは簡単だ。好きなテキストエディタで4列目のオプションに「,noatime」を追加し、その後「mount -a」コマンドを実行して全ファイルシステムを再マウントすれば良い。

 性能はどうやってテストすればよいだろうか。わたしの場合、まずはbonnie++パッケージを使ってみたが、bonnie++の行うテストは特にファイルアクセスを重視しているわけではないため、結果は何とも判断しがたいものだった。

 そこで代わりに再び自作のテストを行うことにした。まず1,000個のファイルを作成しておき、その後、その中身を/dev/nullにコピーするのにかかる時間を測った。ファイルは以下のようにして作成した。

for ((i=0;i<1000;i++)) do ls >$i ; done


 コピーにかかる時間は以下のようにして測った。


time cp * > /dev/null

 そしてnoatimeオプションをつけた場合と付けなかった場合の両方で前記の2つを実行した。その結果、わずかだが性能の改善が見られた。ファイルアクセスの度に最終アクセス時刻を更新することがなくなったので、当然の結果だ。

 この時点で、ハードディスクが可能な限り高速に動くようになったのに加え、ファイルアクセスも最適化できた。そこで最後に、コマンドのロード時間を短縮するための最適化をしよう。

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ