tmpfsのデフォルト最大値は搭載実メモリの半分

■vmwareでは、shmmaxMinValueが256MBかどうかチェックしている。

 vmwareのinitスクリプト修正for Squeeze
 http://d.hatena.ne.jp/labunix/20120114

$ grep -i shm /etc/init.d/vmware | head -3
# SHM settings
shmmaxPath=/proc/sys/kernel/shmmax
shmmaxMinValue=268435456 # 256MB

■ゲストOSを終了してもキャッシュメモリはクリアされないのに何故だろう。
 ※ゲストOS終了後、手動でキャッシュクリアをするか
  システムの再起動を行うまでキャッシュクリアされない。

 MRTGでディスクIO、メモリキャッシュの情報取得
 http://d.hatena.ne.jp/labunix/?of=2

■今の所、他に自動でキャッシュクリアされるような仕組みは見つかっていない。
 MRTGのグラフには直ぐ出るので、手動でキャッシュクリアをしたかしないかぐらいは分かる。

■「/dev/shm」について

 参考:tmpfsが/dev/shmをマウントしている件
 http://d.hatena.ne.jp/rsyudo/20070429/P1

 参考:tmpfs は本当に容量が動的なのか
 http://d.hatena.ne.jp/naoya/20060217/1140176470

 参考:RAMディスクのIO性能をチューニングに活用すべし (/dev/shm)
 http://hesonogoma.com/linux/RAMDiskPerformance.html

 参考:容量が動的に変化するRAMディスクを使うには
 http://www.atmarkit.co.jp/flinux/rensai/linuxtips/277usetmpfs.html

■ホストOSのtmpfsを調べてみた。
 システムが割り当てるので搭載しているメモリサイズに依存する

★Lenny
$ LANG=C df -k | head -1;df -k | grep tmpfs
Filesystem           1K-blocks      Used Available Use% Mounted on
tmpfs                   998600         0    998600   0% /lib/init/rw
tmpfs                   998600         0    998600   0% /dev/shm

★Squeeze
$ LANG=C df -k | head -1;df -k | grep tmpfs
Filesystem           1K-blocks      Used Available Use% Mounted on
tmpfs                  2013136         0   2013136   0% /lib/init/rw
tmpfs                  2013136         0   2013136   0% /dev/shm

■搭載メモリの半分を当てているようだ。

★Lenny
$ free | grep Mem | awk '{print $2/2}'
998600

★Squeeze
$ free | grep Mem | awk '{print $2/2}'
2013136

■指定方法については、リンクを参照するものとして、
 デフォルトはシステム規定値のようだ。

 参考:/lib/init/rw と /dev/shm の tmpfs のサイズを変える Linux
 http://sato-si.at.webry.info/200711/article_1.html

$ cat /etc/default/tmpfs | grep -v ^#
SHM_SIZE=

■普通にmanマニュアルがある。

$ apropos shm | grep -v ^X
shm_open (3)         - POSIX 共有メモリ・オブジェクトの作成/...
shm_overview (7)     - POSIX 共有メモリの概要
shm_unlink (3)       - POSIX 共有メモリ・オブジェクトの作成/...
shmat (2)            - 共有メモリ (shared memory) の操作
shmctl (2)           - 共有メモリ (shared memory) を制御する
shmdt (2)            - 共有メモリ (shared memory) の操作
shmget (2)           - 共有メモリ・セグメントを割り当てる
shmop (2)            - 共有メモリ (shared memory) の操作

■で、詳細はカーネルのドキュメント「Documentation/vm/hugetlbpage.txt」を参照と出てくるので、
 なるほどデフォルトの最小値の指定はずばりの値が見つかった。

$ apt-cache search linux-doc | grep -i kernel
linux-doc-2.6.32 - Linux kernel specific documentation for version 2.6.32
linux-manual-2.6.32 - Linux kernel API manual pages for version 2.6.32

$ LANG=C apt-cache show linux-doc-2.6.32 | grep Document | uniq
 /usr/share/doc/linux-doc-2.6.32/Documentation/00-INDEX for the detailed

$ lv -s /usr/share/doc/linux-doc-2.6.32/Documentation/vm/hugetlbpage.txt.gz | \
  grep -B 3 268435456
 * Note: The default shared memory limit is quite low on many kernels,
 * you may need to increase it via:
 *
 * echo 268435456 > /proc/sys/kernel/shmmax

■以下のよう設定されている。

$ grep [0-9] /proc/sys/kernel/shm* | \
   awk -F\: '{print $1 ":" $2 ": = " $2/1024 "KB"}'
/proc/sys/kernel/shmall:2097152: = 2048KB
/proc/sys/kernel/shmmax:268435456: = 262144KB
/proc/sys/kernel/shmmni:4096: = 4KB

■以下の通り、搭載メモリの半分を設定するのがデフォルト。

$ lv -s /usr/share/doc/linux-doc-2.6.32/Documentation/filesystems/tmpfs.txt.gz | \
   grep -B 3 'size=50%' --color
These parameters accept a suffix k, m or g for kilo, mega and giga and
can be changed on remount.  The size parameter also accepts a suffix %
to limit this tmpfs instance to that percentage of your physical RAM:
the default, when neither size nor nr_blocks is specified, is size=50%