From 30b7fdcb492425a6786dfc025bad0a99515f7686 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Thu, 6 Nov 2014 16:05:57 +0100 Subject: [PATCH] Detect perf counters --- src/detect-engine.c | 9 +++++++++ src/detect.c | 3 +++ src/detect.h | 3 +++ 3 files changed, 15 insertions(+) diff --git a/src/detect-engine.c b/src/detect-engine.c index 11f117adda..63de6d6a58 100644 --- a/src/detect-engine.c +++ b/src/detect-engine.c @@ -1356,6 +1356,12 @@ TmEcode DetectEngineThreadCtxInit(ThreadVars *tv, void *initdata, void **data) * rules haven't been loaded yet. */ uint16_t counter_alerts = SCPerfTVRegisterCounter("detect.alert", tv, SC_PERF_TYPE_UINT64, "NULL"); + uint16_t counter_mpm_list = SCPerfTVRegisterAvgCounter("detect.mpm_list", tv, + SC_PERF_TYPE_UINT64, "NULL"); + uint16_t counter_nonmpm_list = SCPerfTVRegisterAvgCounter("detect.nonmpm_list", tv, + SC_PERF_TYPE_UINT64, "NULL"); + uint16_t counter_match_list = SCPerfTVRegisterAvgCounter("detect.match_list", tv, + SC_PERF_TYPE_UINT64, "NULL"); if (de_ctx->delayed_detect == 1 && de_ctx->delayed_detect_initialized == 0) { *data = NULL; return TM_ECODE_OK; @@ -1374,6 +1380,9 @@ TmEcode DetectEngineThreadCtxInit(ThreadVars *tv, void *initdata, void **data) /** alert counter setup */ det_ctx->counter_alerts = counter_alerts; + det_ctx->counter_mpm_list = counter_mpm_list; + det_ctx->counter_nonmpm_list = counter_nonmpm_list; + det_ctx->counter_match_list = counter_match_list; /* pass thread data back to caller */ *data = (void *)det_ctx; diff --git a/src/detect.c b/src/detect.c index b2ef965202..46a66f31f6 100644 --- a/src/detect.c +++ b/src/detect.c @@ -1334,6 +1334,8 @@ int SigMatchSignatures(ThreadVars *th_v, DetectEngineCtx *de_ctx, DetectEngineTh PACKET_PROFILING_DETECT_START(p, PROF_DETECT_MPM); DetectMpmPrefilter(de_ctx, det_ctx, smsg, p, flags, alproto, has_state, &sms_runflags); PACKET_PROFILING_DETECT_END(p, PROF_DETECT_MPM); + SCPerfCounterAddUI64(det_ctx->counter_mpm_list, th_v->sc_perf_pca, (uint64_t)det_ctx->pmq.rule_id_array_cnt); + SCPerfCounterAddUI64(det_ctx->counter_nonmpm_list, th_v->sc_perf_pca, (uint64_t)det_ctx->sgh->non_mpm_id_cnt); PACKET_PROFILING_DETECT_START(p, PROF_DETECT_PREFILTER); DetectPrefilterMergeSort(de_ctx, det_ctx, det_ctx->sgh); @@ -1343,6 +1345,7 @@ int SigMatchSignatures(ThreadVars *th_v, DetectEngineCtx *de_ctx, DetectEngineTh /* inspect the sigs against the packet */ /* Prefetch the next signature. */ SigIntId match_cnt = det_ctx->match_array_cnt; + SCPerfCounterAddUI64(det_ctx->counter_match_list, th_v->sc_perf_pca, (uint64_t)match_cnt); Signature **match_array = det_ctx->match_array; uint32_t sflags, next_sflags = 0; diff --git a/src/detect.h b/src/detect.h index 8d089be924..c3485a9f70 100644 --- a/src/detect.h +++ b/src/detect.h @@ -791,6 +791,9 @@ typedef struct DetectionEngineThreadCtx_ { /** id for alert counter */ uint16_t counter_alerts; + uint16_t counter_mpm_list; + uint16_t counter_nonmpm_list; + uint16_t counter_match_list; /* used to discontinue any more matching */ uint16_t discontinue_matching;