Firma Cloudflare
Narzędzie xdpcap jest kompatybilne z wyrażeniami filtrującymi tcpdump/libpcap i umożliwia przetwarzanie znacznie większych ilości ruchu na tym samym sprzęcie. Xdpcap może być również używany do debugowania w środowiskach, w których zwykły tcpdump nie ma zastosowania, takich jak filtrowanie, ochrona DoS i systemy równoważenia obciążenia korzystające z podsystemu XDP jądra Linuksa, który przetwarza pakiety przed ich przetworzeniem przez stos sieciowy jądra Linuksa (tcpdump nie widzi pakietów odrzucanych przez procedurę obsługi XDP).
Wysoka wydajność została osiągnięta dzięki zastosowaniu podsystemów eBPF i XDP. eBPF to interpreter kodu bajtowego wbudowany w jądro Linuksa, który umożliwia tworzenie wysokowydajnych procedur obsługi pakietów przychodzących/wychodzących z decyzjami o ich przekazywaniu lub odrzucaniu. Za pomocą kompilatora JIT kod bajtowy eBPF jest tłumaczony w locie na instrukcje maszynowe i wykonywany z wydajnością kodu natywnego. Podsystem XDP (eXpress Data Path) uzupełnia eBPF o możliwość uruchamiania programów BPF na poziomie sterowników sieciowych, z obsługą bezpośredniego dostępu do bufora pakietów DMA i pracą na etapie przed alokacją bufora skbuff przez stos sieciowy.
Podobnie jak tcpdump, narzędzie xdpcap najpierw tłumaczy reguły filtrowania ruchu wysokiego poziomu na klasyczną reprezentację BPF (cBPF) przy użyciu standardowej biblioteki libpcap, a następnie konwertuje je do postaci procedur eBPF przy użyciu kompilatora
Źródło: opennet.ru