adding a test case
[IRC.git] / Robust / TransSim / TransSim.java
index 0e27a9a736b8bdd943181c16c2affc84ea1c4566..edf81ab018dd82ad44866403613ceb1a63226d5d 100644 (file)
@@ -1,73 +1,70 @@
 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