public class TransSim {
public static void main(String[] args) {
- int numThreads=32;
- int numTrans=100;
+ int numThreads=20;
+ int numTrans=40;
int deltaTrans=0;
- int numObjects=500;
+ int numObjects=400;
int numAccesses=20;
- int deltaAccesses=5;
- int readPercent=30;
+ int deltaAccesses=3;
+ int readPercent=80; //80 percent read
//time for operation
int delay=20;
int deltaDelay=4;
//time between transactions
int nonTrans=20;
int deltaNonTrans=4;
+ //split objects
+ int splitobjects=100;//100 percent normal objects
+ int splitaccesses=100;//100 percent access to normal objects
+ int readPercentSecond=80;//20 percent of accesses are reads
+ int abortThreshold=0; //need 4 aborts to declare risky
+ int abortRatio=0;//need 40% aborts vs commits to declare risky
+ int deadlockdepth=10;
- long tlazy=0, tcommit=0, tattack=0, tpolite=0, tkarma=0;
- for(int i=0;i<100;i++) {
- Executor e=new Executor(numThreads, numTrans, deltaTrans, numObjects, numAccesses, deltaAccesses, readPercent, delay, deltaDelay, nonTrans, deltaNonTrans);
- System.out.println(e.maxTime());
- FlexScheduler ls=new FlexScheduler(e, FlexScheduler.LAZY);
- ls.dosim();
- System.out.println("Lazy Time="+ls.getTime());
- System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
- int besttime=ls.getTime();
- tlazy+=ls.getTime();
+ Plot p=new Plot("plot");
+ Plot pe=new Plot("plotearliest");
+ Plot pa=new Plot("plotabort",true);
+ Plot ps=new Plot("plotstall");
+ Plot pb=new Plot("plotbackoff");
+ Plot pat=new Plot("plotaborttime");
+
+ int[] policies=new int[]{FlexScheduler.LAZY, FlexScheduler.COMMIT, FlexScheduler.ATTACK, FlexScheduler.SUICIDE, FlexScheduler.TIMESTAMP, FlexScheduler.LOCK, FlexScheduler.LOCKCOMMIT, FlexScheduler.RANDOM, FlexScheduler.KARMA, FlexScheduler.POLITE, FlexScheduler.ERUPTION, FlexScheduler.THREAD, FlexScheduler.ATTACKTIME, FlexScheduler.ATTACKTHREAD};
- //Kill others at commit
- ls=new FlexScheduler(e, FlexScheduler.COMMIT);
- ls.dosim();
- System.out.println("Fast Abort="+ls.getTime());
- System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
- if (ls.getTime()<besttime)
- besttime=ls.getTime();
- tcommit+=ls.getTime();
-
- //Eager attack
- ls=new FlexScheduler(e, FlexScheduler.ATTACK);
- ls.dosim();
- System.out.println("Attack Abort="+ls.getTime());
- System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
- if (ls.getTime()<besttime)
- besttime=ls.getTime();
- tattack+=ls.getTime();
+ for(int i=1;i<40;i++) {
+ System.out.println("i="+i);
+ numThreads=i;
+ Executor e=new Executor(numThreads, numTrans, deltaTrans, numObjects, numAccesses, deltaAccesses, readPercent, delay, deltaDelay, nonTrans, deltaNonTrans, splitobjects, splitaccesses, readPercentSecond);
+ System.out.println(e.maxTime());
- //Eager polite
- ls=new FlexScheduler(e, FlexScheduler.POLITE);
- ls.dosim();
- System.out.println("Polite Abort="+ls.getTime());
- System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
- if (ls.getTime()<besttime)
- besttime=ls.getTime();
- tpolite+=ls.getTime();
+ for(int j=0;j<policies.length;j++) {
+ int policy=policies[j];
+ if(policy==FlexScheduler.LOCK||policy==FlexScheduler.LOCKCOMMIT)
+ continue;
- //Karma
- ls=new FlexScheduler(e, FlexScheduler.KARMA);
- ls.dosim();
- System.out.println("Karma Abort="+ls.getTime());
- System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
- if (ls.getTime()<besttime)
- besttime=ls.getTime();
- tkarma+=ls.getTime();
- // Scheduler s=new Scheduler(e, besttime);
- //s.dosim();
- //System.out.println("Optimal Time="+s.getTime());
+ String policyname=FlexScheduler.getName(policy);
+ FlexScheduler ls=new FlexScheduler(e, policy, null);
+ ls.dosim();
+ System.out.println("Deadlock count="+ls.getDeadLockCount());
+ System.out.println(policyname+" Time="+ls.getTime());
+ System.out.println("Aborts="+ls.getAborts()+" Commit="+ls.getCommits());
+ System.out.println("Stalltime="+ls.getStallTime()+" Backofftime="+ls.getBackoffTime());
+ System.out.println("Aborttime="+ls.getAbortedTime());
+ System.out.println("Earliest="+ls.getEarliestTime());
+
+
+ p.getSeries(policyname).addPoint(i, ls.getTime());
+ pe.getSeries(policyname).addPoint(i, ls.getEarliestTime());
+ pa.getSeries(policyname).addPoint(i, 100.0*((double)ls.getAborts())/((double)(ls.getAborts()+ls.getCommits())));
+ ps.getSeries(policyname).addPoint(i, ls.getStallTime()/i);
+ pb.getSeries(policyname).addPoint(i, ls.getBackoffTime()/i);
+ pat.getSeries(policyname).addPoint(i, ls.getAbortedTime()/i);
+ }
}
- System.out.println("lazy="+tlazy);
- System.out.println("commit="+tcommit);
- System.out.println("attack="+tattack);
- System.out.println("polite="+tpolite);
- System.out.println("karma="+tkarma);
+ p.close();
+ pa.close();
+ pe.close();
+ ps.close();
+ pb.close();
+ pat.close();
}
}
\ No newline at end of file