免責事項:これは私が探しているものを見つけることができないため、おそらく研究の質問です。共有されたmmapファイルを管理するためのライブラリまたはツール
問題:私は、それぞれ0.01MBから約10.0MBの間の100Kから10Mのファイルを読み込む必要のあるカスタム検索アプリケーションを持っています。各ファイルにはmmap経由で配列として直接ロードできる1つの配列が含まれています。私は、必要になる前にRAMにファイルをプリフェッチするためのソリューションを探しています。システムメモリがいっぱいであれば、すでに処理されたものを取り出します。
これは、OSのメモリ管理とmemcachedのようなものがよく似ています。私が実際に探しているのは、キーの文字列や値を返さないmemcachedのようなものですが、選択した配列の先頭のアドレスです。さらに、(これは別の話題ですが)NUMAマシンでCPUコアとRAMの距離が最短になるように共有メモリを管理したいと考えています。
私の質問です:「このようなツール/ライブラリは既に存在しますか?」
あなたのコメントは正しい方向に向いています。この質問と[other](http://stackoverflow.com/questions/8056984/speeding-up-file-io-mmap-vs-read)の主な違いは、ファイルの数が多いことですが、各ファイル比較的小さい。他の場合には、その反対が真である。私が本当にしなければならないことは、(消費者の視点からは)I/Oを非ブロック化し、消費者がまだ読んでいないファイルをカーネルがページアウトしないようにすることです。十分なメモリがあれば、私はすべての配列をメモリに保持するだけです。 –
次の秒でどのファイル(またはその一部)が必要になるか予測できるならば、 'readahead'システムコール(おそらく別のスレッド)を使って助けてください。 –
私はreadaheadがブロッキングコールであると少し気になります。また、この質問の主な動機は、I/Oパターンが重要であるように見える1つのCPUコアであり、多くのコアを飢えさせることなく拡大したいと考えていることです。もう1つの問題(別の問題)は、ほとんどのI/Oプロファイラーが1つのスレッドを持つプロセスのためにバグがあり、マルチスレッドプロセスの方がはるかに悪いです。 –