0コメント

Minecraft Java Edition サーバーソフトウェアで発狂した問題【読む価値なし前編】

今日は好き勝手愚痴らせてもらおう。日記でも愚痴ったが、マイクラでも愚痴りたいことが死ぬほどある。

では何を愚痴ろうか、ちなみにこの記事は別に誰かに見て欲しいわけではなく、ただの個人的なストレス発散である。見てて面白い要素は1ミリもない。


そうだな、最初に触れたサーバーソフト。がMinecraft公式が配布しているサーバーソフトウェアだな。一番無難だ。
そして何より公式が出しているという点、必ずマイクラのアップデートが来れば最新版対応のサーバーソフトウェアも同時に配布が開始される。アップデートが来た時の鯖アプデも超ラクなんだわ。

特に問題がなけりゃあコイツを使ってた。



・・・が。欠点があった。
プラグインが使えないことだ。こまごましたプラグインを使うのは割と強みになる。
更に、DiscordSRVでdiscordとのチャット共有機能とかもbukkit系でしか使用できない。

そこで登場したのがSpigot。滅茶苦茶推されていてかつ、ポピュラーなソフトウェアとして位置づけられている存在だ。公式サーバーをベースに動作しているようで、安定性も抜群。プラグインも使える、欠点がないとも思えた。

ていうか、公式サーバーソフトウェア使うならSpigotを使うデメリットは存在しない。と個人的には思っている。公式サーバーソフトウェアを使う必要は意味が見いだせるまで無いだろう。Spigotで充分だ。


しかしまあ、結局現在もSpigotで稼働させているのだが、公式サーバーソフトウェアがベースだといった。


Minecraft Java Editionは、CPUをシングルスレッドしか扱いきれなかったという話がある。突然藪から棒にハードウェアの話に飛んでしまうが、実際マイクラは超絶軽量ゲーム、Core2世代のPentiumだとかAMD Athlon 64とかのレベルでも動作するレベルから存在し対応していた。

その世代は1コアとかハイエンドで2コアなものがある、てな程度だったからかそれで十分だったのかマルチスレッド処理は対応していなかったのであろう

・・・と思う。Javaプログラムを実行するためにJVMってソフトウェアで仮想的に実行させるというJavaの仕組み上苦手としているのかも・・・あ、いやでもJVM引数でスレッド数指定できるから多分それは無いか。


マイクラがシングルスレッド処理前提のソフトウェアだったんだよね

ただ、Minecraft 1.8にてこの問題は解決された。4コア程度なら安定してマルチスレッド処理出来るみたいなことを聞いた

が。

どうやらMinecraft 1.16.4現在ですらサーバーソフトウェアではマルチスレッド処理には対応していないと聞いた。

実際そうで、12スレッド割り当てようが1スレッドしか高負荷時でも使用してくれずサーバーでラグが発生する、ping値が上がってしまう。

ので解決するためにマルチスレッド処理が出来るサーバーソフトウェアを使おうと。


で、例が2つ上がった
PaperとCuberiteだ。

PaperはSpigotベースのサーバーソフトウェア。マルチスレッド処理に対応しているらしいので実際に使ってみると、今までの比じゃなく重かった。バカ重かった。原因は不明だが、常に1スレッドの使用率がMAX。マルチスレッド処理の恩栄が受けられなかったのは、Paperはチャンク読み込みなどほんの一部の分野に限りマルチスレッド処理が出来るからだ。普通はこれでも十分恩栄はありそうだが私の場合functionで負荷を与えまくっているので、結果無意味、functionへの対応が苦手分野だったのか滅茶苦茶重くなるし。

ということでCuberiteも使ってみたのだが、こっちはJavaではなくC++で動作している。何が言いたいかというと、シェルスクリプトとかの互換性が怪しくなる。それはまだいい

基本コマンドが使えたり使えなかったりする。

開発言語が違う為、今までのマイクラとは異なる

・・・つまり、アプデも遅いわけで、現状1.12までしか対応していないし、fill等基本コマンドでも使えないものが存在したりするため、functionを使うのはおそらく言語道断であろう。


という訳で、解決策を具体的に見出す。
〇バージョンダウンして全く別耐性サーバーを製作する
・・・ってのは、余命3ヶ月の俺には時間が厳しいな
余命って言い方アレだが、4月からおそらく寮に入るんで家にいないんだよねwそれまでに作り上げたい。
〇ハイパースレッディングテクノロジーをオフにする

ってのはハードウェアにぶっ飛んでいくが、キャッシュミス(ヒット率の逆)の時キャッシュにないデータをレジスタに乗せるために発生するストール(レジスタに乗せる時間は処理が実行できない)を回避するためにもう片スレッドで処理を行うことで高速化する・・・という技術らしい。
愚痴だから自分でわかるようにしかもう書かないが、そのもう片スレッドで処理を行うって言うスーパースカラ的な方法で効率を上げるってのが
ハイパースレッディングテクノロジーだよね。

しかし!マイクラでは単スレッドでしか動作していない。
これはハイパースレッディングテクノロジーの恩栄を受けているのか・・・?受けてない気がする・・・
スクリーンショット 2020-12-25 032915.png

HTTが有効なので1-2の2スレッドで1コア、3-4の2スレッドで1コア、ってのは分かる
このCPUは6コア12スレッド動作だからね。
まあ見ての通りシングルスレッドしか使いこなせていないんですが。ハイパースレッディングテクノロジーのストールを回避するための並列処理が出来ているか・・・?

左のオレンジ線から見ていこう
CPU2→CPU3→CPU4→CPU5→CPU1→CPU10→CPU3→CPU6→CPU8→CPU9→CPU10→CPU1→CPU2→CPU8・・・

非常に不規則だな。バックグラウンドでほんのちょっと動作しているスレッドは25%以下でアイドル状態とみなしておくとすれば・・・片スレッドが稼働しているとは思えんな

これはギルティー!戦犯!!ヒキニート!!!


ちょい調べていたが2002年の記事とかを拾ったが、ベンチマークソフトや動画エンコードでは性能を発揮するがゲーム性能やオフィスにおいては性能が上がらないと嘆いている記事もあった。流石に18年前の記事は当てにならない気が・・・・ってまて、2002年!?
マルチコアが初登場したIBM POWER4とか、もはや名前すら聞いたことないような時代、さすがに今とはちゃうか

気を取り直して他を調べてみる
・・・情報が出なかった。

マイクラにおいてベンチマーク方法もクソも無いので、明日、体感でHTTアリとナシでどれだけ効果があるのか、検証してみようかなと思います。

BIOSからハイパースレッディングテクノロジーをオフにすることで変更できるからね~

この記事へのコメント