]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
Detect perf counters
authorVictor Julien <victor@inliniac.net>
Thu, 6 Nov 2014 15:05:57 +0000 (16:05 +0100)
committerVictor Julien <victor@inliniac.net>
Thu, 15 Jan 2015 10:52:26 +0000 (11:52 +0100)
src/detect-engine.c
src/detect.c
src/detect.h

index 11f117addaff23e698e00b6ec2f4f3899d680dcb..63de6d6a58d56239f8cb8ab43bf29f17e2e5641e 100644 (file)
@@ -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;
index b2ef9652029077cabb3a22751b25cc086c58486b..46a66f31f67144f1b848c9c21cc06bbb7cc29294 100644 (file)
@@ -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;
index 8d089be924c1e7832b0436cebea3f58971721994..c3485a9f7040df228b93185480270ea18b3d6b66 100644 (file)
@@ -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;