WinPcap и захват пакетов с 10 Гбит Ethernet
От: cppdev  
Дата: 30.07.13 12:32
Оценка:
Необходимо захватывать все входящие пакеты с 10 GBit Ethernet, исходящих пакетов нет, все пакеты генерирует спец. железка.
Делаю с помощью WinPcap, захват идет в память — при скорости свыше 2Гбит/с пакеты начинают отбрасываться(тестовое приложение их не получает),
при этом Wireshark показывает в своей статистике, что запрошенное число пакетов до сетевой карты доходит.

Вопрос: на каком уровне стека драйверов пакеты начинают отбрасываться/пропускаться?
Re: WinPcap и захват пакетов с 10 Гбит Ethernet
От: Аноним  
Дата: 31.07.13 10:08
Оценка:
Здравствуйте, cppdev, Вы писали:

C>Необходимо захватывать все входящие пакеты с 10 GBit Ethernet, исходящих пакетов нет, все пакеты генерирует спец. железка.

C>Делаю с помощью WinPcap, захват идет в память — при скорости свыше 2Гбит/с пакеты начинают отбрасываться(тестовое приложение их не получает),
C>при этом Wireshark показывает в своей статистике, что запрошенное число пакетов до сетевой карты доходит.

C>Вопрос: на каком уровне стека драйверов пакеты начинают отбрасываться/пропускаться?


1.
Какой внутренний размер буффера winpcap ставите?
Попробуйте увеличить его размер.
2.
Пакеты начинают отбрасываться когда стек для данного протокола переполнен.
Недавно писал программу для гигабитной сети по средствам winpcap. Так что задача была та же только скорость ниже.
3.Отслеживаете ли вы сами пропуск пакетов в stat_packet_handler функции. Если нет то попробуйте.
Если да , то какими порциями пропускаются пакеты.
Re[2]: WinPcap и захват пакетов с 10 Гбит Ethernet
От: cppdev  
Дата: 02.08.13 06:10
Оценка:
А>1.
А>Какой внутренний размер буффера winpcap ставите?
А>Попробуйте увеличить его размер.

Пробовал на размере буфера от 1 ГБ до 3 ГБ — не помогает.

А> 3.Отслеживаете ли вы сами пропуск пакетов в stat_packet_handler функции. Если нет то попробуйте.

А>Если да , то какими порциями пропускаются пакеты.

Да, пробовал получать статистику. Пакеты могут пропускаться как небольшими равными долями в течении всего сеанса захвата, так и сразу может произойти пропуск большого их числа, например 100 — 150 т. пакетов. Причем что интересно: в поле ps_recv находится число захваченных драйвером пакетов и оно не совпадает с тем количеством пакетов, что я получаю в приложении. Пакетов отброшенных драйвером (поле ps_drop) не много — из 3 000 000 только 50 000.
Re[3]: WinPcap и захват пакетов с 10 Гбит Ethernet
От: -prus-  
Дата: 02.08.13 21:08
Оценка:
Здравствуйте, cppdev, Вы писали:

C>Пробовал на размере буфера от 1 ГБ до 3 ГБ — не помогает.

C>Да, пробовал получать статистику. Пакеты могут пропускаться как небольшими равными долями в течении всего сеанса захвата, так и сразу может произойти пропуск большого их числа, например 100 — 150 т. пакетов. Причем что интересно: в поле ps_recv находится число захваченных драйвером пакетов и оно не совпадает с тем количеством пакетов, что я получаю в приложении. Пакетов отброшенных драйвером (поле ps_drop) не много — из 3 000 000 только 50 000.

Давайте по порядку... Что за 10 Гбитный адаптер на захватчике?
Специальная железка для генерации трафика — это случайно не ixia?
После получения пакета вы с ним что-то делаете (копируете, разбираете, еще что-то)?

Пока могу сказать лишь, что встречал несовпадение количества отправленных пакетов и принятых из-за того, что драйвер сетевого адаптера их откидывал из-за неправельных контрольных сумм.
Встречал это на Linux'е на 1 Гбитном трафике с дровами tg3. Лечилось это соответственно отключением проверки контрольных сумм пакетов драйвером. Попробуйте отключить данную проверку, если это возможно и отпишите как обстоят дела.

Вообще для обработки сетевого трафика на скоростях 10 Гбит/сек использовать нужно несколько другие специализированные механизы. Например, из дорогих решений это Endace DAG, из дешевых можно посмотрет pf_ring + DNA или dpdk. Правда эти решения заточены под Linux.
С уважением,
Евгений
Re[4]: WinPcap и захват пакетов с 10 Гбит Ethernet
От: cppdev  
Дата: 05.08.13 10:27
Оценка:
P>Давайте по порядку... Что за 10 Гбитный адаптер на захватчике?
Захватчик — компьютер промышленного исполнения с интегрированным адаптером на базе чипа Intel 82599.

P>Специальная железка для генерации трафика — это случайно не ixia?

Нет, это спец. плата на FPGA Xilinx.

P>После получения пакета вы с ним что-то делаете (копируете, разбираете, еще что-то)?

После получения пакетов в обработчике pcap_handler подсчитывается их число. Именно после подсчета здесь их число отличается от числа принятых драйвером winpcap пакетов (их меньше чем в поле ps_recv).

P>Пока могу сказать лишь, что встречал несовпадение количества отправленных пакетов и принятых из-за того, что драйвер сетевого адаптера их откидывал из-за неправильных контрольных сумм.

P>Встречал это на Linux'е на 1 Гбитном трафике с дровами tg3. Лечилось это соответственно отключением проверки контрольных сумм пакетов драйвером. Попробуйте отключить данную проверку, если это возможно и отпишите как обстоят дела.
Отключить проверку нельзя.

P>Endace DAG, из дешевых можно посмотреть pf_ring + DNA

Видел эти решения, но захват необходимо осуществлять под Windows 7 x64 и без использования доп. железа.
Re[5]: WinPcap и захват пакетов с 10 Гбит Ethernet
От: -prus-  
Дата: 05.08.13 11:06
Оценка:
Здравствуйте, cppdev, Вы писали:

P>>Endace DAG, из дешевых можно посмотреть pf_ring + DNA

C>Видел эти решения, но захват необходимо осуществлять под Windows 7 x64 и без использования доп. железа.

А что за процессор на компе? Генератор трафика какой packet rate показывает? Точно модель карточки можешь сказать?
Скорее всего WinPCAP просто не успевает выгребать пакеты с сетевой карточки.
С уважением,
Евгений
Re[6]: WinPcap и захват пакетов с 10 Гбит Ethernet
От: cppdev  
Дата: 05.08.13 12:49
Оценка:
P>А что за процессор на компе? Точно модель карточки можешь сказать?
Компьютер samc-514 c субмодулем 2x10GbE.

P>Генератор трафика какой packet rate показывает?

Он ничего не показывает Если смотреть по дисп. задач в Win, то пропуски пакетов начинаются где-то с 20% загрузки канала.

P>Скорее всего WinPCAP просто не успевает выгребать пакеты с сетевой карточки.

Я думаю (сужу по статистике в программе и из драйвера), что пакеты winpcap-драйвер успевает получать, а вот в буфер их сохранять не успевает и/или переписывает уже сохраненные, и об этих ошибках ничего не говорит.
Re[7]: WinPcap и захват пакетов с 10 Гбит Ethernet
От: -prus-  
Дата: 05.08.13 13:53
Оценка:
Здравствуйте, cppdev, Вы писали:

P>>Генератор трафика какой packet rate показывает?

C>Он ничего не показывает Если смотреть по дисп. задач в Win, то пропуски пакетов начинаются где-то с 20% загрузки канала.

Возможно сетевой трафик WinPCAP'ом обрабатывается одним ядерным потоком и из-за этого просто не успевает. А BPF-фильтр задавал какой-нить?
Что за трафик пуляешь? Размер пакетов какой? И как-нить можно посмотреть скорость генератора пак/сек или мбит/сек, вобщем статистику по генерируемому трафику сколько отправлено и на какой скорости?
Посмотри в TaskManager'e загрузку CPU для ядра.

C>Я думаю (сужу по статистике в программе и из драйвера), что пакеты winpcap-драйвер успевает получать, а вот в буфер их сохранять не успевает и/или переписывает уже сохраненные, и об этих ошибках ничего не говорит.


Ты с пакетом приходящим что-то делаешь или пока просто статистику смотришь?
С уважением,
Евгений
Re[8]: WinPcap и захват пакетов с 10 Гбит Ethernet
От: cppdev  
Дата: 06.08.13 10:37
Оценка:
P>Возможно сетевой трафик WinPCAP'ом обрабатывается одним ядерным потоком и из-за этого просто не успевает.
Для обычного захвата драйвер WinPCAP потоки ядра не использует.

P>А BPF-фильтр задавал какой-нить?

Вообще задавал, но сейчас не использую.

P>Что за трафик пуляешь? Размер пакетов какой?

Предварительно сформированная тройка пакетов — 64 Б, 418 Б и 1.5 КБ.

P>И как-нить можно посмотреть скорость генератора пак/сек или мбит/сек, вообщем статистику по генерируемому трафику сколько отправлено и на какой скорости?

Сам генератор отправляет столько пакетов сколько задано; теоретическую скорость можно рассчитать — потери начинаются после 2 Гбит/с.

P>Ты с пакетом приходящим что-то делаешь или пока просто статистику смотришь?

Пока только статистика — число пакетов каждого типа.
Re: WinPcap и захват пакетов с 10 Гбит Ethernet
От: Ivan83 http://www.netlab.linkpc.net/
Дата: 08.08.13 22:29
Оценка:
C>Необходимо захватывать все входящие пакеты с 10 GBit Ethernet, исходящих пакетов нет, все пакеты генерирует спец. железка.
C>Делаю с помощью WinPcap, захват идет в память — при скорости свыше 2Гбит/с пакеты начинают отбрасываться(тестовое приложение их не получает),
C>при этом Wireshark показывает в своей статистике, что запрошенное число пакетов до сетевой карты доходит.

C>Вопрос: на каком уровне стека драйверов пакеты начинают отбрасываться/пропускаться?


Не тратьте время на венду, это не её область.
Либо пишите сами грамотные дрова которые или напрямую с сетевухами работают или с их родными дровами, но не факт что родные дрова не будут узким местом.

На фре есть нетграф.
На фре и линуксе есть netmap — вот там и стоит такие задачи решать.
http://www.netlab.linkpc.net/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.