大量のキー (2600 万以上) をサポートするディスク ベースのハッシュテーブルを実装しています。値は逆シリアル化されます。読み取りは基本的にファイル全体でランダムであり、値はページ サイズより小さく、SSD 用に最適化しています。安全性/一貫性はそれほど大きな問題ではありません (パフォーマンスの問題)。
私の現在の解決策は、カーネルによるプリフェッチを無効にし、オンデマンドで必要なデータのみをロードするように設定されたmmap()
ファイルを使用することです。MADV_RANDOM | MADV_DONTNEED
カーネルがディスクからメモリ バッファに読み取り、そこから逆シリアル化するという考えが浮かびました。
どうO_DIRECT
ですか?を呼び出しread()
た場合、(逆シリアル化した) バッファーにまだコピーしているので、利点を得ることができますか?
ファイルに関連するバッファとで開かれたファイルのmmap()
呼び出しに関する詳細情報はどこにありますか?read()
O_DIRECT
先読みやキャッシングには興味がありません。私のユースケースに提供するものは何もありません。