|
|
  |
Где теряются UDP пакеты? Как повысить надежность доставки ? |
|
|
|
Nov 8 2011, 07:12
|
Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
Nov 8 2011, 09:01
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Костян @ Nov 8 2011, 11:12)  ..UDP пакеты размерностью Data=1024...Цель - добиться максимальной пропускной способности при 100% доставки пакетов. 1. Где происходит потеря пакетов ? 2. Как повысить надежность доставки пакетов ? 3. Может ли размер пакета влиять на надежность доставки ? Возможно стоит уменьшить до 128 или 256 UDP не гарантирует доставку. UDP гарантирует, что пакет будет передан. т.е. уйдёт. всё. Изначально ставить не выполнимую цель = мягко говоря не корректно. это типа раз... где происходит потеря? либо помеха, либо не успевает приёмник. надёжность повысить? кхм... выкинуть льюникс, написать свою заточку. два девайса и кабель в свинцовые наряды и прочую мурню...и всё равно это не 100%  по определению... размер пакета может влиять на оптимальность обработки на приёмной стороне. т.е. если вы заглянете в код приёмника на предмет "А какой тебе лучше размер скормить зараза?" то Вы ответите на свой вопрос сами. по поводу размеров - тут думаю будет просче тупо прогнать разные тесты, которые смогут дать средний по больнице результат...который можно принять за основу - дескать этот размер получше... мне кажется, что Вы заходите немного не с той стороны. вот эти вещи разные: а) пропускная способность б) надёжность доставки если Вам актуально надёжность доставки - то тогда протокол не подходит. если пропускная способность - то тут надо считать и смотреть на возможности канала, приёмника, оси... где то так (круглый)
|
|
|
|
|
Nov 8 2011, 09:06
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
QUOTE (kolobok0 @ Nov 8 2011, 07:01)  где происходит потеря? либо помеха, либо не успевает приёмник. помеха исключена. ошибки были бы тогда при малой загрузке сети. Почти уверен ,что не успевает ОС считать данные. Но здесь непонятка. На сетевую карточку приходят пакеты , куда она их девает ? Хранит в своих фифошках или отсылает в ОЗУ ? QUOTE вот эти вещи разные: а) пропускная способность б) надёжность доставки думаю на скоростях до 1Гбит/с эти два пункта можно совместить.
|
|
|
|
|
Nov 8 2011, 11:15
|
Знающий
   
Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059

|
QUOTE (Fast @ Nov 8 2011, 08:38)  может быть - драйвер сетевой карты (а если запуститься под Win ?) готовлю тест. QUOTE - настройки сетевой карты (кол-во дескрипторов, буфер приема, частота прерываний) попробую  QUOTE - разница в клоках DevBrd и чипа сетевой карты хм...а как это может влиять на потери ? QUOTE - софт приемника не успевает обрабатывать заголовки пакетов (скипает счетчики) тоже возможно, но как повысить скорость обработки ? отказаться от стандартной ОС и переходить на RTOS? QUOTE UDP не гарантирует доставку. UDP гарантирует, что пакет будет передан. т.е. уйдёт. насколько я представляю состояние дел, UDP действительно не гарантирует доставку пакета, но потери происходят при слишком сильной развлетвленной сети. Тут же КРОСС кабель, т.е фактически теряются IP пакеты.
|
|
|
|
|
Nov 8 2011, 11:57
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(Костян @ Nov 8 2011, 15:15)  хм...а как это может влиять на потери ? пропуск-вставка лишнего бита в чипе приемника, если тактирующие генераторы имеют номиналы, отличающиеся на проценты. Соотв. произойдет отбрасывание пакета UDP. Цитата(Костян @ Nov 8 2011, 15:15)  тоже возможно, но как повысить скорость обработки ? отказаться от стандартной ОС и переходить на RTOS? для начала нужно выяснить, где ошибка. Для этого надо обрабатывать данные после их накопления в большом буфере ОЗУ, а не в процессе приема. И писать чем-то проверенным, например, wireshark
|
|
|
|
|
Nov 8 2011, 13:50
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата например, wireshark на скоростях близких 100 мбит/c он еще как теряет пакеты, а на 1 Гб/с так вобще надо в тачку 16 гб ОЗУ и SSD raid, так что забудьте.
|
|
|
|
|
Nov 8 2011, 14:18
|
Знающий
   
Группа: Свой
Сообщений: 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 для начала нужно выяснить, где ошибка. Для этого надо обрабатывать данные после их накопления в большом буфере ОЗУ так то оно так, но как это сделать под ОС ? И еще раз повторю вопрос. На сетевую карточку приходят пакеты , куда она их девает ? Хранит в своих фифошках или отсылает в ОЗУ ? Если в ОЗУ, то по какому адрессу и кто задает размер буфера?
|
|
|
|
|
Nov 8 2011, 14:28
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(MALLOY2 @ Nov 8 2011, 17:50)  на скоростях близких 100 мбит/c он еще как теряет пакеты, а на 1 Гб/с так вобще надо в тачку 16 гб ОЗУ и SSD raid, так что забудьте. есть мнение, что просто Вы не умеете его готовить. Коллеги, сидящие рядом, подтверждают полноту и целостность приема при записи в ОЗУ (почти 1 Гб/с) и на HDD не SSD raid (около 800 Мб/с). может дело в конфигурации железа, версиях софта ?
|
|
|
|
|
Nov 8 2011, 16:00
|
Профессионал
    
Группа: Свой
Сообщений: 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 то все можно протестить досконально
|
|
|
|
|
Nov 9 2011, 10:51
|
Знающий
   
Группа: Свой
Сообщений: 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 то все можно протестить досконально к сожалению нету доступа к подобному устройству . чем богаты.... , как говорится  а есть ли смысл попробывать внешную сетевую типа ? http://www.stikc.com/Intel-PRO-1000-PT-DUA...3959-EXPI9402PT
|
|
|
|
|
Nov 9 2011, 19:21
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(Костян @ Nov 8 2011, 11:12)  ... Цель - добиться максимальной пропускной способности при 100% доставки пакетов. ... Попробуйте два компа по сетке соединить и большие файлы по сети гонять, какая будет скорость? И это при хреновых встроенных сетевухах. => Нужен протокол TCP или его аналог. У нас тоже были проблемы с потерей пакетов под виндой - вылечилось самопальным транспортным протоколом (на полный TCP слишком много ресурсов надо, а ПЛИС не резиновая). P.S. jumbo фреймы конечно сильно уменьшали потери пакетов, а если мышкой не шевелить и все остальные программы в винде закрыть и не дышать - то работало практически на максимуме скорости. Однако, заказчик сказал что его сетевая инфраструктура не поддерживает jumbo фреймы.
|
|
|
|
|
Nov 10 2011, 06:25
|
Знающий
   
Группа: Свой
Сообщений: 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 спасибо, посмотрю Подытожим. Из всего выше сказаного следует, что нужно увеличивать длину пакета. Верно я понимаю ?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|