Linux で msync(MS_ASYNC) を使用したページ フラッシュの順序は、ページが書き込まれた順序と同じであることが保証されていますか?
状況に依存する場合、それらが同じ順序であることを確認する方法 (サーバーへのフル アクセス) はありますか?
バックグラウンド
私は現在、OpenLDAP Symas MDBを永続的なキー/値のストレージとしてMDB_MAPASYNC
使用していますが、使用していmsync(MS_ASYNC)
ないため (ソースコードを調べました)、書き込みが非常に遅く、データを処理している間でも、単一のコアが IO を永続的に待機しています。 1MB/s 未満の場合もあります。分析した結果、問題は多くの小さな IO Ops にあるようです。使用するMDB_MAPASYNC
ディスクの最大速度に簡単に到達できますが、MDB のドキュメントには、その場合データベースが破損する可能性があると記載されています。残念ながら、私にはコードが複雑すぎます/現在、コードベース全体を段階的に調べて、なぜそうなるのかを調べる時間はありません。また、MDB が提供する機能 (トランザクション) の多くは必要ありません。 、カーソル、ACID 準拠)、そのため、mmap に裏打ちされた独自の KV ストアをmsync(MS_ASYNC)
作成することを考えていました。フラッシュされていないページが最後に触れたデータのみを失い、データベースが破損したりしないように、確実に作成するようにします。他のデータを失います。
しかし、そのためには私の質問への回答が必要です。残念ながら、グーグルやLinuxメーリングリストを調べてもまったく見つけることができません(msyncパッチに関するメールをいくつか見つけましたが、他には何もありません)。
ちなみに、私は他にも利用可能な永続的な KV ストアを何十も調べましたが、自分に適したもの (書き込みが速く、使いやすく、組み込み (http サービスなどはありません)、決定論的な速度) を見つけることができませんでした。 (したがって、ガベージ コレクションや、leveldb のようなランダムに実行される圧縮はありません)、適切なスペース要件 (追加のみのデータベースはありません)、可変キー長、バイナリ キーとデータ)、しかし、ここで私を助けることができるものを知っていれば、私は' d も非常に感謝しています。