Назад | Перейти на главную страницу

более высокий приоритет трафика для игры FPS в Linux

Цель: при запуске игры FPS в Linux автоматизировать настройку более высокого приоритета для ее сетевого трафика.

Я знаю, что такие задачи обычно выполняются с помощью комбинации iptables (для маркировки IP-пакетов, соответствующих определенным критериям) и tc (для определения приоритета этих IP-пакетов).

Проблемы:

Я стремлюсь к сценарию оболочки-оболочки, который будет:

Это возможно? Я готов пойти дальше и заняться пользовательскими модулями netfilter, если они могут помочь.

Только с iptables это невозможно, но с TC вы можете, iptables по умолчанию - это FIFO «первым пришел - первым ушел», но с помощью TC вы можете установить приоритеты портов, протокола и IPS.

Пример полного натурного решения с QoS

С 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.

Я не думаю, что вы хотите возиться с QoS на клиенте; возможно, на вашем маршрутизаторе, но на клиентской машине вы просто вводите дополнительную обработку пакетов, которая на самом деле замедляет работу. На маршрутизаторе вы устанавливаете приоритет этих пакетов над другими пакетами (например, другие HTTP-соединения или другой трафик, также проходящий через маршрутизатор), так что это победа, но на клиенте вы выполняете дополнительную фильтрацию вместо того, чтобы просто передавать пакеты напрямую. к процессу.

Вы можете использовать nice тем не менее, чтобы настроить приоритет клиентского процесса, чтобы он получил более быстрый доступ к ЦП, чем фоновые процессы, выполняемые на том же компьютере.

Возможно, вы захотите настроить размер буфера приема / отправки вашей сети, чтобы минимизировать повторные передачи.

Если вы пытаетесь контролировать фактическую пропускную способность вашего компьютера, вам потребуется больше данных о том, что именно трафик FPS и насколько он близок к «другому» трафику, приоритетность которого вы хотите снизить. Возможно, вам удастся уйти с такой простой задачей, как «установить приоритет UDP над TCP», если ваш FPS использует UDP, а весь ваш другой трафик - это TCP. Или может быть сложнее. Если вы знаете, как охарактеризовать каждый набор трафика, вам нужно будет взглянуть на Другой ответы для подробности.