code to do plots of transaction events..
[IRC.git] / Robust / TransSim / TransSim.java
1 public class TransSim {
2   public static void main(String[] args) {
3     int numThreads=8;
4     int numTrans=4;
5     int deltaTrans=0;
6     int numObjects=200;
7     int numAccesses=20;
8     int deltaAccesses=0;
9     int readPercent=0;
10     //time for operation
11     int delay=20;
12     int deltaDelay=4;
13     //time between transactions
14     int nonTrans=20;
15     int deltaNonTrans=4;
16     //split objects
17     int splitobjects=100;//10 percent of objects special
18     int splitaccesses=100;//40 percent of accesses to special objects
19     int readPercentSecond=30;//20 percent of accesses are reads
20     int abortThreshold=0; //need 4 aborts to declare risky
21     int abortRatio=0;//need 40% aborts vs commits to declare risky
22     int deadlockdepth=10;
23
24     Plot p=new Plot("plot");
25
26     for(int i=1;i<40;i+=1) {
27       System.out.println("i="+i);
28       Executor e=new Executor(numThreads, numTrans, deltaTrans, numObjects, i, deltaAccesses, readPercent, delay, deltaDelay, nonTrans, deltaNonTrans, splitobjects, splitaccesses, readPercentSecond);
29       System.out.println(e.maxTime());
30       FlexScheduler ls=new FlexScheduler(e, FlexScheduler.LAZY, null);
31       ls.dosim();
32       System.out.println("Lazy Time="+ls.getTime());
33       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
34       p.getSeries("LAZY").addPoint(i, ls.getTime());
35
36
37       //Lock object accesses
38       ls=new FlexScheduler(e, FlexScheduler.LOCK, abortThreshold, abortRatio, deadlockdepth, null);
39       ls.dosim();
40       System.out.println("Deadlock count="+ls.getDeadLockCount());
41       System.out.println("Lock Abort="+ls.getTime());
42       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
43       p.getSeries("LOCK").addPoint(i, ls.getTime());
44
45       //Lock Commit object accesses
46       ls=new FlexScheduler(e, FlexScheduler.LOCKCOMMIT, abortThreshold, abortRatio, deadlockdepth, new Plot("FLEX"+i));
47       ls.dosim();
48       System.out.println("Deadlock count="+ls.getDeadLockCount());
49       System.out.println("LockCommit Abort="+ls.getTime());
50       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
51       p.getSeries("LOCKCOMMIT").addPoint(i, ls.getTime());
52
53       //Kill others at commit
54       ls=new FlexScheduler(e, FlexScheduler.COMMIT, null);
55       ls.dosim();
56       System.out.println("Fast Abort="+ls.getTime());
57       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
58       p.getSeries("COMMIT").addPoint(i, ls.getTime());
59       
60       //Eager attack
61       ls=new FlexScheduler(e, FlexScheduler.ATTACK, null);
62       ls.dosim();
63       System.out.println("Attack Abort="+ls.getTime());
64       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
65       p.getSeries("ATTACK").addPoint(i, ls.getTime());
66
67       //Eager polite
68       ls=new FlexScheduler(e, FlexScheduler.POLITE, null);
69       ls.dosim();
70       System.out.println("Polite Abort="+ls.getTime());
71       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
72       p.getSeries("POLITE").addPoint(i, ls.getTime());
73
74       //Karma
75       ls=new FlexScheduler(e, FlexScheduler.KARMA, null);
76       ls.dosim();
77       System.out.println("Karma Abort="+ls.getTime());
78       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
79       p.getSeries("KARMA").addPoint(i, ls.getTime());
80
81       //    Scheduler s=new Scheduler(e, besttime);
82       //s.dosim();
83       //System.out.println("Optimal Time="+s.getTime());
84     }
85     p.close();
86   }
87 }