論理と、幻想と。

ゲームやガジェットが好きなITスペシャリストが作ったものや考えたことについてダラダラ書きます

NICを追加してFFXIVの通信を分離する

概要

一般的なPCであれば、マザーボードにLANの接続端子が予め付いていると思います。その他にLANカードを増設することで、PCに複数のネットワークインターフェース(NIC)を追加することができます。

NICの追加には本来いくつかの目的があります。NICごとに異なるセグメントのネットワークに接続したり、特定の宛先への通信を特定のNICにルーティングしたり、複数デバイスを束ねてチーミングすることにより耐障害性を高めることなどが代表例です。(一般家庭で使われることは少ないかもしれません。)

本記事では、NICを追加してルーティングを追加することにより、

  1. FFXIVの通信だけを⾏うNIC
  2. FFXIV以外の通信を⾏うNIC

の2つに通信を分離する方法について記載します。

期待する効果

ACTはNIC上を通るFFXIVのパケットを監視して動作していますが、同じNICで動画配信や動画の視聴など、大量の通信を行っている場合にACTやFFXIVのパフォーマンスが落ち、いわゆる通信ラグが発生するケースがあります。

そこで、ACTが監視する対象をFFXIVの通信のみを行うNICに限定します。これによりパケット解析のパフォーマンスの改善や、他の通信アクティビティによる影響を低減する効果が期待できます。また、FFXIVのプロセス自体も同一PC内の他のネットワーク通信アクティビティの影響を受けにくくなる効果も期待できます。

用意するもの

追加するNIC

FFXIVの通信に使⽤します。データセンタで使うわけでもないので、ギガビット対応でさえあれば特にスペックを気にする必要はないと思います。

タワー型PCなどPCIバスにアクセスできる場合には以下のような製品が安くて良いでしょう。

扱いやすさではUSB3.0のLANカードも便利かと思います。USB2.0接続ではUSB通信の実効速度がLANの通信速度を下回りボトルネックになるため、USB3.0を選ぶ必要がある点に注意してください。当然、接続するUSB端子側もUSB3.0である必要があります。

LANケーブル

追加するNICをルータやハブに接続する際に使⽤するケーブル。カテゴリー6以上のケーブルならば何でも良いと思います。

⼿順

紛らわしいので、作業に先⽴って下記のように用語を定めます。

  • NIC1: PCにもともと搭載されているNIC。FFXIV以外の⼀般的な通信に使⽤するものとします。
  • NIC2: 追加するNIC。FFXIVの通信専⽤に使⽤します。

1. NIC1のIPを固定IPにする

NIC1のIPアドレスをDHCPで取得している場合は事前に固定IPに変えておきます。 IPアドレスは何でも良いですが、ここでは仮に192.168.0.32とします。

2. NIC2をPCにセットアップする

3. NIC2のIPアドレスを固定IPにする

こちらも固定IPならば何でも良いです。ここでは仮に 192.168.0.33 とします。 IPアドレスの設定時にデフォルトゲートウェイについての警告が出る可能性がありますが、問題ないため無視して構いません。

4. NIC2のインターフェース ID を確認する

コマンドプロントで route print コマンドを実⾏します。

===========================================================================
インターフェイス一覧
 12...5e 06 8d 0f ad 62 ......VPN Client Adapter - VPN
 14...d0 50 99 83 e7 66 ......Intel(R) Ethernet Connection (2) I219-V
 33...18 c2 bf 54 11 ca ......ASIX AX88179 USB 3.0 to Gigabit Ethernet Adapter
 ↑ NIC2のインターフェース ID        ↑ 追加したNIC2の名称
  3...00 1b dc 0e 04 be ......Bluetooth Device (Personal Area Network) #3
  1...........................Software Loopback Interface 1
 17...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter
===========================================================================

デバイス名から追加したNICを特定します。 この例では "ASIX AX88179 USB 3.0 to Gigabit Ethernet Adapter" が追加したNIC2のデバイス名なので、そのインターフェース ID である "33" を控えておきます。

5. ルーティングテーブルに経路を追加する

管理者権限でコマンドプロンプトを起動して下記のコマンドを実⾏します。後述の解説を参考に、ローカルのゲートウェイアドレスおよびインターフェースIDは環境に合わせ書き換えてください。

route add 124.150.157.0 mask 255.255.255.0 192.168.0.1 if 33
route add 204.2.229.0 mask 255.255.255.0 192.168.0.1 if 33
route add 195.82.50.0 mask 255.255.255.0 192.168.0.1 if 33
解説

routeコマンドの引数は以下のようになっています。

route add [送信先ネットワークアドレス] mask [送信先のサブネットマスク] [ローカルのゲートウェイアドレス] if [この宛先に使用するインターフェイスのID]

そして上記コマンドで指定したネットワークアドレスはそれぞれ以下の通り対応しています。

宛先アドレス サブネットマスク 宛先
124.150.157.0 255.255.255.0 日本データセンタ
204.2.229.0 255.255.255.0 北米データセンタ
195.82.50.0 255.255.255.0 欧州データセンタ

それぞれの宛先への通信をインターフェース ID "33" のデバイスを経由するよう指定します。すなわち、FFXIVサーバ群への通信をNIC2に限定するように指定します。

なお、この設定はPCを再起動すると消えるため、上記のコマンドは起動時に毎回実⾏する必要があります。⾯倒な場合は下記のように -p オプションを付けると恒久的なルーティング設定として保存されます。

route add -p 124.150.157.0 mask 255.255.255.0 192.168.0.1 if 33
route add -p 204.2.229.0 mask 255.255.255.0 192.168.0.1 if 33
route add -p 195.82.50.0 mask 255.255.255.0 192.168.0.1 if 33

6. ACT内のFFXIV_ACT_Pluginの設定を変更する

[Plugins] -> [FFXIV Settings] -> [Filter on Local IP] の設定にNIC2のIPアドレス 192.168.0.33 を指定する。

確認すること

  • FFXIV が通常通りプレイできること
  • FFXIV と ACT を使⽤して通常通りに ACT が動作すること
    • DPS集計が出来る、トリガが動く、etc...
  • netstat で実際のFFXIVのセッションを確認する
    • FFXIV, ACT, ブラウザを起動して適当にサイトを開いた状態でコマンドプロンプトを開き、netstat コマンドを実⾏する。
    • 現在のセッションが列挙される(すべて列挙されるまでそこそこ時間がかかるので気⻑に待つ)
      • 前述のFFXIVサーバのネットワークアドレスに属するIP向けの通信がNIC2のIPアドレスで実施されていること
      • それ以外の通信がNIC1のIPアドレスで実施されていること

を確認する。

考察

前述の通り、結果的にどの程度パフォーマンスが改善するのかは環境によって異なります。 FFXIV以外の通信を分離することで、通信密度の高いケースにおいてもACTの解析対象から不要な通信が除外されるのは幾らかCPU使用率の低減に寄与することでしょう。

出費も大きくないし作業量も大したことなく、デメリットも特にないので、もしNICが余ってたり買って試してみようと思う人はとりあえずやってみたらいいんじゃないでしょうか。

謝辞

本稿はanoyettaさんの検証結果について提供・許諾を頂いた上で編集したものです。

www.anoyetta.com