純規の暇人趣味ブログ

首を突っ込んで足を洗う

[検証]MinecraftサーバをHDDで動かしても問題ない?

      HimaJyun

「Minecraftサーバはramdiskで動かす」、これはもはや「おまじない」みたいになっています(「#include <stdio.h>」みたいな?)

「じゃあ逆にHDDで動かしたらどうなんだよ?」ということで、それを検証すべく実際に運用しているサーバをHDD動作に変更してみました。

検証環境

私のサーバはピーク時に10人前後の小規模サーバです。

そのため、何十ものユーザが居る大規模サーバは考慮していませんし、そもそもそれくらいの大規模サーバなら自分で測定できるスキルはあるはずでしょう。

サーバ機はSATA3もないようなボロマシンです、そこに市販の3.5インチSATA HDDを繋いでいます。(SAS?知らねぇな)

メモリは半端にDDR3 12G、CPUは4C/4Tです。

構成

Spigot 1.11.2をJava8(OpenJDK)で動かしています。

他にMySQLが同居しています。

メモリはMinecraftに8Gを配分し、2Gをramdisk、残り2GをOS用としていました。

これを、Minecraftに8Gはそのまま、ramdiskの使用をやめ、空いた2GをOSに加える、つまりOS用に4Gを空けておくようにしました。

HDDで動作させることによって速度は遅くなりますが、ramdiskに割り当てていた分がOSに行くので、OS側のディスクキャッシュにデータが乗ってそこまで大きな影響は出ないだろう、という予想です。

検証

Zabbixを使用して、ディスクIO、メモリの内訳、TPSの変動、CPUのI/O Wait辺りを観察。

Zabbixの都合で数値に合わせてスケールが変わるため、グラフの線よりも数値の方を見た方が正確です。

実運用サーバなので人の有無や動き方によっても結構変わってきます、最大値と平均値を併せて見た方が良いかな?

プレイヤー数

比較対象になる2つの期間(4/4の07:00~13:00(ramdisk)と18:00~4/5 00:00(HDD))のプレイヤー数は以下の通りです。

ramdisk(4/4 07:00~13:00)

HDD(4/4 18:00~4/5 00:00)

だいたい同じくらいのユーザ数になるデータを選んだつもりではあります。

ディスクI/O

単位はセクタ/秒です。

ramdisk

HDD

I/Oは確かに増えています。

ユーザ数やMySQLの読み書きもありますが、倍率的に言うとreadの増加が激しいようです。

メモリ

消費メモリです。

ramdisk

HDD

swapが減っているのは再起動を掛けたからだと思うので無関係(ちなみにswap自体はメモリ不足ではなく、使われていないプロセスを逃がしてるだけだと思われ)

ramdisk(tmpfs)はCached(青)扱いになるので、見た目には変わりませんがHDD化した後からCachedが定期的に減るようになりました。

Usedが増えている理由は不明、MySQLとかかな……?

「空けたメモリをディスクキャッシュに使わせる」という意図通り、一応ディスクキャッシュには乗っているみたいです。

CPU

注目すべきはI/O Wait(黄)だと思います。

ramdisk

HDD

気持ち程度I/O Waitが増えた気がします、ただ、これはユーザの行動による物の可能性も考えられるのでCPU周りにはほぼほぼ無関係そうです。

(というか常時80%以上遊んでるとかもったいねー……)

TPS

TPSです。

TPSを知らない人向けに説明すると、TPSはTicks Per Secondの事で読んで字の如く「1秒あたりのtick数」

1秒20tick、すなわち1tickが50msで、60fpsのゲームだと3フレームほどです。

負荷によっては処理が間に合わずに1秒が20tick以下になったり、逆に遅れを取り戻すために20tick以上になったりします。

すなわち、より20tickに近い方が安定して快適、という訳です。

ramdisk

HDD

こちらはramdiskとHDDで動き方の変化みたいなものはありません。

つまりramdiskかHDDか、というのはMinecraftの処理そのものの負荷には関係なさそうです。

体感

体感テスト、ということでユーザへのアンケートも実施してみましたが、「いつもと変わらない」という意見でした。

精々数人から取った個人の感覚的による物なのでもちろん信憑性はあまりありませんが、個人的にも「ほぼ」いつもと変わらない感じでした。

「ほぼ」とした理由ですが、「少しチャンクロードが遅いかな」という印象は受けました。

ただ、エリトラやトロッコなんかで高速移動しないと目立たない違いなので、普通に移動する分には何も影響はない感じです。

結果

小~中規模程度のサーバであれば、HDDで動かしても負荷への影響は小さそうです。

大規模なサーバでもM.2 SSDを使うとか、ディスクキャッシュ用のメモリを沢山積めば行けそうです。

という訳で私のサーバではHDDで動作するように変更し、資源マップを無限サイズにしました、シュルカーボックスの価値が大暴落しました、ワロス。

 - サーバ運営