[Folia]MinecraftServerをマルチコアで動かす

マインクラフトサーバー

Foliaとは

Minecraftサーバーの一種で、プレイヤーの負荷分散と並列処理を最適化することを目的としている。PaperMCの一部ではなく独立したプロジェクトとして開発されている。

Foliaの特徴

独立した領域の形成

近くのロードされたチャンクをグループ化し、独立した領域を作る。各領域には独自のティックループがあり、20TPSで実行される。全チャンクをシングルスレッドで処理するのではなく、複数チャンクをグループ化してグループごとに並列処理することでマルチコアで動かせるようにしている。

ティックループってなに

Minecraftのゲームエンジンが一定の間隔で実行する処理サイクル。ゲームのロジックや状態更新を管理する。エンティティやブロック、物理演算の更新、レンダリングの更新、ネットワークの同期など。マイクラは20TPS(50ms/1TPS)で実行する。

ティックループを独立した領域ごとに分割し、並列処理することで、サーバーのパフォーマンスを向上している。

並列処理

各領域のティックループはスレッドプールで並列して実行される。大規模なプレイヤーがいるサーバーやプレイヤーが広範囲に散らばっているサーバーに対して効果的。

恩恵を受けるサーバー

Skyblockやサバイバルマルチサーバーは、プレイヤーが広範囲に散らばるので恩恵を受けやすい。人がたくさんいる大規模なサーバーも。

Foliaに最適なハードウェア

理想的には16コア以上(スレッドではなくコア)が適切。つまりたくさんコアを積んでいるマシン(Xeonなど)で動かすのに最適。

Spigotやpaperはシングルスレッドで動作するため、サーバーに求められるのはコア数ではなく動作周波数。なのでXeonのような多コア低動作周波数のようなマシンではパフォーマンスが落ちる。Foliaは各領域は独自のスレッドで処理されるため、メインスレッドのボトルネックが解消される。あとプラグインも別スレッドで動作するっぽいのでマップ系プラグインをフル稼働させてもゲーム自体は重くならない。。。はず。

実行環境

今回用意した環境

マシン NEC Express5800/R120g-1E N8100-2428Y(ヤフオクにて落札)
CPU E5-2630 V4 ×2基 (ベース2.20GHz, ターボ3.20GHz,10C20T ×2基 = 20C40T)
メモリ 64GB DDR4
SSD 240G SATA
HDD 1TB SATA
ネットワーク 宅内1G
Internet フレッツ光 1G

基盤 Proxmox
実際に生活サーバーを運営しているVMの割当
OS Ubuntu server
コア割当 26core(13c26t)
メモリ割当 35GB
SSD OS他 キャッシュ有
HDD マップ保存用 キャッシュ有

今回ブログ記事で動かす環境
OS Ubuntu
コア 20c(10c20t)
メモリ 24GB
HDD キャッシュwrite back

構築

注記 このやり方は2024年5月時点でのやり方です。

javaインストール

sudo apt install openjdk-17-jre-headless

Foliaをダウンロード
Gitからクローンする

 git clone https://github.com/PaperMC/Folia.git

ダウンロードしたフォルダに移動

 cd Folia

起動.jarを自分でビルドする必要があるのでビルドする。
パッチ適応

./gradlew applyPatches

初回は失敗することがある。赤線で囲った文字列が出てきたら、Githubをアカウントを登録する必要がある。

以下の2つのコマンドを入力

 git config --global user.email "[email protected]メールアドレス" 
 git config --global user.name "Your Nameアカウント名"

再度./gradlew applyPatches を実行
BUILD SUCCESSFULと出れば成功

次にjarファイルを作成する。これまた時間がかかるので待機。

./gradlew createReobfBundlerJar

完成したjarファイルは、~\Folia\build\libs\にあるので実行したいフォルダに移動する。

homeディレクトリにserverフォルダを作成

cd
mkdir server

移動

cp /home/mina/Folia/build/libs/folia-bundler-1.20.4-R0.1-SNAPSHOT-reobf.jar /home/mina/server

start.shを作成。細かいことはよくわからないので最小構成で。メモリは20GB割り当てた。

java -jar -Xms20G -Xmx20G folia-bundler-1.20.4-R0.1-SNAPSHOT-reobf.jar

権限変更

sudo chmod 775 start.sh
./start.sh

Failed to load eula.txtと出るので、eula.txtのfalseをtrueに変更。再度実行。
諸事情によりサーバーポートを50000に変更しています。

マイクラでアクセスしてみて入れたら成功です。

/tpsで負荷を見れます。サバイバル1ヶ月半、同接プレイヤー3人いるサーバーの例です。
max7人いたときも快適にプレイできていました。古いCPUなので完璧ではありませんが。
エンティティが1337もいるのでMSPTが少し高めですが、TPS20で動作は快適です。

プラグインについて

spigotプラグインが全て使えるわけではないので、対応表を出しておきます。ここから、対応しているプラグイン一覧を見れます。

GitHub - BlockhostOfficial/folia-plugins: List of popular plugins that support Folia - multithreaded PaperMC fork
List of popular plugins that support Folia - multithreaded PaperMC fork - BlockhostOfficial/folia-plugins

マッププラグインについて

有名なdynmapが対応していませんが、bluemapという別のマッププラグインが対応しているのでこれを使うことをおすすめします。レンダリングがマルチコアでできるだけでなく、このプラグインで使用できるコア数を指定できるので、ゲームと使用コアを分けることができます。実際に運用しているサーバーでは、26コア(13c26t)の内10コア(5c10t)をマップレンダリングに割り当てています。

立体的に見ることもできます。

動作周波数が高いCPUを使っているのであればSpigot,Paperでいいと思いますが、たくさんコアを積んだXeonのようなCPUでサーバーを立てたいときはFoliaがいいかもしれません。

よいマインクラフトライフを。

コメント

タイトルとURLをコピーしました