bsnmp-ucd возвращает неправильное значение счетчика ssCpuRawSoftIRQ
Разбираясь с необычно большим значением системной части нагрузки на процессор одного из наших серверов, я наткнулся на ошибку в bsnmp-ucd, который мы используем для мониторинга. В соответствии с MIB значение счетчика ssCpuRawSoftIRQ - это число "тиков" потраченных на обработку программных прерываний ("The number of 'ticks' (typically 1/100s) spent processing software interrupts."). bsnmp-ucd использует для этого счетчика значение sysctl vm.stats.sys.v_soft, в котором храниться просто количество программных прерываний. Надеюсь, у меня будет время, чтобы отправить багрепорт.
Update. Патч:
--- ucd_tree.def.orig 2010-06-08 10:16:58.000000000 +0400
+++ ucd_tree.def 2010-06-08 10:17:11.000000000 +0400
@@ -97,7 +97,7 @@
# (58 ssIORawReceived COUNTER op_systemStats GET)
(59 ssRawInterrupts COUNTER op_systemStats GET)
(60 ssRawContexts COUNTER op_systemStats GET)
- (61 ssCpuRawSoftIRQ COUNTER op_systemStats GET)
+# (61 ssCpuRawSoftIRQ COUNTER op_systemStats GET)
(62 ssRawSwapIn COUNTER op_systemStats GET)
(63 ssRawSwapOut COUNTER op_systemStats GET)
)
--- mibss.c.orig 2010-06-08 10:17:30.000000000 +0400
+++ mibss.c 2010-06-08 10:17:49.000000000 +0400
@@ -63,7 +63,6 @@
uint32_t cpuRawInterrupt;
uint32_t rawInterrupts;
uint32_t rawContexts;
- uint32_t cpuRawSoftIRQ;
uint32_t rawSwapIn;
uint32_t rawSwapOut;
};
@@ -159,8 +158,6 @@
mibss.rawInterrupts = (uint32_t) val;
sysctlval("vm.stats.sys.v_swtch", &val);
mibss.rawContexts = (uint32_t) val;
- sysctlval("vm.stats.sys.v_soft", &val);
- mibss.cpuRawSoftIRQ = (uint32_t) val;
current = get_ticks();
if (current > last_update) {
@@ -293,9 +290,6 @@
case LEAF_ssRawContexts:
value->v.uint32 = mibss.rawContexts;
break;
- case LEAF_ssCpuRawSoftIRQ:
- value->v.uint32 = mibss.cpuRawSoftIRQ;
- break;
case LEAF_ssRawSwapIn:
value->v.uint32 = mibss.rawSwapIn;
break;
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии