--- cvsroot/AnyEvent-SNMP/README 2009/03/31 22:39:40 1.2 +++ cvsroot/AnyEvent-SNMP/README 2009/04/19 11:06:21 1.3 @@ -42,8 +42,72 @@ requests with Net::SNMP*. It is recommended but not required to load this module before "Net::SNMP". +GLOBAL VARIABLES + $AnyEvent::SNMP::MAX_OUTSTANDING (default: 50, dynamic) + Use this package variable to restrict the number of outstanding SNMP + requests at any point in time. + + Net::SNMP is very fast at creating and sending SNMP requests, but + much slower at parsing (big, bulk) responses. This makes it easy to + request a lot of data that can take many seconds to parse. + + In the best case, this can lead to unnecessary delays (and even + time-outs, as the data has been received but not yet processed) and + in the worst case, this can lead to packet loss, when the receive + queue overflows and the kernel can no longer accept new packets. + + To avoid this, you can (and should) limit the number of outstanding + requests to a number low enough so that parsing time doesn't + introduce noticable delays. + + Unfortunately, this number depends not only on processing speed and + load of the machine running Net::SNMP, but also on the network + latency and the speed of your SNMP agents. + + AnyEvent::SNMP tries to dynamically adjust this number dynamically + upwards and downwards. + + Note that you can use Net::SNMP::XS to speed up parsing of responses + considerably. + + $AnyEvent::SNMP::MIN_RECVQUEUE (default: 4) + $AnyEvent::SNMP::MAX_RECVQUEUE (default: 64) + These values specify the minimum and maximum receive queue length + (in units of one response packet). + + When AnyEvent::SNMP handles $MAX_RECVQUEUE or more packets per + iteration it will reduce $MAX_OUTSTANDING. If it handles less than + $MIN_RECVQUEUE, it increases $MAX_OUTSTANDING. + + This has the result of adjusting the number of outstanding requests + so that the recv queue is between the minimum and maximu, usually. + + This algorithm works reasonably well as long as the responses, + response latencies and processing times are the same size per packet + on average. + +COMPATIBILITY + This module may be used as a drop in replacement for the + Net::SNMP::Dispatcher in existing programs. You can still call + "snmp_dispatcher" to start the event-loop, but then you loose the + benefit of mixing Net::SNMP events with other events. + + use AnyEvent::SNMP; + use Net::SNMP; + + # just use Net::SNMP as before + + # ... start non-blocking snmp request(s)... + Net::SNMP->session ( + -hostname => "127.0.0.1", + -community => "public", + -nonblocking => 1, + )->get_request (-callback => sub { ... }); + + snmp_dispatcher; + SEE ALSO - AnyEvent, Net::SNMP, Net::SNMP::EV. + AnyEvent, Net::SNMP, Net::SNMP::XS, Net::SNMP::EV. AUTHOR Marc Lehmann