純規の暇人趣味ブログ

広くて浅い知識の湖

MinecraftをRAMディスク上に移動してラグを減らそう!!

      2016/10/21    HimaJyun

みなさん、Minecraft楽しんでますか?

プレイするにあたって、fpsを気にする方も多いと思いますが、ディスクIO(ディスクの読み書き)を気にした事はありますか?

Minecraftをプレイ時のラグの改善において、CPUやGPUばかりが見られがちですが、ディスクIOも「快適にプレイする」ためには重要なカギを握っています。

「マイクラ鯖 Ramdisk」とかで検索して来られる方がちょくちょく引っ掛かっているみたいですが、以下の説明はWindowsでのモノです。

鯖と言えばLinuxでしょうから。「マイクラ鯖に持って来い!!、LinuxでRAMディスク!!」と言う記事を投稿しました、情報を美しくまとめましたのでご覧下さい。

実は大敵、ディスクI/O

確かに「処理」と言う意味合いでは当たり判定やライティング処理と言うのは重い部類なのですが、それ以上にPCの足を引っ張っているものがあります、そうです、ディスクI/Oです。

最近はHDDも十分に早くなりましたし、SSDも低廉化が進みました。

しかし、いくら早いと言えど、やはりメモリに比べりゃどどど鈍足なのです。

と言うか、メモリだってCPUから見れば超遅いんですよ、だからそれを補うためのレジスタが備わっている訳です。

カックンクラフト

ご存知かと思われますが、Minecraftは「チャンク」と言う単位でデータを処理しています。

と言う事は、遠くへ行けば行くほど新たなチャンクが読み込まれていく訳です。

私の普段使いのPCはシステムドライブとしてSSDを積んでいるのですが、やはりチャンクをロードする際には引っ掛かる様なラグがあります。

引っ掛かる様なラグは大抵がディスク周りの原因である事が多く、何より、私が運営するRAMディスク稼働のAMiTサーバに入ったら、そう言う「引っ掛かる様な」ラグはありません。

私のPCが性能不足であるとは考えづらいですね、ディスクI/Oの処理で引っ掛かっているとみて良いでしょう。

ならば簡単、普段使いのPCもRAMディスクにしてしまえば良い。

お約束

と言う訳でやって行くのですが、RAMディスクは割と高度でデリケートな代物です。

自己責任」でお願いしますよ、「てめぇの所為で彼女のPCのデータ消えたぞゴルァ!!愛の思い出どうしてくれんねん!!」とか言われてもどうしようもないし、しったこっちゃありません。

少なくとも「俺のPCメモリ1T~」なんて言ってる奴はやめとけとしか、そもそも「T」を読めない奴は絶対にやるなとしか。

それから、「バックアップ」忘れずにね。

バックアップがあれば極論データぶっ飛んでも大丈夫!!

搭載メモリは8Gほどあれば足りるかな?と思います。メモリが足りないならば買い足しましょう。(少ないメモリでのRAMディスク化は却って全体を低速化させる原因になります)

RAMディスクを作成する

まず、今回使うソフトである、SoftPerfect RAM DiskをDLしてインストールしておきましょう。

ちなみに、インストールしても、デスクトップにショートカットが作成されませんでした。

インストール先を自力で見つけられない方は技量不足です、やめておきましょう。

まずは作成

起動したら、まずはイメージの作成をクリック!!
play_minecraft_in_ramdisk-001

設定が出来たら「イメージファイル名(必須)」の部分の黄色いフォルダのアイコンをクリックして、イメージファイルの保存先を指定して下さい。
play_minecraft_in_ramdisk-002 ファイルシステムは「NTFS」、ボリュームラベルは適当にお好きな様にどうぞ。

サイズは用途に合わせて設定して下さい、余程MOD入れまくってるとかでもない限りは1GBほどあれば十分かと思われます。

この「イメージファイル」と言うのは所謂バックアップです。

RAMディスク自体の速度には関係ないのと、設定したサイズのイメージが生成される(3Gで設定したなら3Gのイメージファイルが生成される)のでHDDに保存する事を推奨します。
play_minecraft_in_ramdisk-003SSDは空き容量が低下すると低速化する傾向があるのであまりお勧めしません。

また、ベースが海外のソフトなので、イメージファイル名は半角英数字にしておくと確実です。

こう言う特殊な用途で日本語(2バイト文字)のファイルパスにするのは禁じ手でしょう。

この際に、保存先としてダイナミックディスクになっているHDDを選ぶとデータが飛ぶ、と言う話を聞いた事があります、ベーシックディスクのHDDで利用しましょう。

設定が出来たらOKを押すと作成されます。

サイズによっては結構時間が掛るので、途中でプログラムの応答が無くなっても強制終了したりしないで下さい。

マウントする

イメージファイルの作成が完了したら、次は画像の様にプラスマークの部分をクリックしましょう。
play_minecraft_in_ramdisk-004

先程と同じように、フォルダの所をクリックして……
play_minecraft_in_ramdisk-005

先程作成したイメージファイルを選択
play_minecraft_in_ramdisk-006

ドライブ名などはお好きな様にどうぞ、今回はRAMディスクなので分かりやすい様に「R」とでもしておきます。

「RAMディスクの内容をイメージに保存する(S)」にチェックを入れて、「高度な設定」を押してください
play_minecraft_in_ramdisk-007

イメージオプションの「時間(分)ごとにイメージを保存する」にチェックを入れて、保存する間隔を指定します。
play_minecraft_in_ramdisk-008

こうする事で、定期的に作成したイメージファイルへとデータがコピーされます。

不意の停電やクラッシュでもデータを失わずに済むみたいです。

設定時間はお好きなようにどうぞ、単位は(分)です、ただ、あんまり短すぎるとディスクの寿命が削られるかもなので程々にしましょう。

OKを押すと自動でマウントされます。
play_minecraft_in_ramdisk-009play_minecraft_in_ramdisk-010

完了したら正常に作成されたか確認して下さい、出来てますね?読み書き出来ますね?、出来ない時はフォーマットしてみましょう。

これでRAMディスクの設定は完了です。

試しに新しいフォルダでも作成してみたり、要らないデータを作ってみたりして、PCを再起動してみて下さい。

きっと消えていないはずです。

速度測定

早いと言うからには本当に速いのかが気になります。

と言う訳で測定してみようと思います、今回使用したのは「CrystalDiskMark 5.2.0」です、定番の奴ですね。

まず最初に、良くある普通のHDD(WD Red 3T)
play_minecraft_in_ramdisk-011まぁまぁ普通に良くある測定結果ですね。

次に、早いと話題のSSD(CFD(TOSHIBA) 256GB)
play_minecraft_in_ramdisk-012HDDと比べると目を見張るものがあります。それでもやはりカックンクラフトです(どちらかと言うと読書速度より応答速度の速さが関係しているのですが)

さて、今回の目的、RAMディスク(CFD DDR3)
play_minecraft_in_ramdisk-013今回、都合から仮想環境に構築したWindowsで試しているのでこの程度ですが、実際のマシンで試すとSeqと512Kが4000MB/s近く叩き出せます。

少し不利な条件の仮想環境下でのRAMディスクでも恐ろしく早く、SSDなんてカタツムリです。

データをRAMディスクに移す

それでは、肝心のRAMディスクから起動する方法ですが。

マイクラのランチャーを起動してEditProfileをクリックします。
play_minecraft_in_ramdisk-014

次に、GameDirectoryをRamディスクに変更します、今回の場合は「R:\.minecraft」ですね。
play_minecraft_in_ramdisk-015その後、「Save Profile」をクリックし、設定を保存します。

後は普通に起動して下さい。

また、ゲームフォルダを変更できるランチャーであれば、非公式のランチャーでも出来ますよ!!

高度な手法として、シンボリックリンクを作成する手法があるのですが、この手法と比べて手間が掛かる割に出来る事は同じなので省略します。

実際に起動してみてください!!目に見えない違いが出てくると思います。

追記(JVMの起動オプション)

米欄にて要望があったので、私のJVMのオプションです。

-server -Xms8G -Xmx8G -XX:MetaspaceSize=512M -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+DisableExplicitGC -XX:+UseCompressedOops -XX:+OptimizeStringConcat -XX:+UseTLAB

Java8から追加されたG1GCなどを使用してGCでの停止時間を最小にするように工夫しています。

オプションの各項目については以下の通り。

  • -server:サーバ用VMで起動する。(64bitJVMだとデフォルトだそうですが、念のため。)
  • -Xmx8G:最大割り当てメモリを8GBに
  • -Xms8G:最小割り当てメモリを8Gに(-Xmxと同じ値を指定した方が割り当ての再計算が減って高速らしいです。)
  • -XX:MetaspaceSize:Java8からの新機能、従来までのPermSizeと置き換わった(設定しなくても大丈夫だとは思います)
  • -XX:+UseG1GC:G1GCと言うガーベージコレクタを使用しています。
  • -XX:+UseStringDeduplication:重複している文字列をまとめてメモリ効率を上げています。
  • -XX:+DisableExplicitGC:ソフトウェアからのGC呼び出しを禁止しています。
  • -XX:+UseCompressedOops:64bit環境にて、メモリの扱い方を最適化しています、デフォルトで調整されるので設定しなくて構いません
  • -XX:+OptimizeStringConcat:文字列結合の処理を最適化しています。
  • -XX:+UseTLAB:同時実行性が向上する様です、大差ないかも知れませんが、一応設定。

 - ゲーム