Здравствуйте, 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.