Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Dec 2007 11:43:46 +0000 (GMT)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Vlad GALU <dudu@dudu.ro>
Cc:        freebsd-net@freebsd.org, Peter Losher <Peter_Losher@isc.org>
Subject:   Zero-copy BPF update (was: Re: Aggregating many ports into one for tcpdump server.)
Message-ID:  <20071224113901.M40176@fledge.watson.org>
In-Reply-To: <ad79ad6b0712050156m718c864fs23ccf43e126f8e83@mail.gmail.com>
References:  <4755EFDD.8070609@isc.org> <20071205021851.V87930@fledge.watson.org> <ad79ad6b0712050100p90a1917w5440e06a94f816e7@mail.gmail.com> <20071205093244.U87930@fledge.watson.org> <20071205094657.P87930@fledge.watson.org> <ad79ad6b0712050156m718c864fs23ccf43e126f8e83@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 5 Dec 2007, Vlad GALU wrote:

>>> I've had several reports of significantly improved packet capture rates at 
>>> high speeds with it, but it's not yet in the tree because we feel it needs 
>>> more evaluation and review.  I hope to ship some form of zero-copy BPF 
>>> buffer support in FreeBSD 8, and possibly even MFC it.  Any feedback you 
>>> might have would be most helpful.
>>
>> Having sent you the patch, I should have let you know that you'll need to:
>>
>> - Add options BPF_ZEROCOPY to your kernel configuration to enable the
>>   zero-copy buffering mode.
>>
>> - Make sure the kernel and libpcap are rebuild following the application of
>>   the patch and dropping in the tarball.
>>
>> - setenv BPF_ZERO_COPY before running tcpdump or other BPF-based tools to
>>   enable the zero-copy buffer mode.
>>
>> The patch includes both kernel changes (abstract the buffer model, add a 
>> new buffer model) and user space changes (updated libpcap to speak the new 
>> model, selected right now with the environmental variable).  Presumably if 
>> merged, zero-copy BPF buffers would be used by default via libpcap if 
>> present in the kernel, but right now this is all for evaluation purposes.
>
> Thanks, Robert! I'll start running a few tests next week, I'm waiting for 
> some hardware to arrive first.

I've put up an updated tarball based on some recent changes here:

   http://www.watson.org/~robert/freebsd/20071226-zcopybpf.tgz

The main changes since this last drop are:

- BPF_ZERO_COPY environmental variable renamed to BPF_ZEROCOPY to match kernel
   option name.

- libpcap support for zero-copy BPF buffers reworked to avoid unconditional
   call to select() for each buffer when there's already a pending buffer
   available to use; in general, avoid system calls entirely when there's data
   already waiting, only use system calls when there isn't a completed buffer
   to work on next.

- Comments cleanup and some code cleanup.

- A README to provide a little more guidance on getting it working. :-)

You will need to "make clean ; make ; make install" in the modified libpcap 
against, as the size of pcap_t has changed.  In principle "make ; make 
install" should DTRT, but it appears not to for me.

Robert N M Watson
Computer Laboratory
University of Cambridge



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071224113901.M40176>