Add Num, Rev, and Gid columns to rule perf output

remotes/origin/master-1.1.x
William 15 years ago committed by Victor Julien
parent 0625d54267
commit bca8fbc79e

@ -65,6 +65,8 @@ static SCPerfCounterArray *rules_pca;
* Extra data for rule profiling. * Extra data for rule profiling.
*/ */
typedef struct SCProfileData_ { typedef struct SCProfileData_ {
uint32_t gid;
uint8_t rev;
uint64_t matches; uint64_t matches;
uint64_t max; uint64_t max;
uint64_t ticks_match; uint64_t ticks_match;
@ -77,6 +79,8 @@ SCProfileData rules_profile_data[0xffff];
*/ */
typedef struct SCProfileSummary_ { typedef struct SCProfileSummary_ {
char *name; char *name;
uint32_t gid;
uint8_t rev;
uint64_t ticks; uint64_t ticks;
double avgticks; double avgticks;
double avgticks_match; double avgticks_match;
@ -319,6 +323,8 @@ SCProfilingDump(void)
memset(summary, 0, summary_size); memset(summary, 0, summary_size);
for (i = 1; i < count + 1; i++) { for (i = 1; i < count + 1; i++) {
summary[i - 1].name = rules_pca->head[i].pc->name->cname; summary[i - 1].name = rules_pca->head[i].pc->name->cname;
summary[i - 1].rev = rules_profile_data[i].rev;
summary[i - 1].gid = rules_profile_data[i].gid;
summary[i - 1].ticks = rules_pca->head[i].ui64_cnt; summary[i - 1].ticks = rules_pca->head[i].ui64_cnt;
if (rules_pca->head[i].ui64_cnt) { if (rules_pca->head[i].ui64_cnt) {
summary[i - 1].avgticks = (long double)rules_pca->head[i].ui64_cnt / summary[i - 1].avgticks = (long double)rules_pca->head[i].ui64_cnt /
@ -383,8 +389,11 @@ SCProfilingDump(void)
tms->tm_hour,tms->tm_min, tms->tm_sec); tms->tm_hour,tms->tm_min, tms->tm_sec);
fprintf(fp, " ----------------------------------------------" fprintf(fp, " ----------------------------------------------"
"----------------------------\n"); "----------------------------\n");
fprintf(fp, " %-12s %-12s %-6s %-8s %-8s %-11s %-11s %-11s %-11s\n", "Rule", "Ticks", "%", "Checks", "Matches", "Max Ticks", "Avg Ticks", "Avg Match", "Avg No Match"); fprintf(fp, " %-8s %-12s %-8s %-8s %-12s %-6s %-8s %-8s %-11s %-11s %-11s %-11s\n", "Num", "Rule", "Gid", "Rev", "Ticks", "%", "Checks", "Matches", "Max Ticks", "Avg Ticks", "Avg Match", "Avg No Match");
fprintf(fp, " ------------ " fprintf(fp, " -------- "
"------------ "
"-------- "
"-------- "
"------------ " "------------ "
"------ " "------ "
"-------- " "-------- "
@ -405,8 +414,11 @@ SCProfilingDump(void)
double percent = (long double)summary[i].ticks / double percent = (long double)summary[i].ticks /
(long double)total_ticks * 100; (long double)total_ticks * 100;
fprintf(fp, fprintf(fp,
" %-12s %-12"PRIu64" %-6.2f %-8"PRIu64" %-8"PRIu64" %-11"PRIu64" %-11.2f %-11.2f %-11.2f\n", " %-8"PRIu32" %-12s %-8"PRIu32" %-8"PRIu32" %-12"PRIu64" %-6.2f %-8"PRIu64" %-8"PRIu64" %-11"PRIu64" %-11.2f %-11.2f %-11.2f\n",
i + 1,
summary[i].name, summary[i].name,
summary[i].gid,
summary[i].rev,
summary[i].ticks, summary[i].ticks,
percent, percent,
summary[i].checks, summary[i].checks,
@ -458,6 +470,8 @@ SCProfilingInitRuleCounters(DetectEngineCtx *de_ctx)
uint32_t count = 0; uint32_t count = 0;
while (sig != NULL) { while (sig != NULL) {
sig->profiling_id = SCProfilingRegisterRuleCounter(sig); sig->profiling_id = SCProfilingRegisterRuleCounter(sig);
rules_profile_data[sig->profiling_id].rev = sig->rev;
rules_profile_data[sig->profiling_id].gid = sig->gid;
sig = sig->next; sig = sig->next;
count++; count++;
} }

Loading…
Cancel
Save