ファイルの入出力性能の改善は,システム全体の処理速度向上に大きく貢献する。高速なプロセッサを搭載する現在のコンピュータでは,ファイルのアクセス速度がシステム・パフォーマンスのボトルネックになっているためである。不要なディスク・アクセスの削減とアクセス速度そのものの向上が,チューニングの要となる。

アクセス時刻の記録を省略しファイル読み込みを高速化

 ファイルにアクセスしたときには,最終アクセス時刻が属性情報として記録される。この情報を記録しないように設定することで,ファイルの読み込み速度を向上できる。最終アクセス時刻の記録を止めるには,ファイル・システムのマウント時に,noatimeオプションを指定する。ベンチマークでは,読み込み速度が2倍強に改善できた。

atimeは無駄

 LinuxなどのUNIX系OSでは,statやfstat,lstatというシステム・コールを使って,ファイルの属性情報を読み出せる。属性情報には,例えば,ファイルの許可属性や更新時刻がある(表1)。Linuxのファイル・システムなどでは,属性情報をファイルと一緒に記録している。これらの時刻情報は,ファイル属性を調べるstatコマンドを使って図1のように参照できる。

表1●stat()システム・コールで読み出せるファイル属性
最終アクセス時刻(atime)の更新頻度を抑えることでシステム・パフォーマンスを手軽に向上できる。
表1●stat()システム・コールで読み出せるファイル属性

$ stat honbun.txt
  File: "honbun.txt"
  Size: 7535          Blocks: 16    IO Block: 4096  Regular File
Device: 3a02h/14850d  Inode: 33746  Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 500/ sueyasu)  Gid: ( 100/ users)
Access: Tue Jan  8 14:39:03 2002
Modify: Mon Jan  7 07:26:40 2002
Change: Mon Jan  7 07:26:40 2002
図1●statコマンドによるファイル属性の参照

 ここでファイルが3種類の時刻情報を持っていることに注目する。具体的には,最終アクセス時刻(atime=access time),最終更新時刻(mtime=modification time),最終変更時刻(ctime=change time*1)である。

 atimeには,文字通りファイルがアクセスされた時刻が記録される。ファイルの読み込みや書き出しにかかわらず,ファイルにアクセスが行われるたびに記録される。

 mtimeとctimeは,どちらもファイルの更新時刻を記録する。ただし,ファイルの中身を更新したときにはmtimeとctimeの両方が更新されるが,ファイルの許可属性などのステータスが変更されたときにはctimeしか更新されないという違いがある。