2009-08-24 4 views
6

をたくさんのメモリ(数ギガ)のあるLinuxボックスに置くと、できるだけ速く大きなファイルに無作為にアクセスする必要があります。'cat'を実行すると、Linuxのボックスで後続のファイルのランダムアクセスを高速化できますか?

cat myfile > /dev/nullにアクセスする前にファイルページを順番にメモリに保存するようにしました。そのため、ドライランダムアクセスよりも高速です。

このアプローチはあなたにとって理にかなっていますか?

答えて

4

他の人によると、あなたの特定のケースでベンチマークする必要があります。

ただし、パフォーマンスが大幅に向上する可能性は十分あります。 従来の回転メディア(ハードディスク)では、シーケンシャルアクセス(catファイル>/dev/null/fadvise)はランダムアクセスよりもはるかに高速です。

4

(時期尚早の可能性がある)最適化が価値あるものであることを確認する方法は1つだけです。それをベンチマークします。

2

理論的にはアクセスを高速化することができます(特にファイルからほとんどすべてにアクセスする場合)が、大きな違いはありません。

本当に便利な唯一のアプローチは、特定のケースでベンチマークすることです。

7

それはシステムのキャッシュにファイルの内容を強制することがやっている間、あなたは、データはあなたが必要とするプリキャッシュカーネルを作るために(ブロッキング)​​コール(POSIX_FADV_WILLNEEDアドバイス)posix_fadvise()を使用したほうが良いです。

EDIT: あなたはまた、完全に先読みを無効にするには、POSIX_FADV_RANDOMアドバイスを使用しようとする場合があります。 こちらの記事では、使い方の説明をよくしています:Advising the Linux Kernel on File I/O

2

本当にスピードを望むなら、catで何かをハックしようとするのではなく、メモリマップされたIOを試してみることをお勧めします。もちろん、それは...

先読みがあまりにも良いの呼び出しです...あなたがアクセスしようとしているファイルのサイズとあなたが...これが可能ではないかもしれないしたいアクセスの種類によって異なり

0

大きなファイルで「cat」を実行すると、データがキャッシュに取り込まれ、より価値のあるデータがキャッシュから取り除かれる可能性があります。これはあなたが望むものではありません。

パフォーマンスが重要な場合は、とにかく定期的なパフォーマンステストを行います(そして浸漬テストなど)ので、それを続けてグラフや数字などを見てください。

関連する問題