Hello,
I am confronted with somewhat hard problem. Say one develops Network Module
X, i.e. using Netfilter hooks. X will (simply) mangle the packets and then
forward them or do whatever. How can I measure the performance of X module?
I am not sure exactly what I am asking but say, I have a Linux router with X
module running and I need to get information what is the CPU usage under
heavy traffic with, and without X module. Actually it would be nice to see
the latency per-packet that X introduces and how it changes if the volume of
traffic increases.
Any hint would be highly appreciated.
Rade
Radivoje Todorovic wrote:
>
> Hello,
>
> I am confronted with somewhat hard problem. Say one develops Network Module
> X, i.e. using Netfilter hooks. X will (simply) mangle the packets and then
> forward them or do whatever. How can I measure the performance of X module?
> I am not sure exactly what I am asking but say, I have a Linux router with X
> module running and I need to get information what is the CPU usage under
> heavy traffic with, and without X module. Actually it would be nice to see
> the latency per-packet that X introduces and how it changes if the volume of
> traffic increases.
>
The most precise tool known to mankind is cyclesoak :)
It's at http://www.uow.edu.au/~andrewm/linux/#zc and there's
a README in the tarball.
cyclesoak measures subtractively - rather than measuring the
load of your software, it measures how much other system
load slows it down. For networking it gives results which
are repeatable down to about 0.2% of system capacity. So
you should run a known workload both with and without your
netfilter code and record the difference in cyclesoak output.
Currently it tries to lump memory bandwidth load and CPU cycle
load into a single metric, which doesn't work very well - these
things are orthogonal and should be reported separately. That's
on my TTD list.
-