# sar -r 00:00:00 kbmemfree kbmemused %memused kbmemshrd kbbuffers kbcached kbswpfree kbswpused %swpused 00:10:00 220216 3875156 94.62 0 289288 1707500 2024592 72536 3.46 00:20:00 215180 3880192 94.75 0 289312 1707672 2024592 72536 3.46 00:30:00 214552 3880820 94.76 0 289340 1707804 2024592 72536 3.46
- kbmemfree: 物理メモリの空き容量
- kbmemused: 使用中の物理メモリ量
- %memused: 物理メモリ使用率
- kbbuffers: カーネル内のバッファとして使用されている物理メモリの容量
- kbcached: カーネル内のキャッシュ用メモリとして使用されている物理メモリの容量
- kbswpfree: スワップ領域の空き容量
- kbswpused: 使用中のスワップ領域の容量
- %swpused: スワップ領域の使用率
→ 実質メモリ使用量 = kbmemused - ( kbbuffers + kbcached )
# free total used free shared buffers cached Mem: 315636 40112 275524 0 5636 19116 -/+ buffers/cache: 15360 300276 Swap: 650624 0 650624
free コマンドの場合、計算しなくても「-/+ buffers/cache:」に実質メモリ使用量を表示してくれる。
→「-/+ buffers/cache:」は「 used - ( buffers + cache ) 」って意味だろうな。
Linux のディスクキャッシュが「ページキャッシュ」と呼ばれるのは、キャッシュの単位がページだからです。ページというのは Linux の仮想メモリの最小単位。つまり何かしらのデータがメモリに存在するとき、そのメモリ領域をカーネルが扱うときの最小単位です。ディスクの内容をキャッシュする場合、ファイルを丸ごとキャッシュしたりするのではなくiノード番号とファイルのオフセットをキーにしてページ単位でキャッシュします。
Linux のページキャッシュ - naoyaのはてなダイアリー
...
Linux はメモリに空きがある限りページキャッシュにキャッシュを蓄え続けます。他のアプリケーションでメモリが必要になるとページキャッシュは優先的に開放されます。
バッファキャッシュ(buffer cache)には、ブロックデバイスドライバが使用するデータバッファが含まれている。
[see: fs/buffer.c]
これらのバッファは固定サイズ(たとえば、512 バイト)で、ブロックデバイスから読み出されたか、そこに書き込まれた情報のブロックが入っている。ブロックデバイスとは、データアクセスの際に、固定サイズのブロック単位でのみ読み書きできるデバイスを指す。すべてのハードディスクはブロックデバイスである。バッファキャッシュは、デバイス識別子と必要なブロック番号とでインデックス付けされていて、データブロックをすばやく見つけだすために使用されるものである。ブロックデバイスは、バッファキャッシュを経由しなければアクセスできない。データがバッファキャッシュに見つかれば、たとえばハードディスクのような物理ブロックデバイスから読み出す必要がなくなるので、アクセスがずっと高速になる。
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-4.html
ページキャッシュ(page cache)は、ディスク上のイメージやデータへのアクセスを高速化するために使用される。
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-4.html
[see: mm/filemap.c]
これは、ページ単位でファイルの論理的な内容をキャッシュし、ファイル名とそのファイル内のオフセットを使ってアクセスされる。ページがディスクからメモリに読み出されると、それらはページキャッシュにキャッシュされる。
追記(2010/06/13):
結構、妄想入っているまとめ。Linuxカーネル2.6の場合のはなし。
ページキャッシュはファイルのキャッシュ。バッファキャッシュはブロックのキャッシュ。スーパーブロック、inodeブロックなどのメタデータはバッファキャッシュに、ファイルそのもののデータはページキャッシュにキャッシュされる。バッファキャッシュはページキャッシュの一部として管理される。
- ページキャッシュ
- ファイルそのもののキャッシュ。
- inode番号とファイルオフセットがインデックスに使われる。
- get_page_cache_size()-total_swapcache_pages-i.bufferram
- スワップキャッシュ、BufferはPageCacheとして実装されているのでその分を引いてある。
- バッファキャッシュ
追記(2011/04/24):
会社にあった
- 作者: ジムモーロ,リチャードマクドゥーガル,Jim Maure,Richard McDougall,福本秀,細川一茂,佐藤敬,兵頭武文,大嶺朋之
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2001/12
- メディア: 単行本
- クリック: 41回
- この商品を含むブログ (20件) を見る
P.606
15.1.1 Solarisページ・キャッシュ
Solarisでは、ファイル・システム・データをキャッシュするためにページ・キャッシュという新しい手法を採用している。このページ・キャッシュは、SunOS 4 で一新された仮想メモリ・システムの一部として1985年にSunで開発され、System Vリリース4 UNIX でも採用された。現在では、LinuxやWindows NTでもこの手法を採用している。
ページ・キャッシュには、従来のキャッシュと比べて2つの大きな違いがある。1つは、そのサイズを動的に変更でき、アプリケーションが使用していないすべてのメモリをキャッシュとして利用できる点である。もう一つは、ディスク・ブロックではなくファイル・ブロックをキャッシュしている点である。つまり、物理ブロックに対するキャッシュではなく、仮想ファイルに対するキャッシュなのである。この仮想ファイル・キャッシュによって、オペレーティング・システムはファイルとそのオフセットから簡単にファイル・データを取得することができる。これに対して従来のブロック・キャッシュの方法では、オペレーティング・システムは、まずファイルに対応した物理ディスク・ブロック番号を見つけ出す必要があり、それから物理ディスク・ブロック・キャッシュのデータを取得していた。これが、仮想ファイル・キャッシュの方が効率的に処理できる理由である。
P.610
ページ・キャッシュは、すべてのフリー・メモリをキャッシュして使用するため、本当の意味でのフリー・メモリのサイズや、ファイル・システム・キャッシュとして使用されているメモリのサイズを確認することは困難である。MemToolパッケージ(249ページの「ファイル・システム・キャッシュ・メモリ」を参照)を使用すると、ファイル・システム・キャッシュにどれだけのメモリが使用されているのか確認できる。