ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-SNMP/README
(Generate patch)

Comparing AnyEvent-SNMP/README (file contents):
Revision 1.1 by root, Mon Dec 3 17:27:38 2007 UTC vs.
Revision 1.4 by root, Sat Apr 25 12:20:50 2009 UTC

1NAME 1NAME
2 Net::SNMP::EV - adaptor to integrate Net::SNMP into the EV event loop. 2 AnyEvent::SNMP - adaptor to integrate Net::SNMP into Anyevent.
3 3
4SYNOPSIS 4SYNOPSIS
5 use EV; 5 use AnyEvent::SNMP;
6 use Net::SNMP; 6 use Net::SNMP;
7 use Net::SNMP::EV;
8 7
9 # just use Net::SNMP and EV as you like: 8 # just use Net::SNMP and AnyEvent as you like:
10 9
11 ... start non-blocking snmp request(s)... 10 # use a condvar to transfer results, this is
11 # just an example, you can use a naked callback as well.
12 my $cv = AnyEvent->condvar;
12 13
13 EV::loop; 14 # ... start non-blocking snmp request(s)...
15 Net::SNMP->session (-hostname => "127.0.0.1",
16 -community => "public",
17 -nonblocking => 1)
18 ->get_request (-callback => sub { $cv->send (@_) });
19
20 # ... do something else until the result is required
21 my @result = $cv->wait;
14 22
15DESCRIPTION 23DESCRIPTION
16 This module coerces the Net::SNMP scheduler to use the EV high 24 This module implements an alternative "event dispatcher" for Net::SNMP,
17 performance event loop as underlying event loop, i.e. EV will be used by 25 using AnyEvent as a backend.
18 Net::SNMP for all events.
19 26
20 This integrates Net::SNMP into EV: You can make non-blocking Net::SNMP 27 This integrates Net::SNMP into AnyEvent: You can make non-blocking
21 calls and as long as your main program uses the EV event loop, they will 28 Net::SNMP calls and as long as other parts of your program also use
22 run in parallel to anything else that uses EV or AnyEvent. 29 AnyEvent (or some event loop supported by AnyEvent), they will run in
30 parallel.
31
32 Also, the Net::SNMP scheduler is very inefficient with respect to both
33 CPU and memory usage. Most AnyEvent backends (including the pure-perl
34 backend) fare much better than the Net::SNMP dispatcher.
35
36 A potential disadvantage is that replacing the dispatcher is not at all
37 a documented thing to do, so future changes in Net::SNP might break this
38 module (or the many similar ones).
23 39
24 This module does not export anything and does not require you to do 40 This module does not export anything and does not require you to do
25 anything special apart from loading it. 41 anything special apart from loading it *before doing any non-blocking
42 requests with Net::SNMP*. It is recommended but not required to load
43 this module before "Net::SNMP".
26 44
27 The module is quite short, you cna use it to do a similar integration 45GLOBAL VARIABLES
28 into e.g. Event or other event loops. 46 $AnyEvent::SNMP::MAX_OUTSTANDING (default: 50, dynamic)
47 AnyEvent::SNMP::set_max_outstanding $new_value
48 Use this package variable to restrict the number of outstanding SNMP
49 requests at any point in time.
29 50
30BUGS 51 Net::SNMP is very fast at creating and sending SNMP requests, but
31 Net::SNMP has no (documented or otherwise) API to do what this module 52 much slower at parsing (big, bulk) responses. This makes it easy to
32 does. As such, this module rummages around in the internals of Net::SNMP 53 request a lot of data that can take many seconds to parse.
33 in a rather inacceptable way, and as thus might be very sensitive to the 54
34 version of Net::SNMP used (it has been tested with some 5.x versions 55 In the best case, this can lead to unnecessary delays (and even
35 only, YMMV). 56 time-outs, as the data has been received but not yet processed) and
57 in the worst case, this can lead to packet loss, when the receive
58 queue overflows and the kernel can no longer accept new packets.
59
60 To avoid this, you can (and should) limit the number of outstanding
61 requests to a number low enough so that parsing time doesn't
62 introduce noticable delays.
63
64 Unfortunately, this number depends not only on processing speed and
65 load of the machine running Net::SNMP, but also on the network
66 latency and the speed of your SNMP agents.
67
68 AnyEvent::SNMP tries to dynamically adjust this number dynamically
69 upwards and downwards.
70
71 Increasing $MAX_OUTSTANDING will not automatically use the "extra
72 request slots. To increase $MAX_OUTSTANDING" and make
73 ""AnyEvent::SNMP" make use of the extra paralellity, call
74 "AnyEvent::SNMP::set_max_outstanding" with the new value, e.g.:"
75
76 AnyEvent::SNMP::set_max_outstanding 500;
77
78 Although due to the dynamic adjustment, this might have little
79 lasting effect.
80
81 Note that you can use Net::SNMP::XS to speed up parsing of responses
82 considerably.
83
84 $AnyEvent::SNMP::MIN_RECVQUEUE (default: 8)
85 $AnyEvent::SNMP::MAX_RECVQUEUE (default: 64)
86 These values specify the minimum and maximum receive queue length
87 (in units of one response packet).
88
89 When AnyEvent::SNMP handles $MAX_RECVQUEUE or more packets per
90 iteration it will reduce $MAX_OUTSTANDING. If it handles less than
91 $MIN_RECVQUEUE, it increases $MAX_OUTSTANDING.
92
93 This has the result of adjusting the number of outstanding requests
94 so that the recv queue is between the minimum and maximu, usually.
95
96 This algorithm works reasonably well as long as the responses,
97 response latencies and processing times are the same size per packet
98 on average.
99
100COMPATIBILITY
101 This module may be used as a drop in replacement for the
102 Net::SNMP::Dispatcher in existing programs. You can still call
103 "snmp_dispatcher" to start the event-loop, but then you loose the
104 benefit of mixing Net::SNMP events with other events.
105
106 use AnyEvent::SNMP;
107 use Net::SNMP;
108
109 # just use Net::SNMP as before
110
111 # ... start non-blocking snmp request(s)...
112 Net::SNMP->session (
113 -hostname => "127.0.0.1",
114 -community => "public",
115 -nonblocking => 1,
116 )->get_request (-callback => sub { ... });
117
118 snmp_dispatcher;
36 119
37SEE ALSO 120SEE ALSO
38 EV, Net::SNMP, AnyEvent, Glib::EV. 121 AnyEvent, Net::SNMP, Net::SNMP::XS, Net::SNMP::EV.
39 122
40AUTHOR 123AUTHOR
41 Marc Lehmann <schmorp@schmorp.de> 124 Marc Lehmann <schmorp@schmorp.de>
42 http://home.schmorp.de/ 125 http://home.schmorp.de/
43 126
127POD ERRORS
128 Hey! The above document had some coding errors, which are explained
129 below:
130
131 Around line 79:
132 Unterminated C<...> sequence
133

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines