updates to transsim for journal submission
[IRC.git] / Robust / TransSim / TransSim.java
1 public class TransSim {
2   public static void main(String[] args) {
3     int numThreads=20;
4     int numTrans=40;
5     int deltaTrans=0;
6     int numObjects=400;
7     int numAccesses=20;
8     int deltaAccesses=3;
9     int readPercent=80; //80 percent read
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;//100 percent normal objects
18     int splitaccesses=100;//100 percent access to normal objects
19     int readPercentSecond=80;//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     Plot pa=new Plot("plotabort");
26
27     for(int i=1;i<40;i++) {
28       System.out.println("i="+i);
29       numThreads=i;
30       Executor e=new Executor(numThreads, numTrans, deltaTrans, numObjects, numAccesses, deltaAccesses, readPercent, delay, deltaDelay, nonTrans, deltaNonTrans, splitobjects, splitaccesses, readPercentSecond);
31       System.out.println(e.maxTime());
32       FlexScheduler ls=new FlexScheduler(e, FlexScheduler.LAZY, null);
33       ls.dosim();
34       System.out.println("Lazy Time="+ls.getTime());
35       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
36       p.getSeries("LAZY").addPoint(i, ls.getTime());
37       pa.getSeries("LAZY").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
38
39       //Lock object accesses
40       ls=new FlexScheduler(e, FlexScheduler.LOCK, abortThreshold, abortRatio, deadlockdepth, null);
41       ls.dosim();
42       System.out.println("Deadlock count="+ls.getDeadLockCount());
43       System.out.println("Lock Abort="+ls.getTime());
44       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
45       p.getSeries("LOCK").addPoint(i, ls.getTime());
46       pa.getSeries("LOCK").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
47
48       //Lock Commit object accesses
49       ls=new FlexScheduler(e, FlexScheduler.LOCKCOMMIT, abortThreshold, abortRatio, deadlockdepth, null);
50       ls.dosim();
51       System.out.println("Deadlock count="+ls.getDeadLockCount());
52       System.out.println("LockCommit Abort="+ls.getTime());
53       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
54       p.getSeries("LOCKCOMMIT").addPoint(i, ls.getTime());
55       pa.getSeries("LOCKCOMMIT").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
56
57       //Kill others at commit
58       ls=new FlexScheduler(e, FlexScheduler.COMMIT, null);
59       ls.dosim();
60       System.out.println("Fast Abort="+ls.getTime());
61       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
62       p.getSeries("COMMIT").addPoint(i, ls.getTime());
63       pa.getSeries("COMMIT").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));      
64
65       //Eager attack
66       ls=new FlexScheduler(e, FlexScheduler.ATTACK, null);
67       ls.dosim();
68       System.out.println("Attack Abort="+ls.getTime());
69       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
70       p.getSeries("ATTACK").addPoint(i, ls.getTime());
71       pa.getSeries("ATTACK").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
72
73       //Eager polite
74       ls=new FlexScheduler(e, FlexScheduler.SUICIDE, null);
75       ls.dosim();
76       System.out.println("Suicide Abort="+ls.getTime());
77       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
78       p.getSeries("SUICIDE").addPoint(i, ls.getTime());
79       pa.getSeries("SUICIDE").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
80
81       //Karma
82       ls=new FlexScheduler(e, FlexScheduler.TIMESTAMP, null);
83       ls.dosim();
84       System.out.println("Timestamp Abort="+ls.getTime());
85       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
86       p.getSeries("TIMESTAMP").addPoint(i, ls.getTime());
87       pa.getSeries("TIMESTAMP").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
88
89       //Karma
90       ls=new FlexScheduler(e, FlexScheduler.RANDOM, null);
91       ls.dosim();
92       System.out.println("Random Abort="+ls.getTime());
93       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
94       p.getSeries("RANDOM").addPoint(i, ls.getTime());
95       pa.getSeries("RANDOM").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
96
97       //Karma
98       ls=new FlexScheduler(e, FlexScheduler.KARMA, null);
99       ls.dosim();
100       System.out.println("Karma Abort="+ls.getTime());
101       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
102       p.getSeries("KARMA").addPoint(i, ls.getTime());
103       pa.getSeries("KARMA").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
104
105       //Karma
106       ls=new FlexScheduler(e, FlexScheduler.POLITE, null);
107       ls.dosim();
108       System.out.println("Polit Abort="+ls.getTime());
109       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
110       p.getSeries("POLITE").addPoint(i, ls.getTime());
111       pa.getSeries("POLITE").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
112
113       //Karma
114       ls=new FlexScheduler(e, FlexScheduler.ERUPTION, null);
115       ls.dosim();
116       System.out.println("Eruption Abort="+ls.getTime());
117       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
118       p.getSeries("ERUPTION").addPoint(i, ls.getTime());
119       pa.getSeries("ERUPTION").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
120
121
122       //Karma
123       ls=new FlexScheduler(e, FlexScheduler.THREAD, null);
124       ls.dosim();
125       System.out.println("ThreadPriority Abort="+ls.getTime());
126       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
127       p.getSeries("THPRIORITY").addPoint(i, ls.getTime());
128       pa.getSeries("THPRIORITY").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
129
130
131       //attack time
132       ls=new FlexScheduler(e, FlexScheduler.ATTACKTIME, null);
133       ls.dosim();
134       System.out.println("ThreadPriority Abort="+ls.getTime());
135       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
136       p.getSeries("ATTACKTIME").addPoint(i, ls.getTime());
137       pa.getSeries("ATTACKTIME").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
138
139
140       //attack thread
141       ls=new FlexScheduler(e, FlexScheduler.ATTACKTHREAD, null);
142       ls.dosim();
143       System.out.println("ThreadPriority Abort="+ls.getTime());
144       System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
145       p.getSeries("ATTACKTHREAD").addPoint(i, ls.getTime());
146       pa.getSeries("ATTACKTHREAD").addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
147
148       //    Scheduler s=new Scheduler(e, besttime);
149       //s.dosim();
150       //System.out.println("Optimal Time="+s.getTime());
151     }
152     p.close();
153     pa.close();
154   }
155 }