реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Где теряются UDP пакеты? Как повысить надежность доставки ?
Костян
сообщение Nov 8 2011, 07:12
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Дано:
DevBoard, которая формирует UDP пакеты размерностью Data=1024. DevBoard соединен с ПК кроссовым кабелем напрямую. На ПК установлена ОС Linux и по сокетам идет прием UDP пакетов. В каждом пакете идет номер с инкрементом, тем самым можно отслеживать потерю пакетов.
Цель - добиться максимальной пропускной способности при 100% доставки пакетов.
QUOTE
100Мбит/с линк
80% загрузка - 0% потеря пакетов
90% загр - 0 % потеря пакетов
94% загр - 0,003 % потеря пакетов

1Gбит/с линк
10% загрузка - 0% потеря пакетов
12% загр 0 % потеря пакетов
20% загр - 0,0008%
30% загр - 0,005 %
64% загр - 0,02 %

Как видно потери возникают при 100Мбит/линке, когда загрузка сети близется к 100%.
А 1G линк не дает скорости более 12%, далее начинают терятся покеты.

Вопросы
1. Где происходит потеря пакетов ?
2. Как повысить надежность доставки пакетов ?
3. Может ли размер пакета влиять на надежность доставки ? Возможно стоит уменьшить до 128 или 256
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Nov 8 2011, 09:01
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Костян @ Nov 8 2011, 11:12) *
..UDP пакеты размерностью Data=1024...Цель - добиться максимальной пропускной способности при 100% доставки пакетов.
1. Где происходит потеря пакетов ?
2. Как повысить надежность доставки пакетов ?
3. Может ли размер пакета влиять на надежность доставки ? Возможно стоит уменьшить до 128 или 256


UDP не гарантирует доставку. UDP гарантирует, что пакет будет передан. т.е. уйдёт. всё. Изначально ставить не выполнимую цель = мягко говоря не корректно.
это типа раз...
где происходит потеря? либо помеха, либо не успевает приёмник.
надёжность повысить? кхм... выкинуть льюникс, написать свою заточку. два девайса и кабель в свинцовые наряды и прочую мурню...и всё равно это не 100% sm.gif по определению...
размер пакета может влиять на оптимальность обработки на приёмной стороне. т.е. если вы заглянете в код приёмника на предмет "А какой тебе лучше размер скормить зараза?" то Вы ответите на свой вопрос сами.
по поводу размеров - тут думаю будет просче тупо прогнать разные тесты, которые смогут дать средний по больнице результат...который можно принять за основу - дескать этот размер получше...


мне кажется, что Вы заходите немного не с той стороны.
вот эти вещи разные:
а) пропускная способность
б) надёжность доставки

если Вам актуально надёжность доставки - то тогда протокол не подходит.
если пропускная способность - то тут надо считать и смотреть на возможности канала, приёмника, оси...

где то так
(круглый)
Go to the top of the page
 
+Quote Post
Костян
сообщение Nov 8 2011, 09:06
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (kolobok0 @ Nov 8 2011, 07:01) *
где происходит потеря? либо помеха, либо не успевает приёмник.

помеха исключена. ошибки были бы тогда при малой загрузке сети.
Почти уверен ,что не успевает ОС считать данные.
Но здесь непонятка. На сетевую карточку приходят пакеты , куда она их девает ? Хранит в своих фифошках или отсылает в ОЗУ ?

QUOTE
вот эти вещи разные:
а) пропускная способность
б) надёжность доставки

думаю на скоростях до 1Гбит/с эти два пункта можно совместить.
Go to the top of the page
 
+Quote Post
Fast
сообщение Nov 8 2011, 10:38
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



может быть
- драйвер сетевой карты (а если запуститься под Win ?)
- настройки сетевой карты (кол-во дескрипторов, буфер приема, частота прерываний)
- разница в клоках DevBrd и чипа сетевой карты
- софт приемника не успевает обрабатывать заголовки пакетов (скипает счетчики)
Go to the top of the page
 
+Quote Post
Костян
сообщение Nov 8 2011, 11:15
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (Fast @ Nov 8 2011, 08:38) *
может быть
- драйвер сетевой карты (а если запуститься под Win ?)

готовлю тест.

QUOTE
- настройки сетевой карты (кол-во дескрипторов, буфер приема, частота прерываний)

попробую sm.gif

QUOTE
- разница в клоках DevBrd и чипа сетевой карты

хм...а как это может влиять на потери ?


QUOTE
- софт приемника не успевает обрабатывать заголовки пакетов (скипает счетчики)

тоже возможно, но как повысить скорость обработки ? отказаться от стандартной ОС и переходить на RTOS?


QUOTE
UDP не гарантирует доставку. UDP гарантирует, что пакет будет передан. т.е. уйдёт.

насколько я представляю состояние дел, UDP действительно не гарантирует доставку пакета, но потери происходят при слишком сильной развлетвленной сети. Тут же КРОСС кабель, т.е фактически теряются IP пакеты.
Go to the top of the page
 
+Quote Post
Fast
сообщение Nov 8 2011, 11:57
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



Цитата(Костян @ Nov 8 2011, 15:15) *
хм...а как это может влиять на потери ?
пропуск-вставка лишнего бита в чипе приемника, если тактирующие генераторы имеют номиналы, отличающиеся на проценты. Соотв. произойдет отбрасывание пакета UDP.
Цитата(Костян @ Nov 8 2011, 15:15) *
тоже возможно, но как повысить скорость обработки ? отказаться от стандартной ОС и переходить на RTOS?
для начала нужно выяснить, где ошибка. Для этого надо обрабатывать данные после их накопления в большом буфере ОЗУ, а не в процессе приема. И писать чем-то проверенным, например, wireshark
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Nov 8 2011, 13:50
Сообщение #7


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
например, wireshark


на скоростях близких 100 мбит/c он еще как теряет пакеты, а на 1 Гб/с так вобще надо в тачку 16 гб ОЗУ и SSD raid, так что забудьте.
Go to the top of the page
 
+Quote Post
Костян
сообщение Nov 8 2011, 14:18
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (MALLOY2 @ Nov 8 2011, 11:50) *
на скоростях близких 100 мбит/c он еще как теряет пакеты, а на 1 Гб/с так вобще надо в тачку 16 гб ОЗУ и SSD raid, так что забудьте.

подтверждаю. wireshark прилично вешает машину, когда поток даже на 100Мбит/линк более 50%. При этом кол-во потерянных пакетов от 3%.

QUOTE
для начала нужно выяснить, где ошибка. Для этого надо обрабатывать данные после их накопления в большом буфере ОЗУ

так то оно так, но как это сделать под ОС ?
И еще раз повторю вопрос. На сетевую карточку приходят пакеты , куда она их девает ? Хранит в своих фифошках или отсылает в ОЗУ ? Если в ОЗУ, то по какому адрессу и кто задает размер буфера?
Go to the top of the page
 
+Quote Post
Fast
сообщение Nov 8 2011, 14:28
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



Цитата(MALLOY2 @ Nov 8 2011, 17:50) *
на скоростях близких 100 мбит/c он еще как теряет пакеты, а на 1 Гб/с так вобще надо в тачку 16 гб ОЗУ и SSD raid, так что забудьте.
есть мнение, что просто Вы не умеете его готовить. Коллеги, сидящие рядом, подтверждают полноту и целостность приема при записи в ОЗУ (почти 1 Гб/с) и на HDD не SSD raid (около 800 Мб/с).
может дело в конфигурации железа, версиях софта ?
Go to the top of the page
 
+Quote Post
cioma
сообщение Nov 8 2011, 16:00
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



QUOTE (Костян @ Nov 8 2011, 15:18) *
И еще раз повторю вопрос. На сетевую карточку приходят пакеты , куда она их девает ? Хранит в своих фифошках или отсылает в ОЗУ ? Если в ОЗУ, то по какому адрессу и кто задает размер буфера?


Пришел кадр Ethernet, картой обработался и положился во внутренний буфер карты. После заполнения внутреннего буфера до определенного уровня карта выставляет запрос на прерывание, ОС реагирует, настраивает DMA, и данные из внутреннего буфера передаются в системное ОЗУ ПК. Ну а дальше софт стека протоколов разбирает кадры.

Вот мои соображения:

- Постоянным (!) потоком данных под 100 Mbps можно положить любую ширпотребныю сетевуху.

- Какая сетевая карта используется? Есть подозрение что использование карты на последних сетевых чипах Intel c PCIe и с различными аппаратными ускорениями (хотя бы расчет Ethernet CRC и контрольной суммы UDP) может улучшить ситуацию.

- А если выкинуть ПК и соединить два девайса напрямую? По крайней мере не будет зависимости от ОС.

- Если вдруг есть доступ к чему-нибудь такому: http://www.smartechconsulting.com/SMB-200-...ortable-chassis то все можно протестить досконально
Go to the top of the page
 
+Quote Post
Костян
сообщение Nov 9 2011, 10:51
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (cioma @ Nov 8 2011, 15:00) *
Пришел кадр Ethernet, картой обработался и положился во внутренний буфер карты. После заполнения внутреннего буфера до определенного уровня карта выставляет запрос на прерывание, ОС реагирует, настраивает DMA, и данные из внутреннего буфера передаются в системное ОЗУ ПК. Ну а дальше софт стека протоколов разбирает кадры.

спасибо. примерно так и представлял. Насколько трудоемко и возможно ли будет сделать следующее:
1. Выделить память в ОЗУ
2. Настроить сетевую как master и напрямую слать данные из внутреннего буфера в в выделенную память в ОЗУ.
Насколько я понимаю, нужен новый драйвер для сетевой.


QUOTE
- Постоянным (!) потоком данных под 100 Mbps можно положить любую ширпотребныю сетевуху.

- Какая сетевая карта используется? Есть подозрение что использование карты на последних сетевых чипах Intel c PCIe и с различными аппаратными ускорениями (хотя бы расчет Ethernet CRC и контрольной суммы UDP) может улучшить ситуацию.

Сетевая интегрированная в чипсет Intel P67. UDP CRC отключена (шлю нули).

QUOTE
- А если выкинуть ПК и соединить два девайса напрямую? По крайней мере не будет зависимости от ОС.

В том то и соль, что нужно соеденить устройство и тупой ПК.

QUOTE
- Если вдруг есть доступ к чему-нибудь такому: http://www.smartechconsulting.com/SMB-200-...ortable-chassis то все можно протестить досконально

к сожалению нету доступа к подобному устройству . чем богаты.... , как говорится sm.gif

а есть ли смысл попробывать внешную сетевую типа ?
http://www.stikc.com/Intel-PRO-1000-PT-DUA...3959-EXPI9402PT
Go to the top of the page
 
+Quote Post
cioma
сообщение Nov 9 2011, 16:12
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



QUOTE (Костян @ Nov 9 2011, 11:51) *
Насколько я понимаю, нужен новый драйвер для сетевой.


Ага, надо будет самому драйвер писать.

QUOTE (Костян @ Nov 9 2011, 11:51) *
а есть ли смысл попробывать внешную сетевую типа ?
http://www.stikc.com/Intel-PRO-1000-PT-DUA...3959-EXPI9402PT


Думаю, что есть.
Go to the top of the page
 
+Quote Post
DuHast
сообщение Nov 9 2011, 17:00
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(Костян @ Nov 8 2011, 10:12) *
Дано:
DevBoard, которая формирует UDP пакеты размерностью Data=1024.

попробуйте JumboFrame. У нас тоже UDP со счетчиком длинна пакетов 8К. На хороший комп с WinXP поток в 300 Мбит запросто проходит, а то и больше. Свой драйвер тоже писали, но это уже когда по 10 GbE поток заводили.
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Nov 9 2011, 19:21
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219



Цитата(Костян @ Nov 8 2011, 11:12) *
...
Цель - добиться максимальной пропускной способности при 100% доставки пакетов.
...


Попробуйте два компа по сетке соединить и большие файлы по сети гонять, какая будет скорость? И это при хреновых встроенных сетевухах.
=> Нужен протокол TCP или его аналог.
У нас тоже были проблемы с потерей пакетов под виндой - вылечилось самопальным транспортным протоколом (на полный TCP слишком много ресурсов надо, а ПЛИС не резиновая).


P.S. jumbo фреймы конечно сильно уменьшали потери пакетов, а если мышкой не шевелить и все остальные программы в винде закрыть и не дышать - то работало практически на максимуме скорости. Однако, заказчик сказал что его сетевая инфраструктура не поддерживает jumbo фреймы.
Go to the top of the page
 
+Quote Post
Костян
сообщение Nov 10 2011, 06:25
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (DuHast @ Nov 9 2011, 15:00) *
попробуйте JumboFrame. У нас тоже UDP со счетчиком длинна пакетов 8К. На хороший комп с WinXP поток в 300 Мбит запросто проходит, а то и больше. Свой драйвер тоже писали, но это уже когда по 10 GbE поток заводили.

1. Длина пакета 8K у Вас не разбивалась на отдельные пакеты меньшей длины ?
2. Драйвер свой писали, а где брали документацию на контретную сетевую плату ?

QUOTE
=> Нужен протокол TCP или его аналог.
У нас тоже были проблемы с потерей пакетов под виндой - вылечилось самопальным транспортным протоколом (на полный TCP слишком много ресурсов надо, а ПЛИС не резиновая).

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

QUOTE
попробуйте JumboFrame

спасибо, посмотрю

Подытожим. Из всего выше сказаного следует, что нужно увеличивать длину пакета. Верно я понимаю ?
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016