RMA3 UDP最適化について

まとめ

  • Arma 3 / Arma 2のラグの軽減に貢献します
  • WindowsOS向けの設定です
  • クライアントおよびサーバーで著しく良い効果が期待できます
  • UDPのデータグラムサイズをWindows Registryで変更します
  • (ちなみに)Linux OSにおいてはカーネルパラメータで同様の変更が可能です

概要

Windows OSは、UDPにおいて小さなデータグラムを送出する際、高速なI/OパスによりI/Oボトルネックを回避することができます。既定では、小さいデータグラムを 1024バイトで送出します。この値をMTUに合わせることにより、パフォーマンスの向上が期待できます。外部仕様(端末間の環境)に大きく影響する可能性があるため、期待と表記しましたが大抵は著しい効果が得られると思います。このパラメータは主にUDPで小さいデータグラムを送受信するようなアプリケーション(SIP、RTP等)でよく利用されるテクニックです。

設定内容

Windows Registryを下記の様に変更します。

[HKLM\System\CurrentControlSet\Services\AFD\Parameters]

DWORD (32ビット)値を新規作成します。

名前を FastSendDatagramThreshold にして、値データを1454 (10進数) 以下にします。

最後にWindowsを再起動します。


ちなみに、フレッツ回線網(ドコモ光回線網)は、MTUが 1454 バイト(以下)です。国内のISPで MTU 1500 バイト(以下)の構成もありますが非常に稀です。また、ご存じだと思いますが、Arma 3 は IPv6 を(まだ)サポートしていません。最後に、端末間でフラグメント処理が起きると、Arma 3は、大人数の接続になればなるほど非常に性能が落ち、大ゲームプレイ中にイライラしてくると思います。MTUの設定は慎重に!

設定を元に戻す

元に戻すには、先ほど作成した設定を右クリックして削除し、Windowsを再起動します。

問題が発生するとしたら、ラグが悪化している、他の音声アプリ(音が途切れる等)で問題が出る場合は、元に戻してください。その場合は、あなたが設定した値に問題があります。

背景

Windows OSは 1024バイトを超えるUDPパケットを転送すると、他の通信に関係なく、スループットが予想より低下したり、不安定になったりします。これは、Windows のネットワークスタックにおいて、転送が完了するまで待機し、そのあとに次のパケットが送信されます。

Arma 2 は Debianでサーバーで稼働していたので、Windows は気にしていませんでした。Windows Server に切り替えた後は、やはりブラックボックスが多くて悩んでいましたが、M$に聞く機会があり、助かりました。本来は、アプリケーション側 のSocketで設定するI/Fで設定するのがあるべき姿とのこと。

話している時に思い出したのですが、実は OFP / Arma / Arma 2 から設定ファイルでケットサイズを変更する箇所があります。しかし、Arma 3 でネットワークアルゴリズムが大幅に変更されたので、リッファレンスのままで、あまり触りたくなかったのが正直なところです。詳しくは、ネットワークチューニングオプション(サーバーの基本構成ファイル)A new experimental networking algorithm (bandwidthAlg=2) を参照してください。

Arma 3 UDP最適化について

ラグのない Arma 3 を楽しんでください!