From dba14b676cee6fe104fc7085409277b29774eb5a Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Thu, 25 Aug 2016 18:36:26 +0200 Subject: [PATCH] profiling: more prefilter profiling --- src/detect-engine-prefilter.c | 6 ++++++ src/detect.c | 4 ++++ src/suricata-common.h | 5 +++++ src/util-profiling.c | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/src/detect-engine-prefilter.c b/src/detect-engine-prefilter.c index bd62a91bf9..c72ee6eef9 100644 --- a/src/detect-engine-prefilter.c +++ b/src/detect-engine-prefilter.c @@ -115,6 +115,7 @@ void Prefilter(DetectEngineThreadCtx *det_ctx, const SigGroupHead *sgh, PROFILING_PREFILTER_RESET(p, det_ctx->de_ctx->profile_prefilter_maxid); + PACKET_PROFILING_DETECT_START(p, PROF_DETECT_PF_PKT); /* run packet engines */ PrefilterEngine *engine = sgh->pkt_engines; while (engine) { @@ -124,9 +125,11 @@ void Prefilter(DetectEngineThreadCtx *det_ctx, const SigGroupHead *sgh, engine = engine->next; } + PACKET_PROFILING_DETECT_END(p, PROF_DETECT_PF_PKT); /* run payload inspecting engines */ if ((p->payload_len > 0 || det_ctx->smsg != NULL) && !(p->flags & PKT_NOPAYLOAD_INSPECTION)) { + PACKET_PROFILING_DETECT_START(p, PROF_DETECT_PF_PAYLOAD); engine = sgh->payload_engines; while (engine) { PROFILING_PREFILTER_START(p); @@ -135,6 +138,7 @@ void Prefilter(DetectEngineThreadCtx *det_ctx, const SigGroupHead *sgh, engine = engine->next; } + PACKET_PROFILING_DETECT_END(p, PROF_DETECT_PF_PAYLOAD); } /* run tx engines */ @@ -142,7 +146,9 @@ void Prefilter(DetectEngineThreadCtx *det_ctx, const SigGroupHead *sgh, if (sgh->tx_engines != NULL && p->flow != NULL && p->flow->alproto != ALPROTO_UNKNOWN && p->flow->alstate != NULL) { + PACKET_PROFILING_DETECT_START(p, PROF_DETECT_PF_TX); PrefilterTx(det_ctx, sgh, p, flags); + PACKET_PROFILING_DETECT_END(p, PROF_DETECT_PF_TX); } } } diff --git a/src/detect.c b/src/detect.c index a6a88bb688..b3e7c19e77 100644 --- a/src/detect.c +++ b/src/detect.c @@ -1200,9 +1200,13 @@ int SigMatchSignatures(ThreadVars *th_v, DetectEngineCtx *de_ctx, DetectEngineTh /* Sort the rule list to lets look at pmq. * NOTE due to merging of 'stream' pmqs we *MAY* have duplicate entries */ if (det_ctx->pmq.rule_id_array_cnt > 1) { + PACKET_PROFILING_DETECT_START(p, PROF_DETECT_PF_SORT1); QuickSortSigIntId(det_ctx->pmq.rule_id_array, det_ctx->pmq.rule_id_array_cnt); + PACKET_PROFILING_DETECT_END(p, PROF_DETECT_PF_SORT1); } + PACKET_PROFILING_DETECT_START(p, PROF_DETECT_PF_SORT2); DetectPrefilterMergeSort(de_ctx, det_ctx); + PACKET_PROFILING_DETECT_END(p, PROF_DETECT_PF_SORT2); PACKET_PROFILING_DETECT_END(p, PROF_DETECT_PREFILTER); #ifdef PROFILING diff --git a/src/suricata-common.h b/src/suricata-common.h index ffbeafb65b..1c097d2314 100644 --- a/src/suricata-common.h +++ b/src/suricata-common.h @@ -314,6 +314,11 @@ typedef enum PacketProfileDetectId_ { PROF_DETECT_RULES, PROF_DETECT_STATEFUL, PROF_DETECT_PREFILTER, + PROF_DETECT_PF_PKT, + PROF_DETECT_PF_PAYLOAD, + PROF_DETECT_PF_TX, + PROF_DETECT_PF_SORT1, + PROF_DETECT_PF_SORT2, PROF_DETECT_NONMPMLIST, PROF_DETECT_ALERT, PROF_DETECT_CLEANUP, diff --git a/src/util-profiling.c b/src/util-profiling.c index d4130eb58f..a49d80aeaf 100644 --- a/src/util-profiling.c +++ b/src/util-profiling.c @@ -1312,6 +1312,11 @@ const char * PacketProfileDetectIdToString(PacketProfileDetectId id) CASE_CODE (PROF_DETECT_IPONLY); CASE_CODE (PROF_DETECT_RULES); CASE_CODE (PROF_DETECT_PREFILTER); + CASE_CODE (PROF_DETECT_PF_PKT); + CASE_CODE (PROF_DETECT_PF_PAYLOAD); + CASE_CODE (PROF_DETECT_PF_TX); + CASE_CODE (PROF_DETECT_PF_SORT1); + CASE_CODE (PROF_DETECT_PF_SORT2); CASE_CODE (PROF_DETECT_STATEFUL); CASE_CODE (PROF_DETECT_ALERT); CASE_CODE (PROF_DETECT_CLEANUP);