2

私は64GのRAMとたくさんのディスクスペースを備えたdebian-64で専用のDBデーモンを実行しています。ディスク上のハッシュテーブル(mmaped)を使用し、通常のwrite()呼び出しで実際のデータをファイルに書き込みます。本当に多くの更新を行うと、mmapの大部分がダーティになり、ページキャッシュがそれをディスクにフラッシュしようとします。これにより、ランダムな書き込みが大量に発生し、データファイルへの通常の(順次)書き込みのパフォーマンスが低下します。 。

ダーティページへのいくつか(またはすべて)の変更が更新ごとに1回ではなく一度に書き込まれるため、mmaped領域のページキャッシュフラッシュを遅らせることができれば、パフォーマンスが向上します(実際には最悪の場合)。もちろん、それはとにかく多くの変更を集約します)。

だから私の質問:メモリマップト領域のページキャッシュフラッシュを遅らせることは可能ですか?または、通常の書き込みを優先することは可能ですか?または誰か他のアイデアがありますか?madviseとposix_fadviseは何の違いもないようです...

4

2 に答える 2

3

のチューナブルで遊ぶことができ/proc/sys/vmます。たとえば、inの値を大きくするdirty_writeback_centisecsと、pdflushのウェイクアップの頻度がやや少なくなり、データを書き出すまでdirty_expire_centisecondsデータがダーティのままになるように増やし、dirty_background_ratio何かを実行する前にダーティページをRAMに残しておくようにします。すべての値が何をするかについてのいくぶん包括的な説明については、ここ
を 参照してください。

これはマシン上のすべてのプロセスに影響しますが、巨大なデータベースサーバーをどのように実行しているかを見ると、同じマシンで他に何も実行したくないので、これは問題ではない可能性があります。

もちろん、これは書き込みを遅らせますが、ダーティページのライトバックが競合する問題を完全には解決しませんwrite(ただし、更新が多い場合は、いくつかの書き込みが折りたたまれる可能性があります)。
ただし、syscallを使用して、「書き込み」ファイル記述子()の特定の範囲でページの書き込みを強制的に開始できます。したがって、ダーティページは後で(そしてより長い猶予期間で)不明な時間に書き戻されますが、関心のあるページに対して手動で書き戻しを開始します。 これは保証を与えるものではありませんが、機能するはずです。sync_file_rangeSYNC_FILE_RANGE_WRITE

ドキュメントを絶対に積極的に読んでください。2回読んでください。sync_file_range間違って使用すると、データが非常に簡単に破損したり失われたりする可能性があります。特に、ファイルに追加した場合は、メタデータが最新でフラッシュされていることを確認する必要があります。そうしないと、クラッシュした場合に「正常に書き込まれた」データが「失われる」だけになります。

于 2012-06-13T22:42:52.633 に答える
0

私はmlockを試してみます。mlock関連するメモリ範囲を使用すると、フラッシュが発生しなくなる可能性があります。終わったらできmunlockます。

于 2012-06-12T15:21:54.850 に答える