Author: toad
Date: 2009-01-12 18:27:49 +0000 (Mon, 12 Jan 2009)
New Revision: 25026

Added:
   trunk/freenet/src/freenet/support/math/MedianMeanRunningAverage.java
Modified:
   trunk/freenet/src/freenet/io/xfer/BlockReceiver.java
   trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
   trunk/freenet/src/freenet/node/RequestSender.java
Log:
Median+mean running average, and use it to provide more stats. FIXME must be 
configurable, as is theoretically a memory leak.


Modified: trunk/freenet/src/freenet/io/xfer/BlockReceiver.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockReceiver.java        2009-01-12 
17:38:42 UTC (rev 25025)
+++ trunk/freenet/src/freenet/io/xfer/BlockReceiver.java        2009-01-12 
18:27:49 UTC (rev 25026)
@@ -34,6 +34,7 @@
 import freenet.support.BitArray;
 import freenet.support.Buffer;
 import freenet.support.Logger;
+import freenet.support.math.MedianMeanRunningAverage;
 import freenet.support.math.TrivialRunningAverage;
 
 /**
@@ -171,7 +172,7 @@
                long transferTime = (endTime - startTime);
                synchronized(avgTimeTaken) {
                        avgTimeTaken.report(transferTime);
-                       Logger.minor(this, "Block transfer took 
"+transferTime+"ms - average is "+avgTimeTaken.currentValue());
+                       Logger.minor(this, "Block transfer took 
"+transferTime+"ms - average is "+avgTimeTaken);
                }
                
                return _prb.getBlock();
@@ -192,7 +193,7 @@
                }
        }
        
-       private static TrivialRunningAverage avgTimeTaken = new 
TrivialRunningAverage();
+       private static MedianMeanRunningAverage avgTimeTaken = new 
MedianMeanRunningAverage();
        
        private void maybeResetDiscardFilter() {
                long timeleft=discardEndTime-System.currentTimeMillis();

Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2009-01-12 
17:38:42 UTC (rev 25025)
+++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java     2009-01-12 
18:27:49 UTC (rev 25026)
@@ -36,6 +36,8 @@
 import freenet.support.Logger;
 import freenet.support.TimeUtil;
 import freenet.support.io.NativeThread;
+import freenet.support.math.MedianMeanRunningAverage;
+import freenet.support.math.TrivialRunningAverage;
 
 /**
  * @author ian
@@ -152,6 +154,7 @@
        }
        
        public boolean send(Executor executor) {
+               long startTime = System.currentTimeMillis();
                PartiallyReceivedBlock.PacketReceivedListener myListener=null;
                
                try {
@@ -226,6 +229,13 @@
                                                }
                                        }
                                } else if 
(msg.getSpec().equals(DMT.allReceived)) {
+                                       long endTime = 
System.currentTimeMillis();
+                                       long transferTime = (endTime - 
startTime);
+                                       synchronized(avgTimeTaken) {
+                                               
avgTimeTaken.report(transferTime);
+                                               Logger.minor(this, "Block send 
took "+transferTime+" : "+avgTimeTaken);
+                                       }
+                                       
                                        return true;
                                } else if 
(msg.getSpec().equals(DMT.sendAborted)) {
                                        // Overloaded: receiver no longer wants 
the data
@@ -264,6 +274,8 @@
                }
        }
 
+       private static MedianMeanRunningAverage avgTimeTaken = new 
MedianMeanRunningAverage();
+       
        public int getNumSent() {
                int ret = 0;
                for (int x=0; x<_sentPackets.getSize(); x++) {

Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java   2009-01-12 17:38:42 UTC 
(rev 25025)
+++ trunk/freenet/src/freenet/node/RequestSender.java   2009-01-12 18:27:49 UTC 
(rev 25026)
@@ -34,6 +34,7 @@
 import freenet.support.ShortBuffer;
 import freenet.support.SimpleFieldSet;
 import freenet.support.io.NativeThread;
+import freenet.support.math.MedianMeanRunningAverage;
 
 /**
  * @author amphibian
@@ -97,6 +98,7 @@
     static final int GET_OFFER_TRANSFER_FAILED = 11;
     private PeerNode successFrom;
     private PeerNode lastNode;
+    private final long startTime;
     
     static String getStatusString(int status) {
        switch(status) {
@@ -147,6 +149,7 @@
      */
     public RequestSender(Key key, DSAPublicKey pubKey, short htl, long uid, 
Node n,
             PeerNode source, boolean offersOnly) {
+       startTime = System.currentTimeMillis();
         this.key = key;
         this.pubKey = pubKey;
         this.htl = htl;
@@ -1054,6 +1057,8 @@
        }
     }
     
+       private static MedianMeanRunningAverage avgTimeTaken = new 
MedianMeanRunningAverage();
+       
     private void finish(int code, PeerNode next, boolean fromOfferedKey) {
        if(logMINOR) Logger.minor(this, "finish("+code+ ')');
         
@@ -1065,6 +1070,13 @@
         }
                
         if(status == SUCCESS) {
+               if(key instanceof NodeCHK) {
+                       long timeTaken = System.currentTimeMillis() - startTime;
+                       synchronized(avgTimeTaken) {
+                               avgTimeTaken.report(timeTaken);
+                               if(logMINOR) Logger.minor(this, "Successful CHK 
request took "+timeTaken+" average "+avgTimeTaken);
+                       }
+               }
                if(next != null) {
                        next.onSuccess(false, key instanceof NodeSSK);
                }

Added: trunk/freenet/src/freenet/support/math/MedianMeanRunningAverage.java
===================================================================
--- trunk/freenet/src/freenet/support/math/MedianMeanRunningAverage.java        
                        (rev 0)
+++ trunk/freenet/src/freenet/support/math/MedianMeanRunningAverage.java        
2009-01-12 18:27:49 UTC (rev 25026)
@@ -0,0 +1,54 @@
+package freenet.support.math;
+
+import java.util.ArrayList;
+import java.util.TreeSet;
+
+public class MedianMeanRunningAverage implements RunningAverage {
+       
+       final ArrayList<Double> reports;
+       final TrivialRunningAverage mean;
+
+       public MedianMeanRunningAverage() {
+               reports = new ArrayList<Double>();
+               mean = new TrivialRunningAverage();
+       }
+
+       public MedianMeanRunningAverage(MedianMeanRunningAverage average) {
+               this.mean = new TrivialRunningAverage(average.mean);
+               this.reports = new ArrayList<Double>();
+               reports.addAll(average.reports);
+       }
+
+       public Object clone() {
+               return new MedianMeanRunningAverage(this);
+       }
+
+       public synchronized long countReports() {
+               return reports.size();
+       }
+
+       public synchronized double currentValue() {
+               int size = reports.size();
+               int middle = size / 2;
+               java.util.Collections.sort(reports);
+               return reports.get(middle);
+       }
+
+       public synchronized void report(double d) {
+               mean.report(d);
+               reports.add(d);
+       }
+
+       public void report(long d) {
+               report((double)d);
+       }
+
+       public double valueIfReported(double r) {
+               throw new UnsupportedOperationException();
+       }
+       
+       public synchronized String toString() {
+               return "Median "+currentValue()+" mean "+mean.currentValue();
+       }
+
+}

_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to