Страниц: [1]
  Печать  
Автор Тема: задержки в io-pkt-v4  (Прочитано 1298 раз)
longest
Участник
*
Offline Offline

Сообщений: 20


Просмотр профиля
« : Октября 12, 2016, 08:18:48 pm »

Делаю нехитрый тест round trip time (RTT) на выделенной сетевой карте i82544 на выделенном "io-pkt-v4 -i1". Замер времени произвожу на контроллере с Ethernet 100 Mbit/s, который генерит пакет 64 байта, ждет такой же пакет от компьютера с QNX 6.5.0, выставляя временные отметки на осциллограф.
Программа на компьютере принимает запрос и тут же отправляет ответ (пакеты MAC уровня через /dev/bpf0). Приоритеты выставлены. В результате имеем RTT = 45..120 us, что печально, особенно макс. RTT.
Время на саму передачу в оба конца я оцениваю как T < 20 us.
Вопроса как всегда два: кто виноват и что делать?
Т.е. откуда именно берутся такие задержки и как воспользоваться напрямую функциями приема и передачи самого Ethernet драйвера?
Записан
Dark
Sr. Member
****
Offline Offline

Сообщений: 343


Просмотр профиля
« Ответ #1 : Октября 13, 2016, 09:51:41 am »

как воспользоваться напрямую функциями приема и передачи самого Ethernet драйвера?

В этой части можно попробовать зайти со стороны lsm-nraw.so.
Записан
longest
Участник
*
Offline Offline

Сообщений: 20


Просмотр профиля
« Ответ #2 : Октября 14, 2016, 12:41:20 am »

Про lsm-nraw.so встречал не одно упоминание на форуме. К сожалению в свободном доступе я его не нашел.
Интересно было бы узнать за счет чего он работает быстрее? Ему нужен io-pkt? Если да, то он наверное также теряет время на разблокировках нити или передачи сообщений?

По поводу работы с BPF уточнение:
Задержки одинаково выглядят на разных скоростях (packet rate) - 50, 500, 5000 Hz. Время выполнения процедуры write() всегда примерно 6 мкс, время от момента входа в write() до получения пакета (64 байта) контроллером всегда примерно 18 мкс. А вот время от момента отправки пакета контроллером до момента возврата из процедуры read() в программу проходит от 28 мкс до 80 мкс. При этом задержка линейно (насколько это можно судить по осциллографу) нарастает до максимума, потом падает и так циклически. Вот этот огромный jitter и представляет проблему. Странно, на чем можно висеть столь длительное время...

кстати, похожий эффект упомянут здесь:
http://qnx.org.ru/forum/index.php?action=printpage;topic=7992.0

« Последнее редактирование: Октября 14, 2016, 12:44:21 am от longest » Записан
longest
Участник
*
Offline Offline

Сообщений: 20


Просмотр профиля
« Ответ #3 : Октября 14, 2016, 03:49:13 am »

Заменил devnp-e1000.so на devnp-i82544.so :
io-pkt-v4 -ptcpip prefix=/alt rx_pulse_prio=65 -P 62 rx_prio=61 -d /lib/dll/devnp-i82544.so receive=1,transmit=1,irq_thresh=0
С этим драйвером ситуация улучшилась RTT max = 60 us.
Жалко только этот драйвер не поддерживает параметр priority, и одна из ниток io-pkt работает с приоритетом по умолчанию - 21.
« Последнее редактирование: Октября 14, 2016, 03:51:04 am от longest » Записан
Dark
Sr. Member
****
Offline Offline

Сообщений: 343


Просмотр профиля
« Ответ #4 : Октября 14, 2016, 09:33:02 am »

одна из ниток io-pkt работает с приоритетом по умолчанию - 21.

use slay
Записан
Страниц: [1]
  Печать  
 
Перейти в: