2011-02-08 3 views
6

Linuxカーネルバージョン2.6.18-194.26.1.el5を実行しているCentOS 5.5マシンでは、posix_fadvise(WILLNEED)が通常のIOよりも60Kファイルの読み込み速度を200%近く遅くすることに気付きました。posix_fadvise(WILLNEED)はIOを遅くしますか?

実際のfadvise呼び出しは同期的で、ファイルから読み取られるデータを使用するアプリケーション内の他のスレッドのスケジューリングも遅延しているようです。

fadvise呼び出しのためにカーネルがディスクからデータをフェッチしている可能性がありますか?他のスケジュールされたタスクが遅れることがありますか? fadviseコールを行うことから期待される非同期プリフェッチの動作に反するようです。

質問:私はposix_fadvise(WILLNEED)の非同期動作を強制するために使用できる調整可能なカーネルパラメータがありますか?カーネルIOスレッド、ページキャッシュを増やすように?

答えて

7

これはちょうど最近asked on LKMLでした。それはちょうどそれが設計されている方法です。ノンブロッキングfadviseが必要な場合は、別のスレッドで行います。

+0

答えをありがとう。このリンクの回答は、カーネルで処理されているIO要求の数を示しています。それは設定可能な番号ですか?システムに多くのリソースがある場合、このキューを増やすと同期動作の影響を減らすことができます。 – Specksynder

+0

キューごとに '' nr_requests'を調整できるので、https://www.kernel.org/doc/Documentation /block/queue-sysfs.txt)。私はそれが何から初期化されているのか分からない。 – sourcejedi