Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прием 10G на ПЭВМ с Windows
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
Vacik
Приветствую.
Вопрос к тем кто работает с 10G.
Возникла задача зарегистрировать данные на компьютере(Windows).
Скорость выдачи данных до 6 Гбит. Сетевая карта Intel520.
Попробовали принимать через "PSSDK", происходит потеря пакетов.

Подскажите кто что может.
RobFPGA
Приветствую!

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

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

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

Удачи! Rob.



Vacik
Принимаем пакеты UDP.
Если не секрет, через что принимали.
RobFPGA
Приветствую!

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

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

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

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

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


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


Перейти на Linux (если это возможно) и использовать DPDK.
Можете почитать советы из статьи
Но она, опять же, под Linux. Я не в курсе, если ли в Windows похожие "крутилки".
mikeT
Цитата(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
Vacik
//на уровне WSA организуется пул "мега"-буферов каждый на 64 пакета

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

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

А загрузка процессора что при использовании WSA, что не WSA, итак была небольшой 1-2%.
Размер буффера сокета на прием 256М. Т.е. не кратно длине 1 пакета.
Ошибки изредка все же есть.
mikeT
Цитата(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.



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

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

В интернете про настройки мера-буферов ничего не нашел…
mikeT
Цитата(Vacik @ Jan 18 2017, 18:54) *
Не могли бы Вы подробнее описать предлагаемый механизм?


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

Необходимо перевести сетевую карту на разбор пакетов с минимальным участием процессор
Смотреть тут1 и тут2 сходить в зоны для разработчиков на сайтах Intel и Microsoft.com или попросить настроить админа.
Для минимизация влияния windows попробуйте Netdma
У меня в серверах помогает,для максимальной производительности клиенту высылаю REG файл с тюнингом сетевухи.
На 10 G тонкий тюнинг весьма помогает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.