質問

私の質問に従ってお進みくださいで自分なりの答えがなくても他の人の回答です。

いつの大きなファイルをいから読み込む二つの別々のスレッドが同時に行えます。一つのスレッドが順番に読みfileAのその他のスレッドが順番に読みfileB.ありませんロック又は通信のスレッドの両方を順次読みても、両方ともすぐに破棄のデータを読み込みます。

弊社の経験をこのセットアップ-Windowsのは非常に貧弱です。の合計スループットのスレッドは、2-3MiB/sec.ドライブが支出のほとんどの時間を求める裏のファイルをここから読みの少ないた。

した場合は無効化の一つのスレッドを一時的には性能の単一のスレッドをしていくの帯域幅(~45MiB/secことになります。で明確に二つのスレッドの性能は、人工物のOSのディスクを提供します。

なお改善のためにできることの並行スレッドを読み実績を教えてください。 によって異なるApiや調整を行うOSのディスクスケジューラのパラメータもあります。

詳細:

のファイルの順2GiB各装置付きの機械は、2GiBのアプリです。この問題を考えないようにキャッシュに格納および完全にdefragmented.を用いてdefragのツールや再起動を確保す。

を用いて特別のApiを読みこれらのファイルです。の行動が繰り返し様々な湿-標準ApiなどのWin32のは、createfile、Cのfopen、C++'s std::ifstream、JavaのFileInputStream。

各スレッドピープとの通話を、読み込みます。我々のバイト数を求めのAPIして繰り返しからの値の間に1KiBを128MiB.異なることはありませんの効果も明らかにその金額は、OSが物理的にミを確認し、必要に応じて各ディスクを求めるが,この番号です。これはまさに何をすべき期待されます。

は、昨年の清掃中にマスクを誤つのスレッドに二つのスレッドの性能は繰り返し全Windows2000、Windows XP(32-bitおよび64ビット)、Windows Server2003、またとないハードウェアRAID5.

役に立ちましたか?

解決

問題になっているようWindows I/Oケジューリング。に見を伺う事ができて勉強にな こちらの 多くの方法があり、O.S.スケジュディスクです。をLinuxおよびその他を選択でき間には以下のような制御を行う前に、Vista Windowsされてきた政策のグローバル:は、FIFOキューには、すべての要求がsplitted64KBブロックとなります。この政策に起因する問題を経験してお:スケジュールの混入の要請のスレッドが継続的な追求と異なる分野のディスク。
現在、このよ こちらのこちらの,Vistaを導入したスマートディスクスケジューラーが設定できますの優先順位のご要望にも配分を最小限にbadwidthいます。
に悪いニュースはこのように変化ディスク方針やバッファサイズ以前のバージョンのosはWindowsです。また場合でも、調達のディスクI/O優先度のプロセスの性能に対するその他のプロセスでの問題のスレッドを競います。
ま、私達にできることを示唆する変更のソフトウェアの導入による自作ディスクアクセス。
たとえば、利用政策がこのようにスレッドB(類似のためのスレッド):

if THREAD A is reading from disk then wait for THREAD A to stop reading or wait for X ms
Read for X ms (or Y MB)
Stop reading and check status of thread A again  

を使用できるセマフォ用の状況確認は可能perfmonカウンターのステータスを取得します実際のディスクキューに挿入しますの値Xおよび/またはYにも自動で調整をチェックすると、実際のtrasfer料金でゆっくりとそれらを修正することを最大限に活throughtput時に自動的にすべての異なる機械やO.S.あらわれることもありますが、キャッシュメモリやRAIDレベルにとっては、影響を与える方又はその他のものオートチューニングで常に最高のパフォーマンスのシナリオ.

他のヒント

私の追加がさらなる注私に応じます。他のすべてのサブメニュー画面が開きを行っていませんがこの問題です。Linux、FreeBSD、Mac OS Xではこのつの異なるハードウェアのすべて劣化するより優雅にの集約帯域幅が動からのスレッド。Linux例えば劣化からの45MiB/秒~42MiB/sec.これらのその他の営業システムの必読の大きなチャンクファイルのファイルとの間に求めるもの及びそのな支出のほぼすべての時間待ちのディスクを求める.

弊社のソリューションのWindowsではパスの FILE_FLAG_NO_BUFFERINGCreateFile 大きな(~16MiB)を読み込み、各呼び出 ReadFile.これは入の理由による

  • ファイルなキャッシュされたが、このようないのではな利点が通常キャッシュが作れるというわけです。
  • の制約の場合、このフラグはるかに複雑なので、通常の読み(アライメントの読み込みバッファのページの境界です。

(最終的な趣旨の発言があった。この理由の説明を入れ替え窓下には居?すなわち、Windowsが不可能となっIO複数のファイルと同時に任意の効率化なのでリスペクトしながら、入れ替えその他のIO事業を強いられる偏遅くなります。)


編集を加えるなら詳細は研究科長:

もちろんこれらの異なるハードウェア構成の原かの変更が大幅).問題はしかし、一貫した劣化性能をWindowsのみが何時から一つのスレッド。こちらではの概要機械試験:

  • 複数のDellワークステーション(インテル®Xeon®)な年齢のWindows2000、Windows XP(32-bit)、Windows XP(64ビット)とシングルです。
  • A Dell1Uサーバー(インテル®Xeon®)Windows Server2003(64-bit)RAID1+0になります。
  • HPワークステーション(AMD Opteron)Windows XP(64ビット)、Windows Server2003、ハードウェアRAID5.
  • 私のホームunbrandedパソコン(AMD Athlon64)Windows XP(32-bit)、FreeBSD(64-bit)、Linux(64-bit)とシングルです。
  • 私のホームMacBook(インテルCore1)Mac OS Xでは、シングル佐田政隆ます。
  • 私の家 Koolu コインプリメンテーションです。大underpoweredと比較して、他のシステムでもこもこの機能を上回るパフォーマンスをWindowsのサーバRAID5うマネジ付きディスクを読み込み.

CPU使用したすべてのこれらのシステムは非常に低い中での試験やウイルス対策ができないようにしました。

されてしまったのでしょ前なたでも参加できますので、通常のWin32 CreateFile APIの FILE_FLAG_SEQUENTIAL_SCAN フラグをセットです。このフラグんの問題です。

のでは思えるかもしれない不思議なことだな差をつけるとかなり広範囲のwindowsのバージョンのもとシングルドライブやハードウェアraid5のとおりとする。

まだ腸管感じがなくても倒れることは本当に簡単に求める問題です。その他のOS XのRaid5きたのは、このた同機はまた別の機?はCPUの使用は基本的にゼロ時のことです。

その最短アプリに書き込みを発揮するのですが。-さまに関に挑戦してみてくださいね。

いかけを作るメモリのスレッドに対して安全ロックになっています。各スレッドが待機のロックまで無料にしました。にロックが無料で、ロックファイルの読み込みのために定義された長さの時間には一定量のデータ、そしてロックを解除その他の待機スレッド)。

を使用していま IOCompletionPorts Windows?WindowsのC++には深めの章ではこの対象として運ばれ でもご利用頂けますMSDN.

ポールを見ました。非常に興味深い。

うら面白いのではないか"というのwindows VistaまたはWin2008とも報告されることで大きな力になI/Oの改善にこれらの一部下さい。

マについてご提案異なるAPIいうメモリマッピングのファイルしてください。残念ながら2GBファイルだくなってしまうことができる地図を複数の全ファイルを32ビットの機械ということなど些細ないかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top