[mrtg] bad performance: MRTG 2.9.4 / RRDs / rrdtool 1.0.28
Bjorn Nordbo
bn at nextra.com
Tue Jan 9 00:14:02 MET 2001
I have a Sun box with 4 450MHz Ultra IIi's, 2GB RAM which I use for
collection information through SNMP. The RRD-archives rests on a
NetApp for performance reasons. But still I get into trouble when
the config files reaches 500 targets. The collect operation is done
in about 30 seconds with 8 forks, but the RRDs::update()'s takes a
very long time to complete, about one second each (I have confirmed
that MRTG does one RRDs::update() per target).
This is the head of the sorted output from the profiler:
---8<---
527 188.4178 2.980000 410: RRDs::update("$rrd",
2640 50.81802 0.090000 1581: my $line = <$h>; # must be a simple
527 21.86756 0.550000 417: my $lasttime = RRDs::last($rrd);
527 15.09493 0.300000 402: RRDs::tune(@args);
527 2.734013 0.700000 421: my @fetch =
---8<---
No problem to see where the problem is, so I did a truss of a MRTG-
run with only *one* target. Here is the part where RRDs::update() is
involved (all of it):
---8<---
open("/local/net/rrd/misc/ti01a01fastethernet0.rrd", O_RDWR) = 6
fstat64(6, 0xFFBEF458) = 0
ioctl(6, TCGETA, 0xFFBEF3E4) Err#25 ENOTTY
read(6, " R R D\0 0 0 0 1\0\0\0\0".., 8192) = 8192
lseek(6, 0, SEEK_SET) = 0
write(6, " R R D\0 0 0 0 1\0\0\0\0".., 360) = 360
close(6) = 0
time() = 978994523
open("/local/net/rrd/misc/ti01a01fastethernet0.rrd", O_RDWR) = 6
fstat64(6, 0xFFBEF460) = 0
ioctl(6, TCGETA, 0xFFBEF3EC) Err#25 ENOTTY
read(6, " R R D\0 0 0 0 1\0\0\0\0".., 8192) = 8192
llseek(6, 0, SEEK_CUR) = 8192
lseek(6, 0xFFFFEC00, SEEK_CUR) = 3072
fcntl(6, F_SETLK, 0xFFBEF5F0) = 0
llseek(6, 0, SEEK_CUR) = 3072
lseek(6, 3104, SEEK_SET) = 3104
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 208) = 208
lseek(6, 288784, SEEK_SET) = 288784
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 32) = 32
lseek(6, 299984, SEEK_SET) = 299984
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 16) = 16
lseek(6, 325152, SEEK_SET) = 325152
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 208) = 208
lseek(6, 334736, SEEK_SET) = 334736
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 32) = 32
lseek(6, 345936, SEEK_SET) = 345936
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 16) = 16
lseek(6, 371104, SEEK_SET) = 371104
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 48) = 48
lseek(6, 371072, SEEK_SET) = 371072
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 80) = 80
lseek(6, 371072, SEEK_SET) = 371072
write(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 80) = 80
lseek(6, 1368, SEEK_SET) = 1368
write(6, " : Z E [ + 9 1 7 0 7 8 6".., 1704) = 1704
close(6) = 0
open("/local/net/rrd/misc/ti01a01fastethernet0.rrd", O_RDONLY) = 6
fstat64(6, 0xFFBEF4C0) = 0
ioctl(6, TCGETA, 0xFFBEF44C) Err#25 ENOTTY
read(6, " R R D\0 0 0 0 1\0\0\0\0".., 8192) = 8192
llseek(6, 0xFFFFFFFFFFFFEC00, SEEK_CUR) = 3072
close(6) = 0
time() = 978994524
time() = 978994524
time() = 978994524
time() = 978994524
open("/local/net/rrd/misc/ti01a01fastethernet0.rrd", O_RDONLY) = 6
fstat64(6, 0xFFBEF3B0) = 0
ioctl(6, TCGETA, 0xFFBEF33C) Err#25 ENOTTY
read(6, " R R D\0 0 0 0 1\0\0\0\0".., 8192) = 8192
llseek(6, 0, SEEK_CUR) = 8192
lseek(6, 288992, SEEK_SET) = 288992
lseek(6, 3296, SEEK_SET) = 3296
read(6, "7FFFFFFFFFFFFFFF7FFFFFFF".., 8192) = 8192
llseek(6, 0xFFFFFFFFFFFFE010, SEEK_CUR) = 3312
close(6) = 0
---8<---
This seems awfully ineffective. Four opens, 11 writes and a whole
bunch of seeks. Does anyone know what rrdtool is doing here that
requires so many operations just for a simple update?
Sorry if this message is a little messy, but I've been at work
for 15 hours now..
Any help greatly appreciated!
--
Bjørn Nordbø - IP Development - Nextra Norway
--
Unsubscribe mailto:mrtg-request at list.ee.ethz.ch?subject=unsubscribe
Archive http://www.ee.ethz.ch/~slist/mrtg
FAQ http://faq.mrtg.org Homepage http://www.mrtg.org
WebAdmin http://www.ee.ethz.ch/~slist/lsg2.cgi
More information about the mrtg
mailing list