我思うゆえに我あり I think therefore I am

Gentoo キャッシュ 解放 sync sysctl カーネルパラメータ

システムを起動し続けているとキャッシュがたまる一方
それに加えてなかなかfreeされないときたもんだ
なんだか気持ち悪いなあ、と思って過ごしていたのだが、強制的にfreeさせる方法を紹介している人がいましたー

TrashSUITE Linuxのページキャッシュを強制的に解放させる方法
# sync
# sysctl -w vm.drop_caches=3
# sysctl -w vm.drop_caches=0


!
すごいですぞこれは!

まずはsyncコマンドでメモリバッファ内にあるデータをディスクに書き込むようにカーネルさんに要求を発行
ちなみに、修正されたデータはDirtyなページ(ディスクと同期していないページ)と言う
ただしsyncコマンドは、「早いとこディスクに書き込んでくれー」と急かすだけでディスクへの書き込みを保証するものではないようだ、なるほど。

sysctlコマンドはカーネルパラメータをチューニングする際に用いるようだ
変更できるパラメータは/proc/sys/以下にリストされており、現在の設定値は以下で確認が可能
# sysctl -a

次に、drop_cacheの値が意味するところをつらつらと。
* 0 初期値
* 1 ページキャッシュ解放
* 2 dentry, inode 解放
* 3 ページキャッシュ, dentry, inode 解放

意味するところが全く分からない自分に腹が立ったのでちょいと調べてみまんた

「ページキャッシュ」
The Linux Kernel : メモリ管理
ページキャッシュ(page cache)は、ディスク上のイメージやデータへのアクセスを高速化するために使用される。
これは、ページ単位でファイルの論理的な内容をキャッシュし、ファイル名とそのファイル内のオフセットを使ってアクセスされる。ページがディスクからメモリに読み出されると、それらはページキャッシュにキャッシュされる。


ファイルそのもののキャッシュがページキャッシュ
「バッファキャッシュ」内のファイルのキャッシュが「ページキャッシュ」らしい
キャッシュの相互関係

「バッファキャッシュ」
The Linux Kernel : メモリ管理
バッファキャッシュ(buffer cache)には、ブロックデバイスドライバが使用するデータバッファが含まれている。
これらのバッファは固定サイズ(たとえば、512 バイト)で、ブロックデバイスから読み出されたか、そこに書き込まれた情報のブロックが入っている。ブロックデバイスとは、データアクセスの際に、固定サイズのブロック単位でのみ読み書きできるデバイスを指す。すべてのハードディスクはブロックデバイスである。
バッファキャッシュは、デバイス識別子と必要なブロック番号とでインデックス付けされていて、データブロックをすばやく見つけだすために使用されるものである。ブロックデバイスは、バッファキャッシュを経由しなければアクセスできない。データがバッファキャッシュに見つかれば、たとえばハードディスクのような物理ブロックデバイスから読み出す必要がなくなるので、アクセスがずっと高速になる。

ディスクブロックそのもののキャッシュ(コピー)がバッファキャッシュ

「inode」
OpenTechPress メモリiノード
iノードにはファイルの管理情報(ファイル名以外の全ての情報)が納められている。

「dentry」
OpenTechPress ディレクトリエントリキャッシュ
linuxではdentryという構造体に、ファイルパス名の情報を格納しメモリ上にキャッシングしている。パス検索の高速化が目的である。一度ディレクトリやファイルにアクセスすると、一つのdentryが確保され、キャッシュされる。

ファイルを操作する際、そのファイルの検索にdentry構造体に格納されているファイルパスを参照

コンピュータはどのようにディスクに情報を保存するのか? 10.2. ファイル名とディレクトリ
ファイル名は、ディレクトリ構造体 (directory structure) のなかにあります。すなわち、ディレクトリ構造体が、ファイル名を i-node に対応付けているわけです。 Unix では、ひとつのファイルが正式なファイル名を複数持つことが可能になっている(これは、ハードリンク (hard links) とも言います) のは、このためです。それらは複数のディレクトリエントリであり、全部が同一の i-node をポイントしています。

ファイル名はdentry構造体によってinodeと対応付けされているのね

ああー、なるほど。流れがつかめた
ファイル名に対して割り当てられるinodeにはディスクブロックのアドレスが記録されているから、
そのディスクブロックアドレスとバッファキャッシュ内のインデックス(デバイス識別子およびブロック番号)とが対応したディスクブロックにファイルを書き込んでいるのか

他の参考URL
OpenTechPress 削除したファイルをlsofで復元する
OpenTechPress バッファキャッシュ
Linux初心者の基礎知識 13.ファイルアクセスの高速化
Linux、負荷まわりの話
[PR]
by proof.of.human | 2007-10-26 12:46 | Gentooは俺の嫁