ファイルの入出力性能の改善は,システム全体の処理速度向上に大きく貢献する。高速なプロセッサを搭載する現在のコンピュータでは,ファイルのアクセス速度がシステム・パフォーマンスのボトルネックになっているためである。不要なディスク・アクセスの削減とアクセス速度そのものの向上が,チューニングの要となる。
アクセス時刻の記録を省略しファイル読み込みを高速化
ファイルにアクセスしたときには,最終アクセス時刻が属性情報として記録される。この情報を記録しないように設定することで,ファイルの読み込み速度を向上できる。最終アクセス時刻の記録を止めるには,ファイル・システムのマウント時に,noatimeオプションを指定する。ベンチマークでは,読み込み速度が2倍強に改善できた。
atimeは無駄
LinuxなどのUNIX系OSでは,statやfstat,lstatというシステム・コールを使って,ファイルの属性情報を読み出せる。属性情報には,例えば,ファイルの許可属性や更新時刻がある(表1)。Linuxのファイル・システムなどでは,属性情報をファイルと一緒に記録している。これらの時刻情報は,ファイル属性を調べるstatコマンドを使って図1のように参照できる。
表1●stat()システム・コールで読み出せるファイル属性 最終アクセス時刻(atime)の更新頻度を抑えることでシステム・パフォーマンスを手軽に向上できる。 |
|
図1●statコマンドによるファイル属性の参照 |
ここでファイルが3種類の時刻情報を持っていることに注目する。具体的には,最終アクセス時刻(atime=access time),最終更新時刻(mtime=modification time),最終変更時刻(ctime=change time*1)である。
atimeには,文字通りファイルがアクセスされた時刻が記録される。ファイルの読み込みや書き出しにかかわらず,ファイルにアクセスが行われるたびに記録される。
mtimeとctimeは,どちらもファイルの更新時刻を記録する。ただし,ファイルの中身を更新したときにはmtimeとctimeの両方が更新されるが,ファイルの許可属性などのステータスが変更されたときにはctimeしか更新されないという違いがある。