Я думаю, что SNMP-запросы могут легко приходить пакетами из-за того, что несколько независимых менеджеров опрашивают вашего агента и / или одного тревожного менеджера, повторяющего одну и ту же команду, если ваш агент недостаточно быстр, чтобы ответить.
Когда он приходитпри написании SNMP-агентов другим соображением было бы оценить максимальное возможное время, необходимое агенту для сбора необходимых данных для ответа.Я считаю, что это должен быть не средний OID, а максимальный OID.Другими словами, если ваш агент обслуживает 100 OID, из которых запрос одного «медленного» OID приведет к тому, что весь (синхронный) агент заблокирует и перестанет обслуживать других - эта ситуация может подорвать доверие к вашему агенту в сети..
Кроме того, если вам случится нажать один и тот же медленный OID несколько раз подряд (например, повторные попытки менеджера), задержка может накапливаться, эффективно блокируя другие запросы.
Подводя итог: я думаю, что высокопроизводительный агент SNMP должен иметь следующие характеристики:
- Поддержка массовой одновременной обработки команд SNMP
- Наличие неблокирующего доступа к источникам данных для сбора данных управляемых объектов
- Имеют некоторую форму кэширования или ограничения скорости для защиты вычислительно дорогих источников данных от дерзких менеджеров SNMP
С другой стороны, если ваш агент SNMP обслуживает небольшой фрагмент статических данных нааппаратное обеспечение с низким энергопотреблением, и вы не ожидаете, что слишком много менеджеров когда-либо будут говорить с вами, перхaps вы можете обойтись без упрощенного синхронного агента SNMP ...
Кстати, интерфейс сокетов BSD будет содержать очередь необработанных пакетов UDP, чтобы у вашего агента был шанс наверстать упущенное.