Як усунути затримку між двома хостами Linux


16

Затримка між двома хостами Linux становить приблизно .23 мс. Вони з'єднуються одним комутатором. Ping & Wireshark підтверджують номер затримки. Але я не маю ясного бачення того, що викликає цю затримку. Як я можу знати, чи затримка обумовлена ​​NIC на хості A або B або комутатором або кабелями?

ОНОВЛЕННЯ: Затримка .23 мс погана для моєї програми, яка надсилає повідомлення з дуже високою частотою, і я намагаюся зрозуміти, чи можна її звести до .1ms


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

Швидка матриця, що показує відмінності:

Чи можете ви розповісти нам про обладнання? Типи процесора, NIC, пам'яті?

Тож, можливо, буде цікаво перевірити своє посилання ... Спробуйте цей тест 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

Це програмне забезпечення для обміну повідомленнями із затримкою. Типовою ОС буде ядро-2.6.32-279.11.1.el6.x86_64, хоча я завантажував хости з ядром 3.2.23-rt37.56.el6rt.x86_64, щоб побачити, чи не зміниться це. Але це було майже те саме. Розміри повідомлень варіюються від 1 КБ до 3 КБ. Вся комунікація відбувається через TCP.
Джимм

MRG ОС Red Hat?
ewwhite

Зараз його звичайний Redhat 6.3, але MRG - це також можливість. Як я вже згадував вище, я спробував і те, і інше, але затримка була однаковою. Якими видами мелодій я повинен займатися?
Джимм

Я хотів би знати апаратне забезпечення та налаштування NIC. Модель перемикання допомагає. Для налаштування очевидна область, на яку слід звернути увагу на 6.3, - це ваш tuned-admпрофіль.
ewwhite

Подвійні контролери Ethernet: корпорація Emulex OneConnect 10Gb NIC (rev 02) та 16-ядерні процесори AMD Family 10h, кожен 2400 МГц.
Джимм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.