Armadilloフォーラム

/dev/は最低何バイトの容量が必要か?

yanagihara

2014年2月7日 12時43分

お世話になります、柳原です。

/dev/にはtmpfsなRAMディスクがマウントされますが、sizeオプションで
上限を設けたい場合、最低何バイト割り当てるべきかを見積もる方法
はありませんでしょうか?

sizeオプションが無いとメモリの半分(Armadillo-440では64MB)が
割り当てられます。一方、現状の使用量をdfで確認したところ4kB
しか使っていません。

なお「tmpfsは動的にRAMを消費するので制限が64MBでもOS作業
エリアとしてのメモリ容量がすぐさま逼迫しないから問題無し」といった
ご回答はご遠慮致します。

コメント

こんにちは。

> /dev/にはtmpfsなRAMディスクがマウントされますが、sizeオプションで
> 上限を設けたい場合、最低何バイト割り当てるべきかを見積もる方法
> はありませんでしょうか?

device node file だけという前提で、
2つアイディアを出してみます

- 長期ランニング試験や負荷試験の後に、実測する
- device node ひとつのサイズを実測し、必要なデバイス数をかけ算

どうでしょう?

柳原です。

> - device node ひとつのサイズを実測し、必要なデバイス数をかけ算
/dev/にあるスペシャルファイルをlsやduで見てもサイズがゼロと表示されてしまう
のですが、「device node ひとつのサイズを実測」というのは、具体的にはどう
いった手法を意図されていますか?

tmpfs の場合、HDDやSSDのような二次記憶装置があるわけではなく、すべてカー
ネルのメモリ内のデーターになります。そのため、device node を作成した後
のメモリ使用量の増加分を計算するしか方法がありません。

free や /proc/meminfo を利用しても良いですが、/proc/slabinfo の
shmem_inode_cache を参考にするのが良いかもしれません。

というのも、tmpfs上で mknodを呼び出した場合

shmem_mknod()
  -> shmem_get_inode()
     -> new_inode()
        -> new_inode_pseudo()             /* 新しいカーネルだけ */
           -> alloc_inode()
              -> shmem_alloc_inode()
                 -> kmem_cache_alloc(shmem_inode_cachep, GFP_KERNEL);

と遷移するからです。