問題の説明
ディスクから大きなファイルをストリーミングする必要があります。ファイルがメモリに収まるよりも大きいと仮定します。さらに、データに対して何らかの計算を行っていて、結果がメモリに収まるほど小さいと仮定します。架空の例として、200GBファイルのmd5sumを計算する必要があり、RAMの使用量を保証して計算する必要があるとします。
要約すれば:
- 一定のスペースである必要があります
- できるだけ速く
- 非常に大きなファイルを想定する
- 結果はメモリに収まります
質問
一定のスペースを使用してファイルからデータを読み取る/ストリーミングする最速の方法は何ですか?
私が持っていたアイデア
ファイルがメモリに収まるほど小さい場合、mmap
POSIXシステムでは非常に高速になりますが、残念ながらここではそうではありません。mmap
ファイルの連続するチャンクをバッファリングするために小さなバッファサイズで使用することにパフォーマンス上の利点はありますか?バッファをファイルの下に移動するシステムコールのオーバーヘッドがmmap
利点を左右しますか、それとも、読み込んだ固定バッファを使用する必要がありfread
ますか?