2013-11-02 3 views
3

Я использую libpcap 1.4.0 для захвата пакетов с/на устройство (я использую linux). Я страдаю от потери пакетов, и после исследования об этом я нашел PF_RING, и теперь я рассматриваю возможность его использования.libpcap (> 1.0.0) и эффективность PF_RING

Проблема в том, что я не понимаю, почему использование PF_RING более эффективно, чем использование PF_PACKET из libpcap, когда метод пакетной загрузки libpcap по умолчанию является «zero-copy» (с libpcap 1.0.0), а также PF_RING. ..

Может кто-нибудь объяснит мне, почему, с помощью libpcap 1.0.0 и более поздних версий, использование PF_RING будет еще более эффективным (если оно действительно более эффективно), чем не использовать его?

Спасибо заранее! :)

ответ

2

в соответствии с https://stackoverflow.com/a/8897187/288875 еще есть копия из буфера сокета ядра (sk_buff) в память, которую вы будете читать. PF_RING кажется не, чтобы сделать эту копию (насколько я помню, pfring bypass - нормальный механизм ядра обработки данных, полученных с сетевой карты).

+0

ОК, я думаю, что это получилось. Итак, в 'PF_PACKET' у вас есть одна копия из ядра' KSBUFF' в буфер libpcaps, который находится как в пространстве ядра, так и в пространстве пользователя, а в 'PF_RING' вы пропускаете даже эта копия? – user2508653

+0

@ user2508653 по какой скорости передачи данных вы получаете потерю пакетов с помощью libpcap ?? –