-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
hyperscan: add caching mechanism for hyperscan contexts v9 #12048
Conversation
This variant of hashlittle2() ensures that it avoids accesses beyond the last byte of the string, which will cause warnings from tools like Valgrind or Address Sanitizer.
Cache Hyperscan serialized databases to disk to prevent compilation of the same databases when Suricata is run again with the same ruleset. Hyperscan binary files are stored per rulegroup in the designated folder, by default in the cached library folder. Since caching is per signature group heads, some chunk of the ruleset can change and it still can reuse part of the unchanged signature groups. Loading *fresh* ET Open ruleset: 19 seconds Loading *cached* ET Open ruleset: 07 seconds Ticket: 7170
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #12048 +/- ##
===========================================
- Coverage 83.42% 68.14% -15.29%
===========================================
Files 910 847 -63
Lines 257642 155185 -102457
===========================================
- Hits 214934 105746 -109188
- Misses 42708 49439 +6731
Flags with carried forward coverage won't be shown. Click here to find out more. |
Information: QA ran without warnings. Pipeline 23194 |
7 or 0.7 ? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
incomplete review: noted I had some pending comments so here they are
static bool DetectEngineMpmCachingEnabled(void) | ||
{ | ||
const char *strval = NULL; | ||
if (ConfGet("detect.sgh-mpm-caching", &strval) != 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this double get of detect.sgh-mpm-caching
should not be needed
@@ -1045,6 +1045,9 @@ typedef struct DetectEngineCtx_ { | |||
|
|||
/* number of signatures using filestore, limited as u16 */ | |||
uint16_t filestore_cnt; | |||
|
|||
/* If enabled, MPM matchers can store compiled pattern databases to disk */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: use doxygen style comment /** ... */
7 seconds, because well it's not just loading the ruleset it's the complete Suricata startup |
Next #12394 |
Followup of #11888
Cache Hyperscan serialized databases to disk to prevent compilation of the same databases when Suricata is run again with the same ruleset.
Hyperscan binary files are stored per rulegroup in the designated
folder, by default in the cached library folder.
Since caching is per signature group heads,
some chunk of the ruleset can change and it still can reuse part of
the unchanged signature groups.
Loading fresh ET Open ruleset: 19 seconds
Loading cached ET Open ruleset: 07 seconds
Link to ticket: https://redmine.openinfosecfoundation.org/issues/7170
Describe changes:
v9:
v7: (v6 was private)
v5:
v4:
v3
v2
v1