💬
【Linux】キャッシュについて
はじめに
Linuxのメモリキャッシュについて調べる機会があったので、備忘録として残しておきます。
/proc/sys/vm/drop_cachesとは
Linuxでメモリキャッシュを解放するために使用されるファイルです。
このファイルに数値(1~3)を書き込むことで、特定のメモリキャッシュを手動で解放できます。
- 1 : ページキャッシュ
- 2 : dentryキャッシュとinodeキャッシュ
- 3 : ページキャッシュ、dentryキャッシュ、inodeキャッシュすべて
ここで、ページキャッシュやinodeというワードはなんとなくイメージがつきやすいですが、dentryは聞きなれないワードでしたので、これを機にそれぞれまとめてみました。
そもそもメモリキャッシュとは
メモリキャッシュとは、データを一時的にメモリ上に保存しておくことで、毎回ディスクにアクセスすることなく高速にデータへアクセスできる仕組みです。
ページキャッシュとは
ページキャッシュはファイルのデータそのものをメモリにキャッシュしたものです。
これにより、ファイルを読み書きする際に毎回ディスクにアクセスする代わりに、メモリ上のコピーを使って高速化が可能になります。
dentryと inodeについて
inodeとは
inodeはファイルのサイズや所有者、アクセス権、作成日時や更新目時、保存などの属性情報を質理するデータ構造です。
重要なポイントとして、inodeはファイル名を管理せず、あくまで属性情報を管理しているという点です。
dentry(ディレクトリエントリ)とは
ファイルの属性情報(サイズや作成日時などのメタデータ)はinodeが管理していますが、ファイル名やディレクトリの階層構造は別に管理されており、これらを関連付けるのがdentryの役割です。
つまり、
- inodeはファイルの属性情報を管理し、
- dentryはファイル名(パス名)とinodeを結びつける役割を担っているというイメージです。
dentryキャッシュとinodeキャッシュとは
inodeやdentryは本来ディスク上に存在するデータ構造ですが、カーネルは頻繁にアクセスされるinodeやdentryの情報をメモリ上にキャッシュとして保持します。
これによりディスクへのアクセス回数を減らし、ファイルアクセスの高速化を実現しています。
さいごに
以下のようにコマンドを実行することで、実際にキャッシュの解放が可能です。
echo 2 > /proc/sys/vm/drop_ceches
Discussion