Linuxは、同じファイルに対して同時読み取りを実行すると先読みされます。

Linuxは、同じファイルに対して同時読み取りを実行すると先読みされます。

ファイルが順次読み込まれると、Linuxは先読みを実行します(/sys/block//queue/read_ahead_kbで指定)。

興味のあるオペレーティングシステム:Red Hat Linux 興味のあるファイルシステム:xfs、ext4

順次読み取りが完了したかどうかを判断する基準は何ですか?準備の使用を検討してください(https://man7.org/linux/man-pages/man2/pwrite.2.html)同じまたは異なるFDを使用してください。

例えば

同じFD。読み取り位置10-20-30-78-89(seq読み取り以上) - 40-50-60-70 - 23-34(seq読み取り以上) - 80-90-100 ...

この場合、上記の微妙な順序が間違った読み取りのために先読みが防止されますか?

それでは、2つの異なるFDを使用すると、この問題は解決されますか(つまり、別々のFDを使用して78-89-23-34を読む)? (つまり、先読みは通常どおり10-20-30-40-50読み取りを実行します)

ベストアンサー1

この場合、上記の微妙な順序が間違った読み取りのために先読みが防止されますか?

はい、同じファイルディスクリプタで順序が正しくない読み取りは先読みに影響を与える可能性がありますが、カーネルはこれを考慮しようとします。これは、少なくとも順次読み取りと並行して進行する小さな「ランダム」読み取りの場合です。バラよりオンデマンド先読み設計の説明、特に:

インターリーブされた順次読み取りでは、同じfdの同時ストリームが互いの先読み状態を無効にする可能性があります。したがって、PG_readaheadを使用して(start + size-async_size)の新しい先読みページを表示し、それを先読みインジケータとして使用します。無意味な先読みを避けるために、すでにキャッシュされているページにはこのフラグが設定されていないため、無意味なページキャッシュ検索が保存されます。

以下を見ると、どれだけ適用可能かを確認できます。ondemand_readahead、特にその魅力try_context_readaheadそして周りのコメント。

いつものように、パフォーマンスのボトルネックを削除しようとするときは、ヒントを除いて潜在的なボトルネックを考慮しないでください。独自のベンチマークを設計し、特定のシナリオのパフォーマンス特性を分析する必要があります。たとえば、シーケンシャル読み取りの先読みのために、誤った順序の読み取りがすでにページキャッシュにあるページにのみヒットすることがあります。

おすすめ記事