[collectd] Collectd sysctl 'benchmark'

Toni Ylenius toniylenius at gmail.com
Thu Sep 29 22:44:45 CEST 2011

Hi list,

I had a short conversation with Kimo about sysctlnametomib() versus 
sysctlbyname() [1] and I wanted to check if there is really a difference. At 
the same time I 'benchmarked' some other plugins. I think that a tool like 
this might aid in collectd plugin development.

I added a -b <N> flag to the collectd which runs "benchmark" by iterating the 
read loop N times and calculates total CPU time. To collect results I wrote a 
simple Makefile script. 

I ran benchmarks on a FreeBSD 8.2 system. I ran 5 instances of collectd 
simultaneously and every instance ran 100000 iterations. The collectd was 
configured to use only the plugin in question. I set the time interval as 
small as possible so that  there weren't too many 'Not sleeping because the 
next interval is 0.000 seconds in the past!' reports. 

Results (seconds of CPU time):
         Plugin:    Mean:    Variance:
         cpu.in   10.03281    0.00035
   cs-sysctl.in    3.49531    0.00312 (uses sysctlnametomib() and sysctl())
          cs.in    3.74687    0.00043 (uses sysctlbyname())
        disk.in    8.10156    0.00020
   interface.in   13.22031    0.00062
        load.in    3.31562    0.00556
      memory.in    8.67500    0.00041
        swap.in    1.82500    0.00761
    tcpconns.in   16.11094    0.00162
      uptime.in    3.16562    0.00160
       users.in   13.93281    0.00080
     zfs-arc.in   16.66094    0.00294 (modified to use sysctlbyname())
     zfs-arc.in   13.26250    0.00158 (mod. sysctlnametomib() and sysctl())

We can see that plugins use different amount of CPU. This is not real 
benchmark because values are not comparable to those produced on other 
systems. However we can easily calculate that if we use 30 seconds time 
interval 100000 iterations would mean 34 hours of real time, and we can see 
that some plugins are quite efficient.

I would like to point out two things about sysctl calls.

First, lets compare ContextSwitch plugin and my sysctl plugin [2]. It seems 
that when a plugin uses only one sysctl entry there is no significant 
difference between sysctlnametomib() and sysctlbyname(). Maybe collectd 
overhead is larger that the small performance gain. 

Second, we can see that zfs-arc plugin is faster when sysctlnametomib() is 
used. The plugin reads 16 different sysctl values on every read action and now 
the difference is noticeable.

There are two attachments:
- collectd-bench.patch (patch against version 5.0.0)
- time-suite.tgz
I didn't post zfs-arc plugin patches because they are poor quality. I will 
return to this later.

Thanks for your time.
Toni Ylenius

[1] http://mailman.verplant.org/pipermail/collectd/2011-June/004542.html
[2] https://collectd.org/gerrit/#change,10
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.verplant.org/pipermail/collectd/attachments/20110929/fb97723a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: collectd-bench.patch
Type: text/x-patch
Size: 4468 bytes
Desc: not available
URL: <http://mailman.verplant.org/pipermail/collectd/attachments/20110929/fb97723a/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: time-suite.tgz
Type: application/x-compressed-tar
Size: 1318 bytes
Desc: not available
URL: <http://mailman.verplant.org/pipermail/collectd/attachments/20110929/fb97723a/attachment-0001.bin>

More information about the collectd mailing list