web-dev-qa-db-ja.com

LinuxでのFPSゲームのトラフィック優先度が高い

目標:LinuxでFPSゲームを実行する場合、ネットワークトラフィックの優先度の高い設定を自動化します。

このようなタスクは通常、iptables(特定の基準を満たすIPパケットをマークするため)とtc(それらのIPパケットに優先順位を付けるため)の組み合わせで実行されることを私は知っています。

問題:

  • 以前のバージョンのiptablesには--pid-ownerオプションがあり、マンページにこれがSMPカーネルで壊れているという警告がありました。私の最近のバージョンのiptables(1.4.7)は、マンページでこのオプションについてまったく言及していません
  • ゲームサーバーは異なるポートで実行されているため、トラフィックを照合するために単一の宛先ポートを使用することはおそらくできません

私は次のようなラッパーシェルスクリプトを目指しています。

  • ゲームの実行可能ファイルを実行する
  • その名前/ pidを見つける
  • これに基づいて、このプロセスのネットワークトラフィックの優先度が上がります
  • ゲームを終了すると、すべてがデフォルトに戻ります

これは可能ですか?役立つものがあれば、カスタムnetfilterモジュールを扱うところまで進んでいきます。

1
halp

クライアントのQoSを台無しにしたくないと思います。ルーターでは多分ですが、クライアントマシンでは、余分なパケット処理を導入しているだけで、実際には速度が低下します。ルーターでは、これらのパケットを他のパケットよりも優先しているため(他のhttp接続やルーターを通過する他のトラフィックなど)、それは成功ですが、クライアントでは、パケットを直接渡すのではなく、追加のフィルタリングを行っています。プロセスに。

ただし、Niceを使用してクライアントプロセスの優先度を調整すると、同じマシンで実行されているバックグラウンドのものよりもCPUへのアクセスが高速になります。

再送信を最小限に抑えるために、ネットワークの受信/送信バッファサイズを調整することをお勧めします。

コンピューターによって生成される実際の帯域幅を制御しようとしている場合は、FPSトラフィックが正確にどの程度で、どれだけ近いかについて、より多くのデータが必要になります。優先順位を下げたいのは「他の」トラフィックです。 FPSがUDPを使用し、他のトラフィックがすべてTCPである場合は、「TCPよりもUDPを優先する」という単純な方法で回避できる可能性があります。または、より複雑な場合もあります。ただし、トラフィックの各セットを特徴付ける方法がわかったら、 otheranswers for details を確認する必要があります。

0
pjz

Iptablesだけでは不可能ですが、TCでは可能です。デフォルトのiptablesはFIFO "先入れ先出し"ですが、TCを使用すると、ポート、プロトコル、ipsに優先順位を付けることができます。

QoSを使用した完全なNATソリューションの例

Iptables netfilterを使用すると、ipt_ownerモジュールを引き続き使用できます。

-m owner –uid-owner replace_with_user

  owner
       This  module  attempts  to  match various characteristics of the packet
       creator, for locally generated packets. This match is only valid in the
       OUTPUT and POSTROUTING chains. Forwarded packets do not have any socket
       associated with them. Packets from kernel threads do have a socket, but
       usually no owner.

       [!] --uid-owner username

       [!] --uid-owner userid[-userid]
              Matches if the packet socket's file structure (if it has one) is
              owned by the given user. You may also specify a  numerical  UID,
              or an UID range.

       [!] --gid-owner groupname

       [!] --gid-owner groupid[-groupid]
              Matches  if  the  packet socket's file structure is owned by the
              given group.  You may also specify a numerical  GID,  or  a  GID
              range.

       [!] --socket-exists
              Matches if the packet is associated with a socket.

       [!] -m or --match / -p or --protocol
              iptables can use extended packet matching modules. These are loaded
              in two ways: implicitly, when -p or --protocol is specified, or with
              the -m or --match options, followed by the matching module name;
              after these, various extra command line options become available,
              depending on the specific module. 

パケットがネットワーク内のいずれかのコンピューターから送信されている場合は機能しませんが、アプリケーションがファイアウォールサーバー内で実行されている場合は機能します。それ以外の場合は、MACを照合することをお勧めします。

0
Prix