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

 
 
 
Reply to this topicStart new topic
Vacik
сообщение Jan 10 2017, 12:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 2-10-10
Из: Москва
Пользователь №: 59 883



Приветствую.
Вопрос к тем кто работает с 10G.
Возникла задача зарегистрировать данные на компьютере(Windows).
Скорость выдачи данных до 6 Гбит. Сетевая карта Intel520.
Попробовали принимать через "PSSDK", происходит потеря пакетов.

Подскажите кто что может.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jan 10 2017, 13:38
Сообщение #2


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(Vacik @ Jan 10 2017, 15:41) *
...
Возникла задача зарегистрировать данные на компьютере(Windows).
Скорость выдачи данных до 6 Гбит. Сетевая карта Intel520.
Попробовали принимать через "PSSDK", происходит потеря пакетов.
...

А протокол какой требуется?

Мы под Win7 делали прием потока 2 x 10G (2.2 Gbyte/s) через обычный UDP стек.

Удачи! Rob.



Go to the top of the page
 
+Quote Post
Vacik
сообщение Jan 10 2017, 14:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 2-10-10
Из: Москва
Пользователь №: 59 883



Принимаем пакеты UDP.
Если не секрет, через что принимали.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jan 10 2017, 14:51
Сообщение #4


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(Vacik @ Jan 10 2017, 17:22) *
Принимаем пакеты UDP.
Если не секрет, через что принимали.

"через обычный UDP стек" виндовый. Ну и родные драйвера для сетевой карточки. Точка-точка соединения FPGA - PC. Сетевая тоже на чипе Intel но тип сейчас не помню (это года 4 назад было). Для сетевой включен режим flow control, jumbo-frame 4-8K. Софт свой - по заголовкам пакетов собирал потоки с 2-4 линков в один с проверкой целостности.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Vacik
сообщение Jan 11 2017, 11:27
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 2-10-10
Из: Москва
Пользователь №: 59 883



Добрый день!
Попробовали сделать через сокет, потери пакетов возросли.
Может вспомните какие-нибудь нюансы.

Или кто что еще подскажет.
Go to the top of the page
 
+Quote Post
Кнкн
сообщение Jan 11 2017, 11:51
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71



Цитата(Vacik @ Jan 11 2017, 14:27) *
Добрый день!
Попробовали сделать через сокет, потери пакетов возросли.
Может вспомните какие-нибудь нюансы.

Или кто что еще подскажет.


Буфер для сокета может быть нужно увеличить.
Go to the top of the page
 
+Quote Post
Vacik
сообщение Jan 14 2017, 09:19
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 2-10-10
Из: Москва
Пользователь №: 59 883



Сделали RX буфер для сокета в 64МБ.
Объем ошибок резко сократился.
Наблюдался момент прихода пакетов не подряд. Сделали буфер задержки.
Ошибки теперь наблюдаются редко, но все же они есть.
Обратил внимание, что они появляются когда:
- происходит деинсталляция программ в системе
- работала виртуальная машина
- был входящий udp-траффик ~100Мб/c на карту 1G (может просто совпадение).
Есть ли способ улучшить прием?
Go to the top of the page
 
+Quote Post
des333
сообщение Jan 14 2017, 10:24
Сообщение #8


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

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(Vacik @ Jan 14 2017, 12:19) *
Есть ли способ улучшить прием?


Перейти на Linux (если это возможно) и использовать DPDK.
Можете почитать советы из статьи
Но она, опять же, под Linux. Я не в курсе, если ли в Windows похожие "крутилки".


--------------------
Go to the top of the page
 
+Quote Post
mikeT
сообщение Jan 16 2017, 02:12
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 6-02-08
Из: Новосибирск
Пользователь №: 34 789



Цитата(Vacik @ Jan 14 2017, 16:19) *
Есть ли способ улучшить прием?

Попробуйте использовать WSASocket и все что с ним связано - это если делать под Windows. Суть в том, что можно организовать прием пачки пакетов как-бы "автоматически", т.е. без "дергания" механизмов синхронизации уровня пользователя. Ну и естественно, организуете свою буферизацию как бы вторым слоем.

У нас стояла задача выжать предельную производительность при приеме 1Г потока с нашего железа на комп под виндой. Сначала я написал пробной тест с использованием обычных сокетов, но были проблемы с потерей пакетов, переупорядочиванием (даже на локал-хосте!) и, самое главное, загрузкой процессора. У нас пакеты не превышали обычную длину, т.е. 1472 байта. Был организован пул буферов (количество буферов естественно настраивается, но из практики их количество = 64-256). На каждый принятый пакет формируется сообщение (вроде бы там семафор используется, но это уже детали реализации) и управление передается следующему слою софта (следующему потоку).

С WSA сокетами получается двухуровневая буферизация - на уровне WSA организуется пул "мега"-буферов каждый на 64 пакета (это вроде максимум, что WSA может позволить) и ОС дергается уже в 64 раза реже, чем при использовании обычных сокетов. Ну а далее все тоже самое - организуется еще один слой - ряд буферов, как и в первом случае, но теперь это уже буфера 64*1472 (все параметры есс-но задаются как минимум на уровне компайл-тайм), их количество у нас порядка 128.

Скорость в установившемся режиме (гоняли сутками) удалось получить на уровне 99.7% или 99.8% от теоретического предела для 1Г. Стабильность высокая. Загрузка процессора небольшая. При грамотно написанном софте можно распараллелить задачу - как минимум аффиннити процессорам задать, но нам и этого не потребовалось.

100% исключить пропадания пакетов нельзя, да и сам UDP это не гарантирует.

P.S. А вообще, мне тоже многие знакомы профи сказали "переходи на Линукс" rolleyes.gif
Go to the top of the page
 
+Quote Post
Vacik
сообщение Jan 16 2017, 19:38
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 2-10-10
Из: Москва
Пользователь №: 59 883



//на уровне WSA организуется пул "мега"-буферов каждый на 64 пакета

это происходит автоматически при использовании WSA?

Попробовал.
Ошибки появляются в процессе загрузки ОС на VirtualBox. Видимо что-то дергает он у хостовой ОС.
Это нормально?

А загрузка процессора что при использовании WSA, что не WSA, итак была небольшой 1-2%.
Размер буффера сокета на прием 256М. Т.е. не кратно длине 1 пакета.
Ошибки изредка все же есть.
Go to the top of the page
 
+Quote Post
mikeT
сообщение Jan 17 2017, 01:41
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 6-02-08
Из: Новосибирск
Пользователь №: 34 789



Цитата(Vacik @ Jan 17 2017, 02:38) *
//на уровне WSA организуется пул "мега"-буферов каждый на 64 пакета
это происходит автоматически при использовании WSA?

Вы должны задать это все сами. Там не совсем так просто, но в документации написано все достаточно внятно. Кроме буферов там подцепляются т.н. overlapped events и т.д.


Цитата(Vacik @ Jan 17 2017, 02:38) *
Попробовал.
Ошибки появляются в процессе загрузки ОС на VirtualBox. Видимо что-то дергает он у хостовой ОС.
Это нормально?

Насчет этого ничего сказать не могу. Мы работали под виндой чистой. Попробуйте для начала тоже под "чистой" виндой потестить, а иначе вы рискуете бороться с проблемами не связанными собственно с сетью и сокетами (вашей реализацией), а связанными с реализацией сторонних фирм.


Цитата(Vacik @ Jan 17 2017, 02:38) *
Размер буффера сокета на прием 256М. Т.е. не кратно длине 1 пакета.

Размер этого буфера влияет конечно, но после какого-то значения (скажем 8М по нашему опыту) уже не так сильно

Цитата(Vacik @ Jan 17 2017, 02:38) *
Ошибки изредка все же есть.

Это нормально, это же UDP.



Go to the top of the page
 
+Quote Post
Vacik
сообщение Jan 18 2017, 11:54
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 2-10-10
Из: Москва
Пользователь №: 59 883



Не могли бы Вы подробнее описать предлагаемый механизм?

Пробовал использовать 64 структуры у WSARecv… Не помогло…
Во всех структурах оказываются одинаковые данные. По документации ведь WSARecv предназначен для приема только одной датаграммы.

В интернете про настройки мера-буферов ничего не нашел…
Go to the top of the page
 
+Quote Post
mikeT
сообщение Jan 19 2017, 05:47
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 6-02-08
Из: Новосибирск
Пользователь №: 34 789



Цитата(Vacik @ Jan 18 2017, 18:54) *
Не могли бы Вы подробнее описать предлагаемый механизм?


Написал вам в личку.
Go to the top of the page
 
+Quote Post
Verifi
сообщение Jan 19 2017, 09:04
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 315
Регистрация: 5-05-08
Из: Kursk
Пользователь №: 37 282



Цитата(Vacik @ Jan 14 2017, 12:19) *
Обратил внимание, что они появляются когда:
- происходит деинсталляция программ в системе
- работала виртуальная машина
- был входящий udp-траффик ~100Мб/c на карту 1G (может просто совпадение). а это нехорошо если карты настроены по умолчанию
[/b]Есть ли способ улучшить прием?

Необходимо перевести сетевую карту на разбор пакетов с минимальным участием процессор
Смотреть тут1 и тут2 сходить в зоны для разработчиков на сайтах Intel и Microsoft.com или попросить настроить админа.
Для минимизация влияния windows попробуйте Netdma
У меня в серверах помогает,для максимальной производительности клиенту высылаю REG файл с тюнингом сетевухи.
На 10 G тонкий тюнинг весьма помогает.


--------------------
"Если я в чем-то сомневаюсь, я возвращаюсь к началу"
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 19:44
Рейтинг@Mail.ru


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