REUSEPORT

Что такое REUSEPORT? Если кратко, то в много поточном приложении позволяет каждому потоку напрямую привязаться к tcp socket’y (адрес:порт). Это позволяет быстрее принимать пакеты (без REUSEPORT пришлось бы получать пакеты через мастер-процесс).

В статье рассмотрим, как можно узнать/понять, использует ли ваше приложение REUSEPORT штатными средствами ОС. О том, как обстоит поддержка REUSEPORT в разных ОС написана очень неплохая статья, но вот касательно Solaris данные там устаревшие.

FreeBSD

Здесь всё просто: первый вывод без использования REUSEPORT, второй — с ним.

# procstat -f 94919
  PID COMM                FD T V FLAGS    REF  OFFSET PRO NAME
...
95154 unbound              3 s - rw---n--   5       0 UDP 0.0.0.0:53 0.0.0.0:0
95154 unbound              4 s - rw---n--   5       0 TCP 0.0.0.0:53 0.0.0.0:0
...
# procstat -f 94919
  PID COMM                FD T V FLAGS    REF  OFFSET PRO NAME
...
94919 unbound              3 s - rw---n--   2       0 UDP 0.0.0.0:53 0.0.0.0:0
94919 unbound              4 s - rw---n--   2       0 TCP 0.0.0.0:53 0.0.0.0:0
94919 unbound              5 s - rw---n--   2       0 UDP 0.0.0.0:53 0.0.0.0:0
94919 unbound              6 s - rw---n--   2       0 TCP 0.0.0.0:53 0.0.0.0:0
94919 unbound              7 s - rw---n--   2       0 UDP 0.0.0.0:53 0.0.0.0:0
94919 unbound              8 s - rw---n--   2       0 TCP 0.0.0.0:53 0.0.0.0:0
94919 unbound              9 s - rw---n--   2       0 UDP 0.0.0.0:53 0.0.0.0:0
94919 unbound             10 s - rw---n--   2       0 TCP 0.0.0.0:53 0.0.0.0:0
...

Solaris

К сожалению, мне так и не удалось найти работающий вариант ПО под Solaris, что бы он использовал REUSEPORT, хотя со стороны ОС этот функционал реализован. Посмотреть, используется ли reuseport, можно командой:

# pfiles <PID>

Если в выводе присутствует REUSEPORT, значит используется.

Linux

Можно посмотреть только через подгрузку модуля, который добавляет в вывод netstat SO_ опции. Других вариантов посмотреть, используется ли REUSEPORT я не нашёл.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *