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を使用しました。

結果は以下の通りになりました。
2015-01-23-speed.png

どれをとっても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のビルドをここで行うのは良い案と思われる
      • ログが残らないので、成果物の保存はよく考える必要あり
  • 当然ながら空きメモリ容量を消費するので、余っていない場合は注意