[rrd-users] Can I optimise this ?

Simon Hobson linux at thehobsons.co.uk
Fri Aug 4 12:47:54 MEST 2006


I'm using rrdcgi (version 1.2.11-0.5 from Debian testing) to generate 
a stacked graph and accompanying legend, the source of an example is 
below. Ultimately I need to be able to handle 254 data sources (all 
IPs in a subnet) but it's taking a huge amount of memory - with 203 
sources it took 1138M of memory according to top (the machine only 
has 768M at the moment and 1G max when we get some more memory). 
Interestingly it seems to take considerably more memory for longer 
timescales, even though I have consolidated values stored :

rrdtool create ip-stats.rrd -s 300 \
   DS:total-in:DERIVE:600:0:U \
   DS:total-out:DERIVE:600:0:U \
   \
   DS:ip1-in:DERIVE:600:0:U \
   DS:ip1-out:DERIVE:600:0:U \
   DS:ip2-in:DERIVE:600:0:U \
   DS:ip2-out:DERIVE:600:0:U \
...
   DS:ip254-in:DERIVE:600:0:U \
   DS:ip254-out:DERIVE:600:0:U \
   \
   RRA:AVERAGE:0.5:1:576 \
   RRA:MAX:0.5:1:576 \
   RRA:AVERAGE:0.5:6:672 \
   RRA:MAX:0.5:6:672 \
   RRA:AVERAGE:0.5:24:732 \
   RRA:MAX:0.5:24:732 \
   RRA:AVERAGE:0.5:144:1460 \
   RRA:MAX:0.5:144:1460

# CFs for :
#   1 x 576    48hrx 5m
#   6 x 672    14d x 1/2hr
#  24 x 732    61d x 2hr
# 144 x 1460  730d x 12hr




The preamble
         <RRD::GRAPH /var/www/graphs/gr3det-off-366d.png
         --title="Group3 - Last Year" -v "bytes/second"
         --end now --start end-366d
         --lazy
         --width 600 --height 300
         --imginfo '<IMG SRC="../graphs/%s" width=%lu height=%lu 
ALT="Graph data for of Group3 over Last Year">'

Then the data sources
         DEF:1-in=/var/rrd/ip-stats.rrd:ip1-in:AVERAGE
         DEF:1-out=/var/rrd/ip-stats.rrd:ip1-out:AVERAGE
         CDEF:i1-out=1-out,-1,*
         VDEF:v1-in=1-in,AVERAGE
         VDEF:v1-inmax=1-in,MAXIMUM
         VDEF:v1-out=1-out,AVERAGE
         VDEF:v1-outmax=1-out,MAXIMUM

This is for IP a.b.c.1, the 1-in and i1-out are used for plotting the 
graph, v1-* are used for the legend (avg & max, in & out). The block 
is repeated for each address selected to be graphed.




Get the sum of the rates (ie a total)
         CDEF:datainavg=1-in,2-in,+,3-in,+
         VDEF:vdatainavg=datainavg,AVERAGE
         CDEF:dataoutavg=1-out,2-out,+,3-out,+
         VDEF:vdataoutavg=dataoutavg,AVERAGE

This is the bit I think should be capable of significant 
optimisation. I already have the average in & out for each dataset, 
so I thought I should be able to just do :

VDEF:vdatainavg=v1-in, v2-in,+,v3-in,+

but this results in "[ERROR: Cannot parse vname from 
'VDEF:VDEF:vdatainavg=v1-in,']"

Looking again I can see that VDEF is looking to process an array and 
consolidate it to a single value - ie there nothing that will do 
basic arithmetic on single values ? It seems daft to add loads of 
arrays together when I only want a sum of single values and I already 
have the values.



Finally, plot the data :
         COMMENT:"  IP Address        In avg       In max 
Out avg      Out max\n"

         AREA:1-in#FF7F7F:"195.8.169.1  "
         GPRINT:v1-in:"%6.2lf %sBps"
         GPRINT:v1-inmax:"%6.2lf %sBps"
         COMMENT:" "
         GPRINT:v1-out:"%6.2lf %sBps"
         GPRINT:v1-outmax:"%6.2lf %sBps"
         COMMENT:" something.somedomain.net\n"

         AREA:2-in#7FFF7F:"195.8.169.2  ":STACK
         GPRINT:v2-in:"%6.2lf %sBps"
         ...

and the outbound stack :
         AREA:i1-out#FF7F7F:
         AREA:i2-out#7FFF7F::STACK
         AREA:i3-out#7F7FFF::STACK


and the totals :
         COMMENT:"\n"
         COMMENT:"In  avg"
         GPRINT:vdatainavg:"%6.2lf %sBps\n"

         COMMENT:"Out avg"
         GPRINT:vdataoutavg:"%6.2lf %sBps"

         COMMENT:"  Data to <RRD::TIME::LAST /var/rrd/ip-stats.rrd '%a 
%b %d %Y  %H\:%M\:%S %Z'>\n"

--
Unsubscribe mailto:rrd-users-request at list.ee.ethz.ch?subject=unsubscribe
Help        mailto:rrd-users-request at list.ee.ethz.ch?subject=help
Archive     http://lists.ee.ethz.ch/rrd-users
WebAdmin    http://lists.ee.ethz.ch/lsg2.cgi



More information about the rrd-users mailing list