読者です 読者をやめる 読者になる 読者になる

ペルリ的な何かなブログ

Simutransとかいろいろ自由気ままに書き散らす

NetSimutransに向いてるセーブデータ形式に関する観測とその見解

約2か月ぶりのブログ更新です。

NetSimutransで開発が進むとログイン時間が長くなることがあると思います。

これは2014年頃に行ったセーブデータ形式毎のログイン時間を計測してどのファイル形式がNetSimutransに向いた形式なのかをしました。今更ながら掲載します。

 

最初に結論を出しておきますが、「xml形式でなければどの形式でもログイン時間は変わらないので、より軽量なbzip2形式が最適」です。あくまでも2014年当時の計測に基づく結論です。

 

前提となる知識として、いくつか話をしておきます。

 

まず、Simutransのログイン処理です。

誰かがログインしたときの処理は次のようになっています。

1.サーバーでゲームを保存する

2.すべての参加者に保存したセーブデータを転送する

3-1.各クライアントはセーブデータの転送が完了次第ロードする

3-2.サーバーはすべてのクライアントに転送が完了したらロードする

4.各クライアントはロードが終了したらサーバーのロード完了まで停止状態

5.サーバーでロード完了したら他のクライアントのロード完了を待たずにゲームは動き始める

6.サーバーよりもロードが遅かったクライアントはロード完了次第早送りでサーバーの時間まで追いつく

これが一連の流れとなっています。

2014年当時、自分はサーバーの運営を行っていましたが、ログイン処理に時間がかかること、特にセーブとロードに時間がかかっていることに気が付きました。そこでセーブデータの形式を変えることによって改善できるのではないかと考えました。

 

そこで、Simutransの設定ファイルであるSimuconfでは6種類のセーブデータ形式があります。

設定ファイル/simuconf.tab - Simutrans日本語化・解説

↑に書かれていることをそのままに紹介します。

 

saveformat = bzip2
 セーブデータの圧縮形式を指定します。現在はZipのみ対応で、圧縮しない場合は"binary"を指定してください。
102.2.2以降bzip2での圧縮もサポートされています。
zipped ... zip圧縮保存
bzip2 ... bzip2圧縮保存。zipよりもファイルサイズが小さくなるため、ネットワークゲームに適しています。ただし圧縮解凍はzipよりも若干遅くなります。(102.2.2以降)
binary ... 圧縮せずに保存
xml ... xmlで保存(101.0以降)
xml_zipped ... xmlでzip圧縮して保存(101.0以降)
xml_bzip2 ... xmlでbzip2圧縮して保存(102.2.2以降)
 
とのことで、要するに「非圧縮形式と圧縮する形式が2つ、それぞれにxml方式で保存することができる」わけです。
ここで自分が目を付けたのはセーブデータを圧縮して保存し、それを解凍する時間とゲームの転送時間のどちらを取るか?です。
圧縮すればそれだけ「圧縮解凍に時間がかかる」、それを行わなければセーブデータ容量が大きくなり「転送に時間がかかる」と仮定し、圧縮解凍と転送のどちらを選べば早いのかを検証しました。
 
検証は2014年の5月に行いました。本体バージョンは112.4のナイトリー版r7132です。当時やっていた対戦の環境を誰もいない時間にそのまま使って行いました。
自分はサーバー向けに1台PCを用意して、別のPCでログインして遊んでいましたので回線速度は十分にあり、その変動は少ないと思います。
 
その結果は以下の通りとなっています。
zipped
1st
Client読み込み完了 2'30"
Host読み込み完了  5'15"
データ容量:※記録忘れ
2nd
Client読み込み完了 2'40"
Host読み込み完了  4'20"
データ容量:12631kb
3rd
Client読み込み完了 2'41"
Host読み込み完了  4'27"
データ容量:13014kb
4th
Client読み込み完了 2'43"
Host読み込み完了  4'30"
データ容量:12732kb
bzip2
1st
Client読み込み完了 2'47"
Host読み込み完了  4'35"
データ容量:9086kb
2nd
Client読み込み完了 2'47"
Host読み込み完了  4'25"
データ容量:9016kb
3rd
Client読み込み完了 2'48"
Host読み込み完了  4'34"
データ容量:9198kb
4th
Client読み込み完了 2'50"
Host読み込み完了  4'29"
データ容量:9418kb
xml_bsip2
Client読み込み完了 接続不可(ゲーム保存に時間がかかりすぎてタイムアウト)
Host読み込み完了  計測中止
データ容量:12055kb
binary
1st
Client読み込み完了 2'50"
Host読み込み完了  4'27"
データ容量:64729kb
2nd
Client読み込み完了 2'50"
Host読み込み完了  4'28"
データ容量:65033kb
3rd
Client読み込み完了 2'51"
Host読み込み完了  4'36"
データ容量:65591kb
 
という結果でした。もちろん3年前のバージョン112.4なので、今はもう少し早くなっていると思われますが、当時のデータということで。