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

Захватить Ethernet Traffic и записать на диск > 45 Мбайт/c ?

Привет.

Вопрос - есть железяка, которая плюется очень частыми MAC фреймами (фактически стримит их с интервалом 100мкс), создавая трафик около 45Мбайт/с на гигабитном Ethernet интерфейсе. 

Требуется просто ловить эти фреймы обычным компом с сетевой карточкой и записывать на диск. Потеря пакетов нежелательна, но поштучно допустима. Желательно, чтобы запись могла вестись пока хватает винчестера - т.е несколько дней или часов непрерывно.

В будущем трафик может увеличиться до 100Мбайт(тогда карточка будет 10Гбит). Возможно, надо будет буфферизировать в памяти, сжимать, и записывать уже сжатый поток. Возможно, что надо будет просто анализировать налету, ожидая появления определенных данных(триггера) и только тогда записывать на диск.

Пробовали Wiresharkом - затыкается. Может я не там смотрю? Или надо производительную машину просто? Что можно применить готового?

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


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

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

Хорошую машинку надо бы естественно и сетевуху не самую дешевую.  Подшаманить настройки сетевой и TCP/IP стека если есть возможность для минимизации потерь в очередях контроллера. Капчить без использования  GUI, а из командной строки. У меня tcpdump  пишет ~1 GB/s без затыков.

Возится со сжатием для 50-100 MB/s IMHO смысла нет.

Удачи! Rob.

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


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

Спасибо. Вопрос - а что делать, если трафик будет не 45Мб, а 500Мб/с? Т.е. на порядок больше? Как его записать?

Вообще получается 700Мбит/с максимум. Взять FPGA + NVME SSD и NVME контроллер на ней?

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


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

32 минуты назад, syoma сказал:

Спасибо. Вопрос - а что делать, если трафик будет не 45Мб, а 500Мб/с? Т.е. на порядок больше? Как его записать?

Распределить данные на несколько дисков. Как в RAID, какой-то из них умеет так делать.

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


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

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

26 minutes ago, syoma said:

Вопрос - а что делать, если трафик будет не 45Мб, а 500Мб/с? Т.е. на порядок больше? Как его записать?

Да все то же самое делать, только чуть быстрее :biggrin:   Я писал непрерывный трафик  ~4-6 GByte/s  с нескольких  10G сетевых на RAID0 из 32 SSD.  А сейчас и 2-4 NVME SSD такое сможет 

В вашем случае,  как я понял, основная сложность  это то что идет большое количество  малых пакетов. Основные потери при этом возникают во входных очередях  сетевой карты. Соответственно нужна хорошая карта  с возможно несколькими очередями большей глубины и распаралеливанием обслуживания очередей на несколько ядер. Ну или  платка на FPGA  чтобы внутри  можно было сделать свою буфер/очередь с объединением пакетов и триггером событий. 

Удачи! Rob.

 

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


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

Не, пакеты будут максимального размера.

Quote

Я писал непрерывный трафик  ~4-6 GByte/s  с нескольких  10G сетевых на RAID0 из 32 SSD.  А сейчас и 2-4 NVME SSD такое сможет 

Тем же tcpdump? Что за железо(сетевухи, процессор)?

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


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

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

27 minutes ago, syoma said:

Тем же tcpdump? Что за железо(сетевухи, процессор)?

Нет - не tcpdump.  Софт был свой.  Да и трафик  был не похож на ваш, там был поток данных с FPGA платы, который разбивался не несколько параллельных каналов 10G по UDP,  а на приеме с нескольких сетевых объединялся и записывался.
Сетевые были Intel 2x10G. Сейчас не вспомню точно тип (надо форуме поискать, была тема с пару лет назад я там подробнее описывал железо).  Supermicro сервер, 2 x Xeon .
А трафик с одной 10G сетевой нормально пишется tcpdump  (опять же на серверном железе).       

Удачи! Rob.

P.S.  Ряд контор делают специальные сетевые заточенные для гарантированного захвата всего трафика.  Как пример https://exablaze.com/capture

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


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

3 hours ago, RobFPGA said:

P.S.  Ряд контор делают специальные сетевые заточенные для гарантированного захвата всего трафика.  Как пример https://exablaze.com/capture

Написал им, но выглядят слишком наворочено для моего применения. Какой-то суперточный тайм-стэмпинг - мне такой не нужен, так как у меня в самом фрейме уже будет записана метка времени для данных в нем. А когда этот фрейм будет принят даталоггером, мне пофиг.

Кто еще есть?

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


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

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

1 hour ago, syoma said:

Кто еще есть?

Не знаю, их много (lossless packet capture nic),  я специально не занимался этим - мне было проще  на FPGA сделать что нужно было.  Поищите  по теме "capture millions packet" можно найти инфу  как настраивать стек при большом packet rate.  

Удачи! Rob.

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


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

Та в общем вроде нет особых проблем с приемом.

Вот, например, 8 лет назад - там что-то под 500к пакетов в секунду с средней полосой за 4Гбит/с.

http://www.serverframework.com/asynchronousevents/2012/08/winsock-registered-io-io-completion-port-performance.html

Проблем с записью тоже нет, если обеспечите дисковый массив с подходящей пропускной способностью. Если вдруг чего, то RIO и memory mapped files очень даже хорошо совмещаются, практически имеете полностью zerocopy.

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


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

On 3/19/2020 at 10:52 AM, RobFPGA said:

Сетевые были Intel 2x10G. Сейчас не вспомню точно тип (надо форуме поискать, была тема с пару лет назад я там подробнее описывал железо). 

В загашнике нашлась 10Гбитная сетевуха на i82599ES на 2 порта. Как думаете, подойдет для этих целей?

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


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

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

5 minutes ago, syoma said:

В загашнике нашлась 10Гбитная сетевуха на i82599ES на 2 порта. Как думаете, подойдет для этих целей?

Думаю  вполне подойдет. 

Удачи! Rob.

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


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

В общем протестировал 45 и 100Мбайт/с - пишет, зараза. Причем взял не самый крутой SSD, а тот, который без дела валяллся. Линукс показал, что возможная скорость записи 180МБайт/с. TCPdump все переварил, только он теряет пару тысяч пакетов вначале, когда инициализирует буффер, а потом все ОК и потерь больше нет.

Загрузка проца 28%.

Сейчас буду экспериментировать с 10GB. Так как NVME SSD в наличии пока нет, решил попробовать создать RAM-диск и писать туда - на машинке 64ГБ памяти, на полминуты хватит.

 

Тут есть одна проблема. Ожидается, что запись будет вестись в режиме 24/7/365 и у меня выходит примерно 60ТБ за день. Держать на диске много данных не надо - несколько часов максимум, но у SSD проблема - с такой скоростью перезаписи их ресурса хватает на 20 дней максимум... А если брать магнитные SSD, то надо будет RAID1 на 10 штук минимум, чтобы обеспечить такую пропускную способность. В общем, не пойму пока какой массив дешевле получается.  

 

 

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


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

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

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

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

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

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

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

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

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

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