Conclusions

Here is the summary table for Gufo SNMP bencmarks.

Test Sync (ms) Async (ms) Async
overhead
SNMPv2c GETNEXT 215.17 273.66 27.18%
SNMPv2c GETBULK 46.62 52.56 12.75%
SNMPv2c GETNEXT (x4) 357.34 487.52 36.43%
SNMPv2c GETBULK (x4) 155.51 185.20 19.09%
SNMPv3 GETNEXT 242.40 289.18 19.30%
SNMPv3 GETBULK 49.45 55.80 12.84%
SNMPv3 GETNEXT (x4) 409.16 582.81 42.44%
SNMPv3 GETBULK (x4) 12.77 20.42 59.89%

Conclusions:

  • Gufo SNMP is the clear winner in terms of performance.
  • Async mode adds significant overhead to each I/O operation (~30%). This is especially noticeable in GETNEXT mode. We have to address this issue in future releases.
  • GETBULK consistently outperforms GETNEXT. As expected, it delivers better performance and should be preferred whenever supported by the equipment.
  • The encryption overhead of SNMPv3 (AES128 + SHA1) is minimal, with little impact on overall performance.
  • Gufo SNMP demonstrates good scalability: running four parallel tasks takes only about 1.5× the time of a single task, indicating efficient performance even beyond Python’s GIL limitations.
  • BER parsing is a complex algorithmic operation, so native CPU implementations provide significant performance gains.
  • Purpose-tailored BER parsers that map directly to Python types offer substantial advantages over generic SNMP implementations.
  • Complex abstractions are slow. A lean and efficient API is key to high performance.
  • Wrappers over C-libraries may demonstrate an unexpected behaviour in multi-threaded applications.