libpcap (›1.0.0) и эффективность PF_RING

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

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

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

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


person gadon    schedule 02.11.2013    source источник


Ответы (1)


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

person Andre Holzner    schedule 02.11.2013
comment
Хорошо, я думаю, что понял. Итак, в PF_PACKET у вас есть одна копия из ядра KSBUFF в буфер libpcaps, который находится как в пространстве ядра, так и в пространстве пользователя, а в PF_RING вы пропускаете даже эту копию? - person gadon; 05.11.2013
comment
@user2508653 user2508653 на какой скорости передачи данных вы получаете потерю пакетов с libpcap ?? - person Jishnu U Nair; 08.07.2015