Задержка между двумя хостами 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