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

Как устранить задержку между двумя хостами Linux

Задержка между двумя хостами Linux составляет около 0,23 мс. Они подключаются одним переключателем. Ping и Wireshark подтверждают номер задержки. Но я не понимаю, что вызывает эту задержку. Как я могу узнать, вызвана ли задержка сетевым адаптером на хосте A или B, коммутатором или кабелями?

ОБНОВЛЕНИЕ: задержка в 0,23 мс плохая для моего существующего приложения, которое отправляет сообщения с очень высокой частотой, и я пытаюсь понять, можно ли снизить ее до 0,1 мс.

Как правило, вы можете использовать некоторые расширенные переключатели для утилита iperf чтобы получить представление о производительности сети между системами, в частности о задержке и джиттере ...

Это поток сообщений на основе UDP или TCP?

Я прокомментировал выше, что мне нужна дополнительная информация о вашей настройке. Если это приложение для обмена сообщениями с низкой задержкой, существует целый мир методы настройки и оптимизации которые охватывают настройку оборудования, драйверов и ОС. Но на самом деле нам нужно больше информации.

Редактировать:

Итак, это обмен сообщениями TCP. Вы изменили какие-нибудь /etc/sysctl.conf параметры? Как выглядят ваши буферы отправки / получения? Использование одного только ядра реального времени мало что дает, но если вы перейдете к точке, где вы привязываете прерывания к процессору, изменив приоритет реального времени приложения обмена сообщениями (chrt) и, возможно, изменив tuned-adm профиль системы может помочь ...

Звучит как обычная система EL6, поэтому простой способ установить базовый уровень настройки производительности включает в себя изменение профиля производительности системы на другой, доступный в пределах настроенная структура. Затем строите оттуда.

В твоем случае:

yum install tuned tuned-utils
tuned-adm profile latency-performance

Быстрая матрица, показывающая различия:

Можете рассказать об оборудовании? Типы процессора, сетевой карты, памяти?

Итак, может быть интересно проверить вашу ссылку ... Попробуйте этот тест iperf ...

В одной системе запустите прослушиватель UDP iperf. С другой открыть соединение с первым ... Быстрая проверка качества линии.

# Server2
[root@server2 ~]# iperf -su   

# Server1
[root@server1 ~]# iperf -t 60 -u -c server2

В моем случае низкий джиттер и малое время пинга:

------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  224 KByte (default)
------------------------------------------------------------
[  3] local 192.168.15.3 port 5001 connected with 172.16.2.152 port 36312
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-20.0 sec  2.50 MBytes  1.05 Mbits/sec   0.012 ms    0/ 1785 (0%)

PING server1 (172.16.2.152) 56(84) bytes of data.
64 bytes from server1 (172.16.2.152): icmp_seq=1 ttl=63 time=0.158 ms
64 bytes from server1 (172.16.2.152): icmp_seq=2 ttl=63 time=0.144 ms

Я бы проверил оборудование и интерфейсы на наличие ошибок. Если хотите, исключите переключение между системами и посмотрите, как выглядит прямое соединение. Вам не нужен высокий джиттер (дисперсия), поэтому проверьте это.

Но, честно говоря, даже с учетом времени пинга, которое вы получаете при текущей настройке, этого должно быть недостаточно, чтобы убить ваше приложение. Я бы пошел по пути настройки ваших буферов отправки / получения. Видеть: net.core.rmem_max, net.core.wmem_max и их значения по умолчанию ...

Что-то вроде следующего в /etc/sysctl.conf (настройте по вкусу):

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216