Top > Memo >

portageのテンポラリディレクトリをtmpfsにしてみた on Gentoo

Saturday, December 10, 2011 02:37 UTC

最近ひどくメモリが安くなっているので、つい、今使っているマザーボードの限界である16GBまでメモリを増設してしまった。

メモリを余るほど増設して、とりあえずやってみたかったのは、Portage TMPDIR on tmpfsにあるように、/var/tmp/portageをtmpfsにすること。

これで、ビルド時のDisk I/Oが減ってemergeがいくらか早くなるはず。

/etc/fstab

tmpfs  /var/tmp/portage tmpfs  size=12G  0 0

通常/var/tmp/portageをtmpfsにする場合、メモリに割り当てられる容量がそれほど大きくはないため、ビルド時に大量の中間ファイルを生成するOpenOfficeなどは別のディレクトリを指定するなどの回避策をするのだけれども、OpenOfficeでさえ10GBぐらいって事なので、12GB指定しておけば多分その必要はなさそう。

tmpfsは12GBとサイズ指定したからといってその場でメモリを占有するわけではなく、使っている分だけ占有するので結構大きめに指定しても問題ない。

試しにFirefoxをemergeしてみた。
以下splatの結果。前者がtmpfsにする前、後者がtmpfsにした後にビルドした結果。

# splat firefox
...
 * www-client/firefox-8.0
  Emerged at: ...
  Build time: 21 minutes, and 51 seconds

  Emerged at: ...
  Build time: 20 minutes, and 33 seconds

あぅ…全然変わりない…(--;)
ビルド時はCPUが100%なので、もはやCPUがボトルネックになっていて、ディスクI/Oの差は微々たるもののようだ。
ちなみに、firefox-8.0の場合、/var/tmp/portageの使用量は最大で3.15GBぐらいになった。

まぁ、前向きに考えると、

  • /var/tmp/portageをtmpfsにする
  • PORTAGE_NICENESSを指定して、emergeの優先度を下げる

をしておけば、
ディスクI/OもCPUもemergeに邪魔されないので、裏で思いっきりemergeを行っていても、普通にマシンを"快適に"利用できるはず…

さらには、メモリを無駄に増量させた恩恵として、Linuxファイルシステムのキャッシュ機構が効いてくるってのもある。

Linuxでは、空いているメモリを空いていれば空いている分だけファイルシステムのキャッシュとして利用するので、一度キャッシュに入ったファイルへのI/Oは速くなる。

これだけメモリが余っていると、長く使っていればいるだけ多くのファイルがキャッシュに入るので、ほとんどのアプリケーションの2回目以降の起動は、体感的にかなり早くなるという状況になる。

わざと色んなアプリや仮想マシンを起動/終了したりしてみた。

$ free -m
             total       used       free     shared    buffers     cached
Mem:         15805      11235       4569          0        309       9779
-/+ buffers/cache:       1146      14659
Swap:         2055          0       2055

実際のメモリ使用量は1GBちょっとに対し、ページキャッシュが10GB近くに(^^;
ってことで、16GBのメモリ購入は無駄ではなかったと自分に言い聞かせてみる…
何かもっと有効な使い道ないかなぁ…

キャッシュ消えちゃうから、あまりシャットダウンしたくなくなるな…

あとは、SSDも導入したら完璧か…