Перейти к содержанию

Производительность

Следующие факторы часто являются причинами узких мест скорости передачи данных:

  • Качество соединения между вашим устройством и сервером
  • Вычислительная мощность CPU, сетевого адаптера и т.д.
  • Размеры системных буферов
  • Размеры окна приёма для управления потоком
  • Приоритет процесса

Стоит отметить, что QUIC, будучи значительно более новым и сложным протоколом, работающим в пользовательском пространстве, по своей природе требует больше вычислительных ресурсов, чем зрелая, высокооптимизированная реализация TCP на уровне ядра. Если вы хотите достичь высоких скоростей передачи, не следует размещать сервер на маломощном оборудовании, таком как Raspberry Pi или крайне дешёвый VPS с ограниченным CPU.

Хотя первые два фактора выходят за рамки этой документации, последние три можно оптимизировать для повышения производительности.

Размеры системных буферов

Linux

# Установить оба буфера в 16 МБ
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216

BSD/macOS

sysctl -w kern.ipc.maxsockbuf=20971520
sysctl -w net.inet.udp.recvspace=16777216
# Буфер отправки UDP не существует в BSD, поэтому "sendspace" устанавливать не нужно

Размеры окна приёма для управления потоком

Hysteria имеет следующие параметры окна приёма QUIC как в конфигурации клиента, так и сервера:

quic:
  initStreamReceiveWindow: 26843545 # (1)!
  maxStreamReceiveWindow: 26843545 # (2)!
  initConnReceiveWindow: 67108864 # (3)!
  maxConnReceiveWindow: 67108864 # (4)!
  1. Начальный размер окна приёма для каждого потока. Это объём данных, который можно получить до того, как отправитель должен будет дождаться, пока получатель обработает данные. По умолчанию 8 МБ.
  2. Существует механизм автоматической настройки размера окна приёма, который увеличивает его по мере необходимости, но не превышает это значение. По умолчанию 8 МБ.
  3. Начальный размер окна приёма для соединения. Это общий размер окна приёма для всех потоков. По умолчанию 20 МБ.
  4. Существует механизм автоматической настройки размера окна приёма, который увеличивает его по мере необходимости, но не превышает это значение. По умолчанию 20 МБ.

Вы можете увеличить эти значения, если они слишком малы для ваших задач, или уменьшить, если необходимо экономить память. Настоятельно рекомендуем поддерживать соотношение окна приёма потока к соединению близким к 2/5. Это предотвращает ситуацию, когда один или два заблокированных потока занимают всё соединение.

Приоритет процесса

На устройствах с ограниченными ресурсами CPU высокая нагрузка может вызывать джиттер задержки. Это можно смягчить, повысив приоритет процесса.

systemd

Для Linux.

Создайте файл /etc/systemd/system/hysteria-server.service.d/priority.conf и добавьте следующее:

[Service]
CPUSchedulingPolicy=rr
CPUSchedulingPriority=99

Перезагрузите конфигурационные файлы systemd и перезапустите сервис:

systemctl daemon-reload
systemctl restart hysteria-server.service

chrt

Для Linux и FreeBSD. На FreeBSD необходимо установить util-linux, а максимальный приоритет — 31 вместо 99.

# Выполнить после каждого запуска сервиса
chrt -r 99 $(pidof hysteria)

# Или используйте следующую команду для запуска сервиса
chrt -r 99 hysteria server -c /path/to/config.yaml