2010年11月6日

MacOSXでRAMディスク上にブラウザのキャッシュを割り当てる

MacBook Pro 15(Late 2008)は公式では最大メモリ容量は4Gまでサポートなのだが、ファームウェアを最新のアップデート(MacBook Pro EFI ファームウェア・アップデート 1.8)を適用すれば、最大 8G まで普通に認識し速度低下せずに使えるそうである。

2009年末位には結構高価だったのだが、最近値下がりして手ごろになってきたので、交換した。 次いで HDD も交換して SSD (TOSHIBA THNS256GG8BBAA)に入れ替えた。

まぁ、SSD に入れ替えたお陰でOSの起動もアプリの起動も機敏で、いい感じ。

空きメモリが増えてたので、ちょっと1Gくらいブラウザのキャッシュに割り当ててみた。

MacOSX では「hdid」コマンドを使えば簡単にRAMディスクを作成できる。

ramlabel="RamDisk"
ramdev=$(hdid -nomount ram://10240)
diskutil eraseDisk HFS+ ${ramlabel} ${ramdev}
で、コイツを rc.localに仕込んでやれば、起動時にRAMディスクを作成できる。

なぜか上手く行かない。起動後に手打ちで入力すれば、出来るのだが、、、

はて、なんでだろうかぁ?

まぁ、ググっても明快な正解がわからない。。。

当てずっぽに答えれば、『「hdiejectd」デーモンが起動して、正常に定常状態に無いときには「hdid」は機能しない』っぽいのかなぁ。。。多分 SSD で起動が拙速になったからだと思うが、、、

上記の憶測のもとに rc.local を次のようにすれば、起動直後にユーザ用にRAMディスクに載ってる作業領域が作れるようになる。

#!/bin/sh

RAMSIZE=1024 # MBtyes
MP=/tmp/ramdisk
MYNAME=username

# Start hdiXXX
launchctl start com.apple.hdiejectd

sleep 5

# Make RamDIsk
RAMNUMSECTORS=$((${RAMSIZE}*2048))
ramdev=$(hdid -verbose -kernel -nomount ram://${RAMNUMSECTORS})
newfs_hfs -v ramdisk $ramdev
[ -d ${MP} ] || mkdir ${MP}
mount -t hfs -o nobrowse $ramdev ${MP}
# Finder.appで /Volume 以下で参照したいときは nobrowse を外す

# for ${MYNAME}
mkdir ${MP}/${MYNAME}
chown -R ${MYNAME}:${MYNAME} ${MP}/${MYNAME}

あとは、ログイン項目に、次のような キャッシュを調節するシェルスクリプトを埋め込んだ Automator アプリを登録すれば良い。

まぁ、サクサクになったのかなぁ?

追記 (2010/11/06)

コードをちょっとだけ整理して、Xcode と TMPDIR もRAMDISKにのせてみた。

追記 (2010/12/23)

TMPDIR もRAMDISKに載せると、どうも ramdisk のアクセス出来ない現象が時々発生し、キャッシュを載せている Chromeなどのブラウザが固まって、まともに使えない結果になる。。。どうも TMPDIR は ramdisk に載せて運用するのは難しそうである。仕方がないので、設定を削除してみた。。。ここ1ヶ月は、安定してるっぽいので正解かな。。。

0 件のコメント:

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...