2011-01-28 5 views
1

ファイル(ハードディスク)のI/O特性を測定するには?たとえば、ハードディスク(速度X)とcpu i7(または何らかのコア数)とY量のRAM(ZHz BIOS)を持つマシンの場合(Windows OSの場合):ファイル(ハードディスク)I/Oの特性を測定するには?

  • パラレルにHDに書き込むことができる最適なファイル数は?
  • パラレルでHDから読み取ることができる最適なファイル数は?
  • ファイルシステムの機能により、より高速な書き込みが可能になります。 (Like:異なるセクタ(またはハード)にバイナリデータのバッチを書き込んで、ファイルとしてバインドできるようにする機能やツールはありますか?OSの基礎となるファイルI/Oについてはよく分かりませんが、そのようなツールを持っていると合理的です!)
  • 以前にそのようなツールがある場合、.NETにもありますか?

できるだけ高速(かつ並列)に大きなファイル(ウェブまたは別のソースでストリーム配信)を書きたいと思っています。私はこれをC#でコーディングしています。そして、それはダウンロードマネージャのように動作します。ストリーミングが中断された場合は、後で続けることができます。

答えて

3

答えは(あなたの用途によって)頻繁に変わります。オペレーティングシステム全体は、さまざまな使用シナリオ間の大きなトレードオフです。 NTFSファイルシステムの場合、ブロックサイズは4k、MTFSのブロックサイズよりも小さいファイル、ファイルサイズ、ファイル数、フラグメンテーションなどが格納されます。

大きなファイルを書き込む場合は、 64kのサイズが良いかもしれません。つまり、大量のデータを読み込む予定がある場合です。少量のデータを読み込むと、サイズが小さくなります。 OSは4kページで動作するので、4kは良いです。圧縮(および暗号化?)とSQLとExchangeは、4kページ(iirc)でのみ動作します。

小さなファイル(< 4k)を書き込むと、MFT内に保存されるので、「エックスストラップジャンプ」をする必要はありません。これは、書き込み操作(読み取りにMFTキャッシュがある可能性があります)で特に便利です。 MFTは、ファイルをシーケンス(すなわち、ブロック1000-1010,2000-2010)で格納するので、断片化によってMFTが大きくなります。 parallellでディスクにファイルを書き込むことが、断片化の主な原因の1つです。もう1つは、ファイルを削除することです。ファイルに必要なサイズを事前に割り当てることができ、Windowsは断片化に対抗するためにディスク上の適切な場所を見つけようとします。 O&O Defragのようなリアルタイムの最適化プログラムもあります。

Windowsは、バイナリストリームをディスク上の物理的な位置にほぼ直接マッピングするため、異なる読み書き方法を使用しても、他の要因ほどパフォーマンスが向上しません。最大スピードのプログラムでは、ディスクへのダイレクトメモリマッピングに技術を使用します。 http://en.wikipedia.org/wiki/Memory-mapped_file

ディスクにキャッシュを増やすためのオプションがWindows(デバイスマネージャ、ハードディスク)にあります。これは、コンピュータがブルースクリーンまたは電力を失うと、ファイルシステムに損傷を与える可能性があるので危険ですが、小さなファイル(およびすべての書き込み)の書き込みで大きなパフォーマンスが向上します。ディスクがビジーの場合、シーク時間が減少するため、これは特に重要です。 Windowsは、エレベータアルゴリズムと呼ばれるものを使用します。これは基本的には、ハードディスクのヘッドを移動させながら、アプリケーションを前後に移動させることを意味します。

これが役に立ちます。 :)

+0

ありがとう!私は可能な限り速く(そして並行して)大きなファイル(ウェブまたは別のソース上でストリーミング)を書きたいと思っています!私はこれをC#でコーディングしています。 –

関連する問題