Hi,

We are using net-snmp 5.2.4 in an embedded linux envrionment and were
trying to use stash-cache to mitigate some of the known performance issues
with the table iterator. Namely we have a table with 1000 rows and observed
that our get next functions were getting called a ridiculous number of
times during a MIB walk. Basically we hit the n-squared problem discussed
in this link:

http://web.archiveorange.com/archive/v/WnPpShz7hx44EJpP447v

I followed the instructions at this link to insert a stash cache in front
of the table iterator and it worked fine for my first set of test cases
with the net-snmp mib browser:

http://www.net-snmp.org/wiki/index.php/Stash_cache

My code snippet looks like this at the end of my table initialization code:

    netsnmp_register_table_iterator(my_handler, iinfo);

    /* Inject stash cache ahead of Table Iterator */
    netsnmp_inject_handler_before(my_handler,
netsnmp_get_stash_cache_handler(), "table_iterator");

Again this is version 5.2.4.

Basically my first set of test cases just utilized the net-snmp mib browser
to retrieve the table via the table viewer feature. And I was using the
net-snmp mib browser with all of the normal configuration defaults.

It worked great and I saw a tremendous improvement in performance. Exactly
what I was looking for.

However we also have a requirement to also support the *"Poll one row at a
time" *option under the Table View Polling Options in the net-snmp MIB
Browser.

I checked this box and repeated the test with the net-snmp MIB Browser.
This time snmpd crashed and unfortunately it didn't leave me a core dump
file.

*Before Crash:*

root@montavista1:~# ps -ef | grep snmpd

root      5078  4924  0 18:46 pts/1    00:00:00 /usr/local/sbin/snmpd -f
-LE 4 -M/usr/local/share/snmp/mibs



*After Crash:*

root@montavista1:~# ps -ef | grep snmpd

root      5078  4924  0 18:46 pts/1    00:00:00 [snmpd <defunct>]

I instrumented the table iterator code with printfs and verified that
function netsnmp_table_iterator_helper_handler in file table_iterator.c
processed the MODE_GET_STASH command and ran to completion. After that
function returned the crash occurred. So I am guessing it crashed while it
was trying to traverse the cache?


I restarted snmpd and disabled this *"Poll one row at a time" *option and
it worked like a champ.

So I have these questions:

1. What does this Poll one row at a time option do?

2. Has anyone else seen this problem?

3. If so has this problem been fixed in the latest version of net-snmp? (I
don't want to deal with a major upgrade only to find I still have the same
problem.)

4. Is there another way to solve this performance issue with tables?


If I take out the stash cache code my old implementation works fine for
both of my test scenarios described above.

Both scenarios result in a ridiculous number of calls to the get functions.
But when "Poll one row at a time" is invoked it did improve it some; but
not enough.


Regards,

Stan
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to