OSのバッファ領域ってなんだ?

【この記事の所要時間 : 約 4 分

canalize.jp – PostgreSQL 7系 の shared_buffers の設定値には注意が必要だ!

「メモリが空いているようなのでそれをPostgreSQLで有効に使いたい」という質問に対して「shared_buffersをできるだけ多く取ってください」というような回答を目にすることがよくありますが、前述のようにそれは間違いです。 PostgreSQLでは、むしろ余ったメモリをOSにバッファ領域として使ってもらった方がトータルでの性能が向上します。

の太字部分についてちょっと調べた。
OSのバッファ領域というのは、何なのか?
バッファの定義は以下の通り。
e-words – バッファ 【buffer】

複数の機器やソフトウェアの間でデータをやり取りするときに、処理速度や転送速度の差を補うためにデータを一時的に保存しておく記憶装置や記憶領域のこと。

とのことなので、OSのバッファ領域とは、HDDの内容を転送速度の差を補うためにメモリ上に一時的に保存しておくことを意味していると思われる。その意味では、
OSのバッファ領域 = バッファキャッシュ + ページキャッシュ
ということになると思う。
Open Tech Press – バッファキャッシュ

linuxでは、空きメモリ全てをディスクキャッシュとして利用する. まず、最初にバッファキャッシュに関して説明する。ディスクブロックとの間のI/O処理のうち、ファイルシステムのメタデータに関するI/Oは、(ファイルシステムの種類により異なるが) 一般にバッファキャッシュを通して行う。一度アクセスのあったディスクブロックは、再度利用される可能性が高いため、I/Oに利用したバッファ域はすぐには開放せず、しばらくLinuxカーネル内にキャッシュとして保持する。

Open Tech Press – ページキャッシュ

ページキャッシュもバッファキャッシュと同様の目的に利用される。
バッファキャッシュがデバイスとブロック番号をインデックスとしているブロックデバイスそのもののキャッシュであるのに対し、ページキャッシュはinode番号とファイルオフセットをインデックスとするファイルそのもののキャッシュであるという点が異なる。

以下のサイトにうまくまとめられている。
Linux、負荷まわりの話 – goungoun技術系雑記帳魚拓
実際に、どれくらいバッファキャッシュやページキャッシュにメモリが使われているのか?を確認するには、以下のコマンドでOK。

$ cat /proc/meminfo

以下のような感じ。

MemTotal: 4148924 kB
MemFree: 136592 kB
Buffers: 118260 kB
Cached: 3384040 kB
SwapCached: 1200 kB
Active: 2161280 kB
Inactive: 1679000 kB

実装メモリは4GBで、バッファキャッシュに115MB、ページキャッシュに3.3GB 使われていることがわかる。結構使ってる。

$ sar -r

でも確認することができる。みるところは、kbcached というところ。
naoyaのはてなダイアリー – ページキャッシュ

Linux はメモリに空きがある限りページキャッシュにキャッシュを蓄え続けます。他のアプリケーションでメモリが必要になるとページキャッシュは優先的に開放されます。ので %memused が 96.98% だと「空きメモリがない!」と一見びっくりしてしまいますが全く問題ありません。

Postgresqlの7系に関していえば、shared_buffer の値は、ある一定以上にはせずに、残りのメモリは、バッファキャッシュやページキャッシュで使ってもらう方がパフォーマンスがいいというのがベンチマークの結果ということみたい。
勉強不足ですね。orz。
以下、参考までに。
http://canalize.jp/archives/008035.php

コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~
矢沢 久雄 日経ソフトウエア
日経BP社
売り上げランキング: 8,049
スポンサーリンク
レクタングル(大)広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
レクタングル(大)広告

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください