On Tue, Jul 23, 2002 at 02:40:10AM -0400, Richard A Steenbergen wrote:
While you're at it, eliminate the forking to the rrdtool bin when you're adding data. A little thought and profiling goes a long way, this is simple number crunching we're talking about, not supercomputer work. The problem comes from the perl mentality (why is there no C lib for efficiently adding to an rrd db? because they're expecting everyone to call it from perl :P), "it's good enough for my couple boxes and you can throw more machines at it".
There is a C library, librrd. That is how the other language APIs are built. As to efficiency, there is a lot of stringification, which is inconvenient and unnatural in C, but this should not be the bottleneck in the collection operation.
But again, I have no doubt that if you designed it properly you could throw lots of snmp queries and scale decently to a nice sized core network, I've seen it done. The problem is potential communication loss between the poller and the device, and the amount of work that the device (which usually isn't running gods gift to any code let alone snmp code) has to do for higher sampling rates with many interfaces.
That said, bulk statistical exports from the device itself can easily be more implemented efficiently than SNMP. But unless the export process is universally standardized, SNMP (for all its warts, and it has many) will still have an edge in that it works nearly everywhere (for varying values of "works"). -- - mdz