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

16

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

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

Jimm
источник
2
Как вы думаете, почему .23ms это плохая задержка? Это потрясающая задержка.
SpacemanSpiff
6
Подключите их напрямую с помощью перекрестного кабеля. Если у вас одинаковая задержка, то причиной является один из хостов. Если у вас нет такой же задержки, то причина в коммутаторе или кабеле.
Joeqwerty
1
Договорились, в чем проблема? Задержка в 0,23 мс меньше, чем у меня, когда две машины сидят рядом.
Майкл Хэмптон
@joeqwerty Если две системы соединены перекрестным кабелем, как они находят друг друга? ARP все еще работает? TCP все еще работает?
Джимм
1
Они будут работать так же, как если бы они оба были подключены к одному коммутатору. Кабель - это просто физическая среда, по которой они будут общаться. Все 7 уровней модели OSI (или 4 уровня модели DARPA, если хотите) будут работать точно так же, как и сейчас.
Joeqwerty

Ответы:

15

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

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

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

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

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

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

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

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

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

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

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

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

# 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
ewwhite
источник
Это чувствительное к задержке приложение для обмена сообщениями. Типичная операционная система - kernel-2.6.32-279.11.1.el6.x86_64, хотя я загрузил хосты с ядром 3.2.23-rt37.56.el6rt.x86_64, чтобы посмотреть, будет ли это иметь какое-то значение. Но это было почти то же самое. Размер сообщения варьируется от 1 до 3 КБ. Все общение происходит через TCP.
Джимм
Является ли ОС Red Hat MRG?
2012 года
Прямо сейчас это простая Redhat 6.3, но MRG также возможна. Как я уже упоминал выше, я попробовал оба варианта, но время ожидания было одинаковым. С какими настройками я должен быть связан?
Джимм
Я хотел бы знать аппаратное обеспечение и настройку NIC. Переключатель модели помогает. Для настраиваемых параметров очевидной областью, на которую стоит обратить внимание в 6.3, является ваш tuned-admпрофиль.
2012 года
Контроллеры с двумя Ethernet-интерфейсами: Emulex Corporation 10 Гбит NIC (версия 02) и 16-ядерные процессоры семейства AMD 10h, каждый с частотой 2400 МГц.
Джимм