Minecraftサーバーを動かす知識

LinuxでSSDを使う時の設定

投稿:  更新:  By: HimaJyun

MinecraftサーバーにSSDを利用すると更なるパフォーマンス向上が期待できるでしょう。

LinuxでSSDを利用する場合はいくばくかの設定が必要になります。ここでは推奨される設定を紹介します。

必要な設定

TRIM(fstrim)を定期的に実行することと、I/Oスケジューラーを変更することは最低限必要でしょう。

とくにTRIMは書き込みのパフォーマンスに関わってくるので設定しておきましょう。

ファームウェアのアップデート

SSDのファームウェアアップデートが利用可能な場合はアップデートしておきましょう。

稀ではありますがデータが消失する系のバグがないとも言い切れませんので。

fstrimの有効化

TRIMはSSDの書き込みパフォーマンスを最大限発揮するために必要です。

TRIMを有効化する方法として/etc/fstabにマウントオプションとしてdiscardを追加する方法がありますが、現在はあまり推奨されていません。

その代わりに、systemdでfstrim.timerを有効にして定期的(デフォルトでは一週間おき)にtrimを実行するのが良いでしょう。

これは最近のWindowsの「ドライブの最適化(デフラグとも呼ばれる)」と似たような仕組みです。Windowsの場合もスケジュールで定期的にTRIMが実行されます。

fstrim.timerはsystemdに含まれています。必要なのはsystemctlで有効にすることだけです。

sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer

ちなみにfstrimコマンドを手動で実行してtrimを行うことも可能です。あまり意味はありませんが……

sudo fstrim -v /

I/Oスケジューラーの変更

ディスクの読み書きをする順番や優先度を制御するI/Oスケジューラーというものが存在します。

スケジューラーにはいくつか種類があり、HDD向けのスケジューラーをSSDで利用すると効率が悪かったりするため、SSDの場合はスケジューラーを確認して調整すると良いでしょう。

cat /sys/block/sda/queue/schedulerで現在設定されているI/Oスケジューラーを確認できます。(sdaの部分は対象のディスクを指定)

カーネルなどの設定によってシングルキュースケジューラーとマルチキュースケジューラーのどちらが使えるかが変わります。

シングルキュースケジューラーでは以下のスケジューラーが利用できます。

  • noop
  • deadline
  • cfq

マルチキュースケジューラーでは以下のスケジューラーが利用できます。

  • none
  • mq-deadline
  • bfq
  • kyber

SSDであればnoop(none)、deadline(mq-deadline)、kyberなどが、HDDであればdeadline(mq-deadline)かcfq(bfq)が推奨されるようです。

これらの設定は/etc/udev/rules.d/に設定ファイルを作成します。(例: /etc/udev/rules.d/60-schedulers.rules)

次の例ではNVMe SSDにnone、SATA SSDにmq-deadline、HDDにbfqを設定しています。

# NVMe SSD
ACTION=="add|change", KERNEL=="nvme*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
# SATA SSD
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
# HDD
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"

SSDの場合はcfq(bfq)以外であればあまりパフォーマンスは変わらないようです。

安定する(どのプロセスも同じくらいの待ち時間で応答が返る)のはdeadline(mq-deadline)、最大限のパフォーマンスが発揮されるのはnoop(none)のようです。

細かい設定

細かい設定もいくつかあります。しかし多くの場合は気にしても仕方のないような物ばかりなので、これらの設定は行わなくても問題にはならないでしょう。

これらの細かな設定で寿命が延びたところで、恐らくあなたは壊れる前により新しいSSDに買い替えたくなるはずです。

ファイルシステム

SSDを使用するのであればTRIMに対応したファイルシステムを選択する必要があります。

一般的によく使われているext4やXFSなどはTRIMに対応しているので、よほど風変わりなOSを選択したか、インストール時にファイルシステムを弄ったりでもしていない限りは気にしなくて構いません。

ちなみにBtrfsもTRIMに対応していますが、安定性に問題があるという報告が多く個人的には推奨しません。

パーティションのアライメント

HDDと同様にSSDでもパーティションのアライメントはきちんと整える必要があります。

ただ、最近のツールであれば基本的にその辺りをちゃんと設定してくれるので、よほどおかしな設定の仕方をしたりでもしない限りは気にしなくで大丈夫です。

気になる場合はblockdevコマンドで確認すると良いでしょう。

sudo blockdev --getalignoff /dev/sda1

sda1の部分は確認したいパーティションを指定してください。0と表示されれば問題ありません。

マウントオプションにrelatime

最近のOSであればマウントオプションのdefaults、つまりデフォルト設定にrelatimeが含まれています。(cat /proc/mountsで確認可能)

わざわざ設定する意味はないでしょう。もちろん設定することによる害もないので気になるのなら念のため設定しておいても構いませんが……

なおnoatimeは一部のアプリケーションで問題が起きることもあるので、「絶対に必要ない」という強い自信がある時以外は基本的にrelatimeを推奨します。(パフォーマンスはどちらも大差ありません)

swappinessの調整

/proc/sys/vm/swappiness(vm.swappiness)を調整することでswapを利用させないようにしてSSDへの書き込みを減らす、という手法があります。

しかし、十分な量のメモリが搭載されている場合はそこまで頻繁にswapが使われる訳でもないので気にする必要はないでしょう。

swapが頻繁に使用されている場合は検討してみてもいいでしょうが、問題になるほど使われていないのに設定するのは徒労です。

dirty_writeback_centisecsの調整

/proc/sys/vm/dirty_writeback_centisecs(vm.dirty_writeback_centisecs)を調整することでディスクキャッシュの同期頻度を減らしてSSDへの書き込みを減らす、という手法があります。

デフォルトは500(5秒)です、当然ですが長くすればするほど電源喪失などが起きた際に失われるデータが増えるでしょう。

調整しても構いませんが、個人的にはそこまでしてSSDの寿命を延ばす必要性が感じられないのでデフォルトのままにしています。

mlocateを停止する

/etc/cron.daily/mlocateなどでlocateコマンドで使用する検索インデックスを作成するためのupdatedbが毎日実行されていることがあります。

これはSSDに対する書き込みを生じさせるので、locateコマンドを使わないのであれば/etc/cron.daily/mlocateを削除して停止したり、/etc/cron.weeklyに移動させて頻度を減らすと良いでしょう。

もしくはmlocate自体を削除してしまっても構わないと思います。

sudo apt purge mlocate

もちろん、気にならないようであれば無視しても構いません。

Minecraftの設定

Minecraft側での調整です。

DynmapのデータをHDDに移動

Dynmapはマップのために大量の画像データを作成します。

もちろんそれらをSSDに保存すると閲覧時のパフォーマンスなどはとても向上するでしょう。

しかし、現実としてはDynmapの表示速度が速くても仕方がないですし、閲覧者側の回線速度などの関係であまり意味がありません。

MinecraftそのもののチャンクデータなどはSSDに保存するとチャンクロードが高速化する効果を期待できますが、Dynmapの画像データに関してはそこまで目立った恩恵はないでしょう。

そのため、サーバー上にHDDが接続されているのであればDynmapの画像データをそちらに移動させると良いでしょう。

保存先の移動に関してはDynmapの設定解説ページに記載しています。