26

ファイルシステムに非常に頻繁にアクセスし、一連の作業ファイルを読み書きするプログラムがあります。ファイルのサイズは数ギガバイトですが、RAM ディスクに収まらないほど大きくはありません。このプログラムが実行されるマシンは通常、Ubuntu Linux ボックスです。

非常に大きなキャッシュを持つようにファイル マネージャを構成する方法はありますか? また、後でディスクにヒットするように書き込みをキャッシュする方法はありますか?

または、実際のディスクにライトスルーする RAM ディスクを作成する方法はありますか?

4

4 に答える 4

25

デフォルトでは、Linux は空き RAM (ほぼすべて) を使用してディスク アクセスをキャッシュし、書き込みを遅らせます。キャッシュ戦略を決定するためにカーネルが使用するヒューリスティックは完全ではありませんが、特定の状況でそれらを打ち負かすことは容易ではありません。また、ジャーナリング ファイルシステム (つまり、現在のすべてのデフォルト ファイルシステム) では、ディスクへの実際の書き込みは、クラッシュから回復する方法で実行されます。これは、多少のオーバーヘッドを意味します。ファイルシステムのオプションをいじってみるのもよいでしょう。たとえば、 の場合は、または でext3マウントしてみてください(これらのオプションは、ファイルシステムのパフォーマンスを向上させる可能性がありますが、クラッシュに対する回復力が低下します)。また、ファイルシステムのアクティビティを減らすために使用します。data=writebackasyncnoatime

プログラムで、メモリ マッピングを使用してディスク アクセスを実行することもできます ( を使用mmap)。これは少し手作業ですが、データの管理と最適化をより詳細に制御できます。

于 2010-02-17T17:06:43.710 に答える
17

ディスクが組み込みの書き込みキャッシュを使用しているかどうかを確認します。それはかなりの違いを生む可能性があります。Linux では、次のように動作を切り替えることができますhdparm

/sbin/hdparm -W 0 /dev/hda 0 Disable write caching
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching

明らかに、書き込みキャッシュが有効になっている場合、システムが不用意にシャットダウンした場合 (たとえば、停電)、データが失われたり破損したりする可能性があります。

ソフトウェアに関しては、Linux カーネルは 2 つの主要な数値を使用して書き込み動作をパラメーター化します。

/proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio

最新のデフォルトでは、大量の書き込みスパイクを避けるために、より頻繁に書き込むようになっています。ニーズに合わせてこれらを調整してみてください。ここでは、利用可能なパラメーターと、それらを調整する方法についての優れた説明を示します。

于 2010-02-17T16:52:38.760 に答える
12

RAM ディスクを作成し、それを物理パーティションでRAID 1にすることができます。--write-mostlyおよび--write-behindオプションを見てください。これらを使用して、物理ディスクを読み取り対象外 (書き込みのみ) にすることと、未処理の書き込み操作の数をそれぞれ設定することができます。

または、pdflush のドキュメントを参照してください。ire_and_cursesが言及したことを超えて、スワップよりもディスク キャッシュを優先するために、swappiness を 100 まで上げたいと思うでしょう。

しかし、すべてがどのように機能するかを学び、特定のアプリケーションに合わせて調整することは価値があります。Linux はすでに一般的なケースに合わせて調整されており、特定の状況がどのように異なるかを知っているのはあなただけです。:)

于 2010-02-17T17:06:53.320 に答える
2

ここで問題になるのは、どの程度の耐久性が必要かということです。

通常、Linux は、しばらくの間ファイルをキャッシュするために RAM をできるだけ多く使用し、その後、変更を書き戻します。これは通常、あなたが望むものであるため、クラッシュが発生した場合、データの一部は失われますが、それほど多くはありません。

もちろん、アプリケーションは (たとえば) fdatasync() および fsync() を使用して強制的に書き戻すことができます。

パフォーマンスを向上させるには、耐久性を犠牲にするなど、fdatasync の呼び出し頻度を減らすことができます。

于 2010-02-17T22:11:11.203 に答える