2


1

RAMに収まるサイズよりも大きいサイズでも、オペレーティングシステムのブロックキャッシュにできるだけ多くの大きなファイルを保存する必要があります。また、非常に大きなファイルを継続的に読み取っています。 ATM別のファイルからreadをストリーミングするときに、大きな重要なファイルの大部分をシステムキャッシュから削除します。

6 Answer


3


Linuxでは、ファイルシステムを_tmpfs_型としてマウントすることができます。これは、必要に応じて、利用可能なスワップメモリ​​をバッキングとして使用します。 あなたはあなたのメモリサイズより大きいファイルシステムを作成することができるはずです、そしてそれはシステムキャッシュのそのファイルシステムの内容を優先します。

mount -t tmpfs none /mnt/point

/ proc / sys / vm`内のファイル swapiness`と `drop_cache`から恩恵を受けることもできます。


3


Windowsを使用している場合は、スキャン中のファイルをフラグ付きで開くことを検討してください。

FILE_FLAG_SEQUENTIAL_SCAN

あなたも使うことができます

FILE_FLAG_NO_BUFFERING

そのファイルのために、しかしそれはあなたの読み込みサイズとバッファアラインメントにいくつかの制限を課します。


3


LinuxやSolarisのようなPOSIXシステムでは、posix_fadviseを使ってみてください。

ストリーミングファイルで、次のようにします。

posix_fadvise(fd、0、0、POSIX_FADV_SEQUENTIAL); while(bytes> 0){bytes = pread(fd、buffer、64 * 1024、current_pos); current_pos = 64 * 1024。 posix_fadvise(fd、0、current_pos、POSIX_FADV_DONTNEED); }

そして、あなたはあなたの他のファイルにPOSIX_FADV_WILLNEEDを適用することができます、それはそのメモリ優先順位を上げるべきです。

さて、私は、Windows VistaとServer 2008がメモリの優先順位に関して気の利いたトリックを実行できることを知っています。 XPのようなおそらく古いバージョンでも、より基本的なトリックを実行できます。 しかし、私は頭の上にある機能を知りませんし、それらを調べる時間がありません。


1


一部のオペレーティングシステムには、ramのセグメントをストレージ用に確保してからファイルシステムとしてマウントするために使用できるramdiskがあります。

しかし、私が理解できないのは、オペレーティングシステムがファイルをキャッシュしないようにしたいのです。 あなたの質問全体が私には意味をなさない。


0


より多くのRAMを買う(それは比較的安いです!)か、OSにそのことをさせてください。 OSを迂回することは価値がある以上に面倒になるだろうと思うでしょう。 あなたや他のアプリケーションがメモリを必要とするまで、OSは必要なだけのファイルをキャッシュします。

私はあなたがプロセスの数を最小限に抑えることができると思いますが、それはおそらくより多くのメモリを購入する方が速いです。


0


mlock()とmlockall()はそれぞれ呼び出し側プロセスの仮想アドレス空間の一部または全部をRAMにロックし、そのメモリがスワップ領域にページングされるのを防ぎます。

(MLOCK(2)Linuxのマニュアルページからコピーしたもの)