Red Hat Bugzilla – Bug 976824
Possible performance regression (5.3.1-P02 vs P03)
Last modified: 2015-02-24 13:11:31 EST
Description of problem:
I have a file with simple rules, basically just "=,!=,<,>,||,&&" operators. (Using other operators the regression is still there but not that high). Inserting facts and evaluating the rules (fireAllRules()) takes longer (~20 %) comparing P03 and P02. See the attached Maven reproducer for the rules file and simple test that demonstrates the described behavior.
Note: The test is highly synthetic and does not reflect real usage of the rules. However the regression is there. In real scenarios the regression probably will not be that high.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. Run the attached test (mvn test)
2. Change the version from 5.3.1.BRMS-P02 to 5.3.1.BRMS-P03
3. Run the test again
Time needed for execution is higher for P03 (~20 %)
Both execution times are ~equal.
Created attachment 763875 [details]
Simple Maven based reproducer
I have been looking into the issue a little bit and found out that the following commit is probably responsible for the regression. (I have built the drools without that commit and the times is ~same as with P02.
The commit is fixing JBRULES-3274, so we probably can't just exclude it.
The (biggest part of) this performance regression was caused by the internal implementation of the new UpgradableReentrantReadWriteLock. In particular it used 2 maps to hold some necessary counters index by thread (using the thread id as key). I replaced the 2 maps with a ThreadLocal and put the 2 counters there
and the provided test case showed a quite satisfying performance improvement.