Перейти к содержанию
    

Прием 10G на ПЭВМ с Windows

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

Вопрос к тем кто работает с 10G.

Возникла задача зарегистрировать данные на компьютере(Windows).

Скорость выдачи данных до 6 Гбит. Сетевая карта Intel520.

Попробовали принимать через "PSSDK", происходит потеря пакетов.

 

Подскажите кто что может.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

...

Возникла задача зарегистрировать данные на компьютере(Windows).

Скорость выдачи данных до 6 Гбит. Сетевая карта Intel520.

Попробовали принимать через "PSSDK", происходит потеря пакетов.

...

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

 

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

 

Удачи! Rob.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Принимаем пакеты UDP.

Если не секрет, через что принимали.

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

 

Удачи! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

Попробовали сделать через сокет, потери пакетов возросли.

Может вспомните какие-нибудь нюансы.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

Попробовали сделать через сокет, потери пакетов возросли.

Может вспомните какие-нибудь нюансы.

 

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

 

Буфер для сокета может быть нужно увеличить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделали RX буфер для сокета в 64МБ.

Объем ошибок резко сократился.

Наблюдался момент прихода пакетов не подряд. Сделали буфер задержки.

Ошибки теперь наблюдаются редко, но все же они есть.

Обратил внимание, что они появляются когда:

- происходит деинсталляция программ в системе

- работала виртуальная машина

- был входящий udp-траффик ~100Мб/c на карту 1G (может просто совпадение).

Есть ли способ улучшить прием?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть ли способ улучшить прием?

 

Перейти на Linux (если это возможно) и использовать DPDK.

Можете почитать советы из статьи

Но она, опять же, под Linux. Я не в курсе, если ли в Windows похожие "крутилки".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть ли способ улучшить прием?

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

 

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

 

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

 

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

 

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

 

P.S. А вообще, мне тоже многие знакомы профи сказали "переходи на Линукс" :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Попробовал.

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

Это нормально?

 

А загрузка процессора что при использовании WSA, что не WSA, итак была небольшой 1-2%.

Размер буффера сокета на прием 256М. Т.е. не кратно длине 1 пакета.

Ошибки изредка все же есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

 

Попробовал.

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

Это нормально?

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

 

 

Размер буффера сокета на прием 256М. Т.е. не кратно длине 1 пакета.

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

 

Ошибки изредка все же есть.

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

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Пробовал использовать 64 структуры у WSARecv… Не помогло…

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

 

В интернете про настройки мера-буферов ничего не нашел…

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Написал вам в личку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обратил внимание, что они появляются когда:

- происходит деинсталляция программ в системе

- работала виртуальная машина

- был входящий udp-траффик ~100Мб/c на карту 1G (может просто совпадение). а это нехорошо если карты настроены по умолчанию

[/b]Есть ли способ улучшить прием?

Необходимо перевести сетевую карту на разбор пакетов с минимальным участием процессор

Смотреть тут1 и тут2 сходить в зоны для разработчиков на сайтах Intel и Microsoft.com или попросить настроить админа.

Для минимизация влияния windows попробуйте Netdma

У меня в серверах помогает,для максимальной производительности клиенту высылаю REG файл с тюнингом сетевухи.

На 10 G тонкий тюнинг весьма помогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...