]
Mario Fusco updated DROOLS-6043:
--------------------------------
Sprint: 2021 Week 07-09 (from Feb 15)
FireAllRules response time increase on date constraint-intensive
rulesets with executable model
-----------------------------------------------------------------------------------------------
Key: DROOLS-6043
URL:
https://issues.redhat.com/browse/DROOLS-6043
Project: Drools
Issue Type: Bug
Components: core engine
Affects Versions: 7.49.0.Final
Reporter: Matteo Casalino
Assignee: Mario Fusco
Priority: Major
Attachments: fg-Drools_7_49_0_drl.svg, fg-Drools_7_49_0_exec_model.svg,
perf-regression-date-constraints.zip
We notice a significant performance regression on firing rules which make intensive use
of constraints on dates with executable model.
From a quick look at the flame graphs, it looks like plenty of CPU is spent in
java/time/LocalDate.parse and java/util/GregorianCalendar.from, when executable model is
used.
The attached benchmark shows a 600%+ increase of response time when running with
executable model instead of drl.
DRL:
{noformat}
Benchmark
(inputFacts) (kieBaseName) Mode Cnt Score Error Units
DroolsFireJMHBench.testOneFactAgainsAllRules
src/main/resources/facts.json testKieBase sample 2728 18.340 ▒ 0.240 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p0.00
src/main/resources/facts.json testKieBase sample 14.598 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p0.50
src/main/resources/facts.json testKieBase sample 17.105 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p0.90
src/main/resources/facts.json testKieBase sample 23.170 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p0.95
src/main/resources/facts.json testKieBase sample 26.116 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p0.99
src/main/resources/facts.json testKieBase sample 32.920 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p0.999
src/main/resources/facts.json testKieBase sample 46.064 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p0.9999
src/main/resources/facts.json testKieBase sample 55.443 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules▒p1.00
src/main/resources/facts.json testKieBase sample 55.443 ms/op
{noformat}
Executable model:
{noformat}
Benchmark
(inputFacts) (kieBaseName) Mode Cnt Score Error Units
DroolsFireJMHBench.testOneFactAgainsAllRules
src/main/resources/facts.json testKieBase sample 363 138.380 ± 4.116 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p0.00
src/main/resources/facts.json testKieBase sample 116.523 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p0.50
src/main/resources/facts.json testKieBase sample 131.072 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p0.90
src/main/resources/facts.json testKieBase sample 160.956 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p0.95
src/main/resources/facts.json testKieBase sample 173.172 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p0.99
src/main/resources/facts.json testKieBase sample 271.602 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p0.999
src/main/resources/facts.json testKieBase sample 313.000 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p0.9999
src/main/resources/facts.json testKieBase sample 313.000 ms/op
DroolsFireJMHBench.testOneFactAgainsAllRules:testOneFactAgainsAllRules·p1.00
src/main/resources/facts.json testKieBase sample 313.000 ms/op
{noformat}