Jump to content

    

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

Привет.

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
32 минуты назад, syoma сказал:

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

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

Share this post


Link to post
Share on other sites

Вроде NVME может до 3300МБ/с записывать.

Share this post


Link to post
Share on other sites

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

26 minutes ago, syoma said:

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

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

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

Удачи! Rob.

 

Share this post


Link to post
Share on other sites

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

Quote

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
3 hours ago, RobFPGA said:

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

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

Кто еще есть?

Share this post


Link to post
Share on other sites

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

1 hour ago, syoma said:

Кто еще есть?

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

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Ок. Буду пробовать.

Share this post


Link to post
Share on other sites
On 3/19/2020 at 10:52 AM, RobFPGA said:

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

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

Share this post


Link to post
Share on other sites

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

5 minutes ago, syoma said:

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

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

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

 

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

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now