[Click] click userland patches for large speed improvements
Eddie Kohler
kohler at cs.ucla.edu
Fri Jul 1 14:13:45 EDT 2011
Hi Roman,
I believe Luigi generally tests on a FreeBSD version, and the FreeBSD malloc
appears particularly slow compared to current Linux versions. But Luigi's
patches are AWESOME and will be integrated soon, with adjustments. Any help
appreciated!! THANKS LUIGI!!!
Luigi, have you done github?
Eddie
On 07/01/2011 11:01 AM, Roman Chertov wrote:
> For curiosity sake, I just ran the script shown below on my machine and got
> 3.34 Mpps. I am using the latest Click from git (as of two days ago), and
> running the following CPUs: Intel(R) Xeon(R) CPU W3520 @ 2.67GH
>
>
> It seems that 0.5Mpps is pretty low for an i7-870 CPU, but it does appear that
> the patches improved the performance significantly.
>
>
> InfiniteSource -> ctr::AverageCounter -> Queue -> Discard;
>
>
> Script(
> wait 60,
> print ctr.count,
> print ctr.byte_count,
> );
>
> Roman
>
> On Fri, 1 Jul 2011 19:47:13 +0200 Luigi Rizzo<rizzo at iet.unipi.it> wrote
>
>> If someone is interest in performance of userland click, i'd suggest
>> the following two patches and looking at netmap (i already discussed
>> what follows with Eddie, and i am hoping someone more fluent than
>> me in C++ can polish the code and add a support for thread-local lists).
>>
>> To get an idea of what you can get on a single core i7-870 CPU with
>> the stock version and with these patches:
>>
>> 1.8.0 With patches
>> InfiniteSource -> Discard 515Kpps 18.56Mpps
>> InfiniteSource -> Queue -> Discard 500Kpps 13.41Mpps
>>
>> pcap netmap
>> FromDevice->Queue->ToDevice 420Kpps 3.97 Mpps
>>
>>
>> Click userland performance was never a priority given the high cost
>> (until now) of packet I/O. But once packet i/o has become quite fast,
>> it turns out that there are to other big offenders:
>> - the C++ memory allocator is quite expensive, and replacing it with
>> thread-local freelists (Packet objects and data buffers can be made
>> all with the same size) gives huge savings -- 100ns per packet or more
>> even on a fast machine;
>>
>> - everytime an element wants a timestamp, it calls a syscall (gettimeofday()
>> or similar) which consumes another 400-800ns per call. There are many
>> elements (e.g. InfiniteSource, Counter, etc.) which timestamp packets.
>>
>> Attached there are a couple of patches which address these problems:
>>
>> - patch-pcap makes FromDevice and ToDevice use libpcap properly,
>> supporting I/O in bursts to amortize the syscall overhead.
>> This has been tested on FreeBSD.
>>
>> - patch-more
>> + introduces a NOTS option for InfiniteSource to remove timestamps.
>> This gives a 10x performance improvement in simple apps using
>> InfiniteSource
>>
>> + replaces the allocator for Packet and data buffers with local freelists;
>> not thread safe, but this is easy to introduce. This gives another
>> 1.5-2x
>> speed improvement after the 10x gained removing timestamps;
>>
>> + enables BURST operation in Discard, giving another 2x speed improvement
>>
>> Using netmap instead of pcap is another big win, as you can see the
>> forwarding
>> performance of a simple FromDevice->Queue->ToDevice chain goes up by 10x
>> You can find netmap at http://info.iet.unipi.it/~luigi/netmap/
>>
>> cheers
>> luigi
>
>
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
More information about the click
mailing list