Ramdisk で快適なPC環境を構築しよう!の巻

言うまでも無いが、データの読み書きは遅い。

特にデータベースに関わるプログラマならHDDの読み書きの遅さに辟易してることだろう。

今回は開発環境においていかにHDDへのアクセスを減らし、高速で快適な環境を作るかについて述べる。
今回の環境を作ったマシンのスペックは以下のとおり。

CPU Core i7 870
Mem 8GB
OS Windows7

それでは手順。

Baffaro Ramdisk をインストール

8GB のメモリ上に 2GB の Ramdisk を作成する。
http://buffalo.jp/download/driver/memory/ramdisk.html

他にも色々 Ramdisk 作成ツールはあるが、自動バックアップ & 起動時に自動レストアが非常に便利なのでこのツールを採用。自動バックアップと自動レストアのおかげで、Ramdisk を単なる高速なドライブとして利用できる。ここでは、仮にドライブレターを R: とする。

では Ramdisk を利用する準備が整ったら、I/O が多く発生する箇所を Ramdisk 上に配置していく。

システム一時フォルダを Ramdisk 上に移動する

R:\TEMP フォルダを作成し、Windows システム環境変数の TMP, TEMP を R:\TEMP に変更する。
同様にユーザー環境変数の TMP, TEMP を R:\TEMP にする。

ブラウザのユーザープロファイル、キャッシュを Ramdisk 上に置く

前提:ブラウザはGoogle Chrome を使っているものとする。

キャッシュとプロファイルデータを Ramdisk 上に置く。
C:\Users\USERNAME\AppData\Local\Google\Chrome を R:\ にコピーする。
次に、Google Chrome のショートカットを作成し、--user-data-dir="R:\Chrome" オプションをつけて起動する。

EclipseRamdisk 上に置く

起動が重い Eclipse だが、Ramdisk 上に置けばサクサク起動できる。
同様にワークスペースも Ramdisk 上に置く。
容量が許すなら、編集対象のソースコードRamdisk 上に置くべし。

ファイルをコピー後、Eclipse を起動してワークスペースをスイッチ、編集対象のソースコードRamdisk 上においたソースコードにすれば快適な Eclipse 生活が待っている。
重い環境だと入力補完の候補表示にタイムラグが出たりファイルサーチが遅いなどといった現象が出るが、全てがメモリ上に乗った環境だと全く重さを感じない。起動も一瞬で、操作を行なってもラグがでない。大変快適だ。

MySQL の datadir を Ramdisk 上に置く

Web アプリ開発を行なっているとどうしても手元の環境でデータベースを稼働させる事になり、
よく IO がボトルネックになってPCが重くなったりブラウザでページが表示されるまでに時間がかかってしまう。
これを解決するために MySQL の datadir, tmpdir を Ramdisk 上に配置する。

my.ini

[mysqld]
datadir                         = R:/MySQL/data/
innodb_data_home_dir            = R:/MySQL/data/
innodb_log_group_home_dir       = R:/MySQL/data/
tmpdir                          = R:/MySQL/tmp

注意点として、ibdata が大きくなりすぎないよう max サイズを指定する。

innodb_data_file_path           = ibdata1:10M:autoextend:max:300M

Evernote のデータベースを Ramdisk 上に置く

Evernote の Windows クライアントを利用しているとしばしばローカルのデータベースにアクセスしていることに気づく。Evernote はよく使うアプリなのでこれも Ramdisk 上に置く。
Evernote アプリ終了後、C:\Users\USERNAME\AppData\Local\Evernote\Evernote\Databases を R:\Evernote\ にコピー。Evernote アプリを起動してオプションからローカルファイルを変更し先程コピーした R:\Evernote\Databases を選択する。

Skype のデータログを Ramdisk 上に置く

Skype も頻繁にローカルのデータベースに対して読み書きを行なっているようだ。
これも Ramdisk 上へ置く。
Skype アプリ終了後、 C:\Users\USERNAME\AppData\Roaming\Skype R:\ にコピーする。コピー後、Skype アプリのショートカットを作成し、/datapath:"R:\Skype" を指定して起動する。

結果

以上で自分の環境では普段の操作中の HDD への I/O が激減した。特に、Eclipse を使ってソースコードを編集し、ブラウザで確認するといった頻繁に行う作業は一切HDDへのI/O無しになった。Eclipseソースコードもブラウザのキャッシュ保存場所もMySQLの実データもすべて Ramdisk 上なのだから、I/O が発生しようがない。

感想は、とにかく快適の一言に尽きる。精神衛生上も非常に良いし、HDD への読み書きが減るということは長寿命化にもつながるだろう。普段の操作程度ならば I/O メーターが上昇しないのは見てて大変心地が良い。


いずれもっとメモリが安くなれば、HDD は単なる永続化用の記憶装置で、普段PCを使う際のデータは Ramdisk 上においてあるということが一般的になるかもしれない。今考えている構想としては、もっと搭載メモリ量を増やして Ramdisk スペースを広げ、VMWare のような仮想マシンで動かすOSを Ramdisk 上に配置して稼働させるといった構想だ。なにせ OS すべての IO がメモリ上で行われるのだから、速いに決まっている。

欠点として、突然のシャットダウン等の不慮の事故時に Ramdisk 上のデータが消えること。しかしそれでもこの快適さを考えれば十分ペイできるだろう。突然のシャットダウンなんて本当にごく稀にしか起こらないし、Buffaro RAMDISK ユーティリティなら定期的にバックアップすることもできる。

その他自分の環境では頻繁にI/Oが発生するようなソフトはVMWarePlayerを除いて他になかったが、環境は個人ごとに大きく異なるのでクリティカルな部分のみを Ramdisk に移すことで大きな効果が得られるだろう。
ちなみに I/O 監視は ProcessMonitor がオススメ。

最後に

自己責任で。