上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑
最近、勤務先で使うPCでエクセルファイルを開く速度が極端に遅いので、怒りが爆発して調査してみた。
いや、もとよりマシンがCore Duo T2300という、一昔前のノートPCでも我慢できない低性能+なぜかHDDが4200回転モデルという酷い性能なので、遅いのは仕方ないと思っていた。
しかし、実際の原因は、上記のHDDの酷い性能+ファイル容量が1MB弱なのに断片数が100を超えるという驚愕の断片化だった。
というわけでデフラグしてみたら体感速度で2倍程度は早くなった。

さて、ここからが本題だ。
デフラグについてはいろいろな説があるが、良く見られるのが
「デフラグはファイルへのシーケンシャルアクセスには効果が高いが、ランダムアクセスでは効果がない」というもの。
しかし、現代のOSはファイルキャッシュを備えるし、(エクセルを含む)一般的なGUIアプリケーションは最初にファイルの全体をロードする。
要するに、HDDからファイルを読み込むときはシーケンシャルアクセスが基本になる。たとえ、アプリケーションレベルでランダムアクセスしていても、それをファイルキャッシュなしで読み込んでいたり、ファイルキャッシュに収まらない巨大ファイルへのアクセスでない限り、ランダムアクセスにはならない。
いずれにせよ、ファイルキャッシュはシーケンシャルにアクセスされるのを期待して、後続のデータを読み込んでしまう。このときにファイルが断片化していれば、HDDには負荷がかかる。
ただし、HDDがI/O命令のスケジューリング(名称失念)に対応していれば、多少よくなるかもしれない。
HDDがシーケンシャルアクセスで高い性能を出すデバイスである以上、OSもまたそれを考慮しているわけであり、実際のHDDへのアクセスはそのほとんどがシーケンシャルだと期待できる。

結果的にファイルの断片化解消はほとんどのアプリケーションでファイルへの読み書きのパフォーマンス改善を期待できる。ただし、アプリケーション側の実装によっては、このことがアプリケーション全体のパフォーマンス改善にはつながらない。たとえば、ファイルへ書き込んでいてもそのほかの処理を続行できるようにされていれば、パフォーマンスには影響しない。

だが、ひとつ問題がある。
断片化しやすいファイルはそもそも頻繁に書き込みを繰り返すファイルだということだ。
そして、断片化の影響はすぐに現れるだろう。

ようするに、ファイルの内容を更新して容量が増えるたびに断片の数が増えていく。
そして、断片が多くなるとファイルの読み書きのパフォーマンスが悪くなる。OSのファイルキャッシュで多少は緩和するだろうが、効率の悪い書込み操作の間、ファイルキャッシュにないファイルの読み込みも待機させられることになる。

つまり、ファイルの断片化解消の恩恵を受けるためには頻繁なデフラグが必要だ。それも使用頻度の高いファイル(≒断片化の激しいファイル)に対してだ。これは常駐系のデフラグソフトでオートデフラグするしかないだろう。しかし、常駐ソフトではそれ以外のパフォーマンスの劣化を招く場合もあり、導入には慎重にならざるを得ない。結局1日~1週間に一回で最適化と合わせて実行するようスケジューリングするのが一番なのだろう。
スポンサーサイト

01/09|コンピュータコメント(0)トラックバック(0)TOP↑
この記事にコメント
名前:
コメントタイトル:
メールアドレス:
URL:
コメント:

パスワード:
管理人だけに表示:
管理者にだけ表示を許可
この記事にトラックバック
プロフィール

G.U.Nex

Author:G.U.Nex
職業:プログラマ
趣味:ゲーム(PC、コンシューマ)、ネットサーフィン、ニコニコ動画視聴、プログラミング、鉄道全般
PHP, C, C++, VB(系), Java, JavaScriptを使える。
最近はRubyにはまってる。

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム
ブログ内検索
RSSフィード
リンク
フリーエリア
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。