RAID 5(4 x 7.2k @ 3TB)システムに2TBの読み取り専用(書き込みは作成されていません)ファイルがあります。2TBファイルからのファイルオフセットによってランダムに多くの300バイトのチャンクを読み込む最速の方法はありますか?
今、私はそのファイルの一部を読みたいスレッドをいくつか持っています。 すべてのスレッドに必要なチャンクの配列があります。 すべてのチャンクは、読み込むファイルのオフセット(位置)とサイズ(主に約300バイト)によってアドレス指定されます。
このデータを読み取る最も早い方法は何ですか。 CPUサイクルは気にしませんが、(ディスクの)待ち時間は重要です。 可能であれば、私はハードディスクのNCQを利用したいと思います。
ファイルは非常に圧縮されており、ランダムにアクセスされ、正確に位置を知っているため、私はそれを最適化する方法が他にありません。
- ファイルを1つのスレッドにプールする必要がありますか?
- ファイルを開いたままにする必要がありますか?
- すべてのスレッド(約30個)は、すべてのファイルを同時に開いておく必要がありますか?新しいスレッドは(Webサーバーから)来ていますか?
- 私は100ms待って、ファイルのオフセット(最低のもの)で読み値を並べ替えると役に立ちますか?
データを読み取る最も良い方法は何ですか?経験、ヒント、ヒントはありますか?
読み取りスレッドはファイルを開いたままにする必要がありますか?私はイエスと思う。 FileOptions.RandomAccessでFileStreamを使用しますか?あなたは "同期してチャンクを読む"と書いています。これは、すべての読み取りスレッドが、チャンクを読み取るために注文をデキューするとすぐに、ディスクからチャンクを読み始めることを意味しますか? – Chris
あなたのコメントに答えるために私の答えを編集しました。 –
私は忘れて、あなたは書いています:「良いロックレスキューインプリメンテーションは、10ns未満のレイテンシから始まります。あなたは特別なクラス/プロジェクトを念頭に置いていますか? – Chris