
Linux カーネルのドキュメントによると、POSIX_FADV_RANDOM は readahead を無効にするようです。しかし、(sudo hdparm -A 0 /dev/sdb) を使用して Readhead を無効にすると、パフォーマンスが大幅に低下します。また、read(2) が 512k ごとに分割され、個別の呼び出しとして動作しているようです (理由は不明ですが、リクエストあたりの最大セクターである可能性があります)。
では、どのオプションが実際に先読みを無効にするのでしょうか? POSIX_FADV_RANDOM は OS キャッシュも無効にするのでしょうか、それとも POSIX_FADV_DONTNEED を追加する必要がありますか。
答え1
POSIX_FADV_RANDOM
カーネルのファイルシステム ドライバーによって実行される先読みを無効にします。ファイルシステム レイヤーに、要求された以上のデータを読み取らないように指示します。先読みはファイル レベルで行われます。ファイルシステム レイヤーは同じファイルから追加のデータを取得する場合がありますが、 を指定した場合は (あまり) 行われませんPOSIX_FADV_RANDOM
。
hdparm -A 0
ディスク自体によって実行される先読みを無効にします。セクターを読み取るときに、次のいくつかのセクターを内部キャッシュに保存しないようにディスクに通知します。
どちらも先読みを無効にしますが、システムの異なるレイヤーで無効にします。
POSIX_FADV_RANDOM
POSIX_FADV_DONTNEED
プリフェッチを無効にするだけです。キャッシュしたくない場合(またはキャッシュから削除したい場合)は、領域を に設定します。