hi ,
please provide more information on the above technique .
Let me put what i have understood from the above explanation .
u have around 700k - 900k total facts.
first u are inserting single fact ie (ColdStarting fact) and retracts it (
how to retract it ?) when all the Jobs
and Workers have been loaded.( it means all the other facts are loaded ??)
This changed our startup time from over 50 minutes to under 5. what time
it is ??
There's some sort of strange propagation and looping going on with
accumulation on the fly, at least with our facts and rules. please exaplin
more on this ?
please provide the url on the wiki where we get more info on this .
Thank you .
Fenderbosch, Eric wrote:
FYI for the group. We seem to have solved our performance problem.
I'll describe our problem space a bit some people have some context. We
load up about 1200 Jobs with about 3000 Stops and about 1500 Vehicles
with about 2000 Workers. We then calculate Scores for each Vehicle for
each Job. Some combinations get excluded for various reasons, but we
end up with 700k - 900k total facts. We do score totaling and sorting
using accumulators.
One of our teams members (nice find Dan) decided to try to isolate the
accumulation rules until all our other facts are loaded. Those rules
now have a not ColdStarting() condition and our startup code inserts a
ColdStarting fact as the first fact and retracts it when all the Jobs
and Workers have been loaded. This changed our startup time from over
50 minutes to under 5. There's some sort of strange propagation and
looping going on with accumulation on the fly, at least with our facts
and rules.
I'll put an entry on the wiki as well.
-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Fenderbosch,
Eric
Sent: Monday, June 30, 2008 11:46 AM
To: Rules Users List
Subject: RE: [rules-users] Drools 4 poor performance scaling?
We are having a similar problem, although our fact count is much higher.
Performance seems pretty good and consistent until about 400k facts,
then performance degrades significantly. Part of the degradation is
from bigger and more frequent GCs, but not all of it.
Time to load first 100k facts: ~1 min
Time to load next 100k facts: ~1 min
Time to load next 100k facts: ~2 min
Time to load next 100k facts: ~4 min
This trend continues, going from 600k to 700k facts takes over 7
minutes. We're running 4.0.7 on a 4 CPU box with 12 GB, 64 bit RH Linux
and 64 bit JRockit 5. We've allocated a 9 GB heap for the VM using
large pages, so no memory paging is happening. JRockit is started w/
the -XXagressive parameter, which enables large pages and the more
efficient hash function in HashMap which was introduced in Java5 update
8.
http://e-docs.bea.com/jrockit/jrdocs/refman/optionXX.html
The end state is over 700k facts, with the possibility of nearly 1M
facts in production. After end state is reached and we issue a few GC
requests, if looks like our memory per fact is almost 9k, which seems
quite high as most of the facts are very simple. Could that be due to
our liberal use of insertLogical and TMS?
We've tried performing a commit every few hundred fact insertions by
issuing a fireAllRules periodically, and that seems to have helped
marginally.
I tried disabling shadow proxies and a few of our ~390 test cases fail
and one loops indefinitely. I'm pretty sure we could fix those, but
don't want to bother if this isn't a realistic solution.
Any thoughts?
Thanks
Eric
-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Ron Kneusel
Sent: Thursday, June 26, 2008 12:47 PM
To: rules-users@lists.jboss.org
Subject: [rules-users] Drools 4 poor performance scaling?
I am testing Drools 4 for our application and while sequential mode is
very fast I get very poor scaling when I increase the number of facts
for stateful or stateless sessions. I want to make sure I'm not doing
something foolish before deciding on whether or not to use Drools
because from what I am reading online it should be fast with the number
of facts I have.
The scenario: I have 1000 rules in a DRL file. They are all of the
form:
rule rule
when
Data(type == 0, value 0.185264);
Data(type == 3, value 0.198202);
then
insert(new AlarmRaised(0));
warnings.setAlarm(0, true);
end
where the ranges checked on the values and the types are randomly
generated. Then, I create a Stateful session and run in a loop timing
how long it takes the engine to fire all rules as the number of inserted
facts increases:
// Run
for(j=0; j 100; j+=5) {
if (j==0) {
nfacts = 1;
} else {
nfacts = j;
}
System.out.println(nfacts + :);
// Get a working memory