[rrd-developers] Suggestion for NAN-safe TREND operation

Bernhard Fischer rep.dot.nop at gmail.com
Mon Jun 11 13:37:03 CEST 2007


On Mon, Jun 11, 2007 at 12:45:36AM +0200, Tobias Oetiker wrote:
>>written daemons. In my rrd data i have often short periods of missing
>>data. In result the trend curve is missing over the complete sliding
>>window. So i modified the TREND function to ignore NAN-number. I

>Hi Timo,
>
>NAN safe TREND sounds interesting ...

Note that this should happen much, much less frequent (or not at all)
with current trunk, since rrdtool-1.2 is excercising the hard-disks way
too much, as opposed to the upcoming 1.3 version.

Since you seem to observe gaps in your graphs, i assume that you also
suffer from very high load-average¹) due to waiting on blocking I/O, which
a) renders your machine unuseable for interactive use
b) is responsible for the fact that your data-collection and/or RRD
   updates cannot finish in due time.

The new file access method introduced in rrdtool-1.3 has several
advantages over the FILE* (filp) based implementation that rrdtool-1.2
uses:
a) less copying.
  The filp-based I/O had to do more than 3 (!) copies per RRD, whereas
  the mmap-based I/O in rrdtool-1.3 does only 1 copy (in the kernel).
  This greatly reduces the stress upon the memory-subsystem of your
  host.
b) less buffer-cache pollution.
  As a consequence of a), we don't pollute the caches like the
  filp-based file accessors did.
c) less seeking
  The filp-based I/O did several dozend (blocking!) seeks to update
  the internal positions from where to read/write.
  In the mmap-based implementation, we do not seek at all, thus greatly
  reducing the time spent on-disk. We just calculate some integer
  offsets into the file and use those for our read/write operations.
d) less read/write ops
  While the filp-based file-accessor approach did blocking reads/writes
  (interleved with a dozend seeks) to read RRDs, then copy this data to
  a malloc()ed area, eventually updated this now in-memory data only to
  do a blocking write to propagate the update back to the file, the
  mmap-based accessors operate directly on the 1 copy we created when
  opening the RRD file.


¹) where too high of course depends on the number of rrd's you have, but
generally, everything above 1.0 which *blocks* will get you into trouble
sooner or later.
>
>if you provide a patch for current trunk I will be glad to include
>it for 1.3 ... make sure you patch docs as well.

And while you're at it, give 1.3 a whirl and let us know if this makes
the immediate need for your patch obsolete. That said, i can see how
your proposal is still something very useful for machines that are way
too small for the workload they are supposed to handle.

cheers,



More information about the rrd-developers mailing list