Ethernet UDP Первый полученный пакет задерживается. Зачем?

395
Adam Z

У меня есть компьютер, обменивающийся данными, использующий гигабитный Ethernet с некоторым нестандартным оборудованием. Моя проблема заключается в том, что когда данные физически поступают на сетевую карту (проверяется осциллографом), первый кадр регистрируется ОС с задержкой приблизительно 1 мс. Все последующие кадры регистрируются с очень небольшой задержкой.

Если бы мне нужно было передать большой кусок данных, это было бы приемлемо, поскольку задержка присутствовала бы только для первого кадра, однако мое приложение требует, чтобы я отправил один пакет и дождался ответа. Эта задержка в 1 мс для каждого полученного пакета значительно уменьшает мою пропускную способность.

Согласование ARP не является проблемой, поскольку я установил запись как статическую. Я наблюдаю за полученными пакетами, используя wireshark. Кто-нибудь знает, что может вызвать задержку присутствия только в первом кадре чтения?

1
Что * точно * означает "зарегистрированный в ОС"? Ваше приложение уже запущено, или оно запускается с помощью launchd или inetd, или каким-либо другим демоном отложенного запуска, который на самом деле прослушивает порт? Spiff 7 лет назад 0
Под зарегистрированным я подразумеваю время, которое требуется, чтобы показать в Wireshark, я предполагаю, что это время, в которое он достигает приемного буфера. Приложение уже запущено, у меня есть прослушиватель UDP в бесконечном цикле (C #). Я также пробовал коммерческие терминалы, такие как отправитель пакетов. Adam Z 7 лет назад 0
Можете ли вы точно определить, что вы подразумеваете под «первым кадром»? Сначала после ссылки? Сначала с этого IP хоста? Первый из этого потока UDP? Первый из этого большого буфера записи на отправляющей стороне? Используется ли EEE (802.3az) по этой ссылке? Где именно вы подключили оптический прицел? Это было на GMII или где-то еще? Является ли пользовательское оборудование самой сетевой картой Gigabit Ethernet, или это относится к устройству на другом конце канала Gigabit Ethernet? Spiff 7 лет назад 0
Немного предыстории: я отправляю кадры в ПЛИС с помощью RGMII. Когда FPGA принимает кадр, он немедленно повторно передает тот же кадр, поэтому задержка от приема / передачи очень мала. Если я отправляю один кадр в любое время во время восходящей линии связи, кадр возвращается обратно с задержкой 1 мс. Если я отправляю непрерывные кадры с ПК, поток принимается с задержкой в ​​1 мс (поэтому первый поступающий кадр появляется в буфере ОС с опозданием на 1 мс, но остальные кадры поступают сразу после). Adam Z 7 лет назад 0
Также, если я передаю / принимаю / передаю непрерывно, задержка в 1 мс присутствует только в первом кадре в последовательности, однако если я прекращаю отправку / прием более чем на 2 мс, снова наблюдается задержка в 1 мс в первом кадре. Наблюдая за временем RGMII, я вполне уверен, что задержка в 1 мс со стороны ОС. Adam Z 7 лет назад 0

0 ответов на вопрос