[jboss-jira] [JBoss JIRA] Commented: (JBRULES-959) Investigate performance delta with MR3 and 3.0.6
Gilles Dubuc (JIRA)
jira-events at lists.jboss.org
Thu Jun 28 22:47:57 EDT 2007
[ http://jira.jboss.com/jira/browse/JBRULES-959?page=comments#action_12367266 ]
Gilles Dubuc commented on JBRULES-959:
--------------------------------------
// The test used to measure time taken for each rule to execute
public void startRuleExecutionSpeedTest() {
Date before = new Date();
Date after = new Date();
long minimum = 10000;
long maximum = 0;
long total = 0;
ruleService.enableCache();
for (int i = 0; i < 500; i++) { // Warmup round
RuleExecutor launcher = new RuleExecutor(group);
launcher.AddGroupFact(getRandomMessage());
before = new Date();
launcher.ExecuteMainRules();
after = new Date();
}
for (int i = 0; i < 10000; i++) { // Actual benchmark
RuleExecutor launcher = new RuleExecutor(group);
launcher.AddGroupFact(getRandomMessage());
before = new Date();
launcher.ExecuteMainRules();
after = new Date();
long difference = after.getTime() - before.getTime();
total += difference;
if (difference < minimum)
minimum = difference;
if (difference > maximum)
maximum = difference;
}
logger.info("Results of the rule execution speed test: ");
logger.info("Minimum rule execution time in ms: " + minimum);
logger.info("Maximum rule execution time in ms: " + maximum);
logger.info("Average rule execution time in ms: " + (total / 10000.0));
}
// And below is the launcher.ExecuteMainRules() method called above, whose execution speed I measure.
// Uncomment the appropriate chunck of code for 3.0.6 or 4.0
private void ExecuteRule(Long id) {
try {
ruleBase = rsl.getRuleBase(id);
/*WorkingMemory wm = ruleBase.newWorkingMemory();
for (Iterator j = toBeAsserted.get(id).iterator(); j.hasNext();)
wm.assertObject(j.next());
wm.fireAllRules();*/
/*StatelessSession session = ruleBase.newStatelessSession();
session.execute(toBeAsserted.get(id).toArray();*/
} catch (Exception e) {
logger.error("An error occured when executing rule with id=" + id.toString(), e);
}
}
> Investigate performance delta with MR3 and 3.0.6
> ------------------------------------------------
>
> Key: JBRULES-959
> URL: http://jira.jboss.com/jira/browse/JBRULES-959
> Project: JBoss Rules
> Issue Type: Task
> Security Level: Public(Everyone can see)
> Components: All
> Affects Versions: 4.0.0.MR3
> Reporter: Michael Neale
> Assigned To: Michael Neale
>
> // Rule execution time test
> // I give the DRL one fact of class BOBOMessage (made final due to Michael's suggestion)
> // The "message" member of my BOBOMessage fact contains a random combination of the keywords the rule is designed to match
> // A random BOBOMessage like that is generated before every execution
>
> // MR3's performance: 11:43:01,135 INFO [RuleLoadBean] Average rule execution time in ms: 2.3991
>
> // What is measured:
> ruleBase = rsl.getGroupRuleBase(group); // That retrieves the RuleBase from the cache
>
> StatelessSession session = ruleBase.newStatelessSession();
> session.execute(toBeAsserted.get(group.getId()).toArray());
>
> // 3.0.6's performance: 12:09:40,446 INFO [RuleLoadBean] Average rule execution time in ms: 0.7726
>
> // What is measured:
>
> ruleBase = rsl.getGroupRuleBase(group); // That retrieves the RuleBase from the cache
>
> WorkingMemory wm = ruleBase.newWorkingMemory();
> for (Iterator j = toBeAsserted.get(group.getId()).iterator(); j.hasNext();)
> wm.assertObject(j.next());
> wm.fireAllRules();
>
> // The DRL:
>
> package com.smsc.mitto.rules
>
> import com.smsc.mitto.rules.client.BOBOMessage;
> import java.lang.String;
>
> rule "14"
> salience 0
> activation-group "14"
> when
> m : BOBOMessage( message matches ".*BOBO.*")
> then
> System.out.println( "BOBO WAS SEEN" );
> System.out.println( "BOBO WAS REALLY SEEN, DUDE" );
> drools.setFocus( "17" );
> end
>
>
> rule "17"
> salience -20
> agenda-group "17"
> activation-group "17"
> when
> m : BOBOMessage( message matches ".*CACA.*")
> then
> System.out.println( "CACA WAS SEEN" );
> drools.setFocus( "19" );
> end
>
>
> rule "19"
> salience -10
> agenda-group "19"
> activation-group "19"
> when
> m : BOBOMessage( message matches ".*BABA.*")
> then
> System.out.println( "BABA WAS SEEN" );
> drools.setFocus( "21" );
> end
>
>
> rule "19false"
> salience -20
> agenda-group "19"
> activation-group "19"
> when
> eval(true)
> then
> drools.setFocus( "21" );
> end
>
>
> rule "21"
> salience -20
> agenda-group "21"
> activation-group "21"
> when
> m : BOBOMessage( message matches ".*BIBI.*")
> then
> System.out.println( "BIBI WAS SEEN" );
> drools.setFocus( "23" );
> end
>
>
> rule "21false"
> salience -30
> agenda-group "21"
> activation-group "21"
> when
> eval(true)
> then
> drools.setFocus( "23" );
> end
>
>
> rule "17false"
> salience -30
> agenda-group "17"
> activation-group "17"
> when
> eval(true)
> then
> drools.setFocus( "23" );
> end
>
>
> rule "23"
> salience -30
> agenda-group "23"
> activation-group "23"
> when
> m : BOBOMessage( message matches ".*POOP.*")
> then
> System.out.println( "POOP WAS SEEN" );
> drools.setFocus( "25" );
> end
>
>
> rule "23false"
> salience -40
> agenda-group "23"
> activation-group "23"
> when
> eval(true)
> then
> drools.setFocus( "25" );
> end
>
>
> rule "14false"
> salience -10
> agenda-group "14"
> activation-group "14"
> when
> eval(true)
> then
> drools.setFocus( "25" );
> end
>
>
> rule "25"
> salience -10
> agenda-group "25"
> activation-group "25"
> when
> m : BOBOMessage( message matches ".*SUPER.*")
> then
> System.out.println( "SUPER WAS SEEN" );
> end
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list