RAMディスクでiOSのビルド時間を短くする
まとめ
- RAMディスクを作ってビルドすると早くなる
- SSD上でビルドすると9分
- RAMディスクでビルドすると6分
- Androidは未検証だが同じと思われる
- Macだととても簡単にRAMディスクが作れる
- Jenkins等、ビルドが主目的の場合に有効と思われる
- メモリが余っているならやる価値はある
Mac OS XでのRAMディスク作成
Macではhdidコマンドを使うことで、メモリ領域をディスクとして使用することが出来ます。
メモリはSSDと比べても遙かに早く、R/Wの激しい処理にうってつけです。
また、rootでなくても作成できるため、非常に便利です
ディスク作成手順
2つコマンドを実行するだけです。
hdid -nomount ram://4096000
# 指定した容量でRAMディスクが作成されます。
# /dev/disk2等作成された場所が返ります。
# ファイルシステムがないためマウントは失敗します。
# そのため、-nomuntをつけています。
diskutil eraseDisk HFS+ RAM /dev/disk2
# 先ほど作成したディスク(/dev/disk2)をHFSでフォーマットします
# さらに、RAMという名前でマウントします。
# これにより、/Volumes/RAMでアクセスできるようになります。
hdiutil detach disk2
# 作成したディスクをアンマウントして削除します
# ディスクは消滅するのでご注意ください
# diskutil unmountDisk
# diskutil eject
# の組み合わせと同じですが、コマンド一つになるため楽です
速度比較
Mac Book Air 13-inch Mid 2013のSSDと速度比較しました。
速度計測にはXbenchを使用しました。
結果は以下の通りになりました。
どれをとってもRAMディスクの方が圧倒的に早い結果になりました。
ブロックサイズが小さいwriteの場合は2倍程度になっていますが、それ以外は5倍〜10倍以上の差がついています。
ビルド時間比較
性能的には以上の通りですが、実際にビルド時間にはどれほど影響があるかを調べてみました。
比較にはcocos2d-x-sampleを利用しました。
ビルドにはshenzhenを利用し、コマンドラインからiOSのクリーンビルドを行いました。
残念ながら証明書が無いためipaを作成することが出来ず、
かつその場合にshenzhenが何故か終了せず、timeコマンド等で正確な時間計測が出来ませんでした。
timeコマンドを使い手作業で計ったところ、SSD上では9分13秒、RAMディスク上では6分01秒とうい結果になりました。
手計測による誤差はせいぜい数秒低度なため、3分以上早くなっているのは確実と言えます。
その他
- R/Wの性能は5倍〜10倍と凄く高速になっている
- ビルド時間は30%ぐらい減った
- ただし、プロジェクトによっては差異があると思われる
- CPUやメモリの影響もあるため、R/Wの性能向上がそのまま反映されるわけではない
- 電源を切ると消えるので使い道は慎重に
- 開発用よりもビルド専用に使った方が安心
- Jenkinsのビルドをここで行うのは良い案と思われる
- ログが残らないので、成果物の保存はよく考える必要あり
- 当然ながら空きメモリ容量を消費するので、余っていない場合は注意