Linux とメモリ バフ/キャッシュとディスク ストレージ

Linux とメモリ バフ/キャッシュとディスク ストレージ

メモリバフ/キャッシュについて質問したい

ディスクを備えたLinuxマシンと、ディスク/var/dataにデータを書き込むアプリケーションがあるとします。

私の理解では、アプリケーションがデータをディスクに書き込むと、このデータはメモリキャッシュにも保存されます。

しばらくすると、X時間後にアプリケーションデータはメモリキャッシュから削除されます。

特定のデータをディスクではなくメモリ キャッシュに保存するように強制することは可能ですか?

私の質問の理由は、高速な読み取り/書き込みを求めているのに、ディスクがその点で非常に遅いからです。

答え1

メモリキャッシュに保存

そんなものは実際には存在しません。まずはここから始めましょうバフ/キャッシュ:

]# free -g
              total        used        free      shared  buff/cache   available
Mem:              7           0           3           0           3           6
Swap:             0           0           0

これは、現在バッファまたはキャッシュとして使用されている RAM の量を示します。カーネルがこれを実行するのは、ディスクが遅いためであり、多くの場合 (示されているように) RAM は十分あります。

特定のファイル用に RAM の一部を予約したい場合は、それらのファイルを RAM ディスク ( mount -t tmpfs ...) に置くことができます。ただし、それらのファイルをディスクにコピーし直すことを忘れないようにする必要があります。

答え2

メモリ階層の仕組みについて誤解されているのではないかと思います。階層は、CPU に最も近いものから最も速いもの、最も遅いものの順になっています。

CPUレジスタ > キャッシュメモリ > RAM/メインメモリ > ディスク

キャッシュ メモリは CPU とメイン メモリの間にあり、メイン メモリよりも高速にアクセスできます。通常、メモリ位置にアクセスすると、近くのデータのチャンク (つまり、アドレス範囲のブロックのコピー) がキャッシュにコピーされます。次に、メモリ位置にアクセスすると、まずキャッシュがチェックされ、データがすでに存在するかどうかが確認されます。これにより、メイン メモリにアクセスする必要がなくなり、時間を節約できます。

ですから、あなたの質問は意味をなさないと思います。通常、メイン メモリとディスクの間には中間ストレージやキャッシュはありません。現在使用中のデータは RAM に保存されます。これが、データを保存してアクセスする最も効率的な方法です。後で保存したい場合は、マシンの電源を切った後にディスクにコピーします (それが唯一の選択肢であるため)。今すぐにすぐにデータにアクセスしたい場合は、必要がない限り、ディスクに触れないようにします。

キャッシュ メモリ管理を簡単にオーバーライドして、何かをキャッシュに保存し、明示的に RAM には保存しないという手段は知りません。一般的に、メモリ キャッシュを管理するための非常に優れた効率的なシステムが既に導入されています。

また、一定時間が経過するとデータがキャッシュ メモリから削除されることはないと思います。通常、CPU がアクセスしたい最新のデータによってデータが押し出されます。

関連情報