This is an automated email from the ASF dual-hosted git repository.

arnabp20 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemds.git


The following commit(s) were added to refs/heads/master by this push:
     new 9bbe137  [SYSTEMDS-2740] Add saved and missed compute time to Lineage 
stats
9bbe137 is described below

commit 9bbe13731569c9735bbea8040cc39fc71e2584a8
Author: arnabp <[email protected]>
AuthorDate: Mon Nov 23 10:08:20 2020 +0100

    [SYSTEMDS-2740] Add saved and missed compute time to Lineage stats
    
    Example: LinCache Computetime (S/M):  108.305/7.504 sec.
    That is, lineage cache saved 108.3 seconds of execution, but
    missed 7.5 seconds due to evictions.
---
 .../apache/sysds/runtime/lineage/LineageCache.java | 17 ++++++++++++---
 .../runtime/lineage/LineageCacheEviction.java      |  5 +++--
 .../runtime/lineage/LineageCacheStatistics.java    | 25 +++++++++++++++++++++-
 .../java/org/apache/sysds/utils/Statistics.java    |  3 ++-
 4 files changed, 43 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java 
b/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
index 71f01bd..1ebaa50 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageCache.java
@@ -307,9 +307,13 @@ public class LineageCache
                                        else if (data instanceof ScalarObject)
                                                
centry.setValue((ScalarObject)data, computetime);
 
+                                       if (DMLScript.STATISTICS && 
LineageCacheEviction._removelist.containsKey(centry._key)) {
+                                               // Add to missed compute time
+                                               
LineageCacheStatistics.incrementMissedComputeTime(centry._computeTime);
+                                       }
+
                                        //maintain order for eviction
                                        LineageCacheEviction.addEntry(centry);
-
                                }
                        }
                }
@@ -388,10 +392,13 @@ public class LineageCache
                // This method is called only when entry is present either in 
cache or in local FS.
                LineageCacheEntry e = _cache.get(key);
                if (e != null && e.getCacheStatus() != 
LineageCacheStatus.SPILLED) {
+                       if (DMLScript.STATISTICS) {
+                               // Increment hit count and saved computation 
time.
+                               LineageCacheStatistics.incrementMemHits();
+                               
LineageCacheStatistics.incrementSavedComputeTime(e._computeTime);
+                       }
                        // Maintain order for eviction
                        LineageCacheEviction.getEntry(e);
-                       if (DMLScript.STATISTICS)
-                               LineageCacheStatistics.incrementMemHits();
                        return e;
                }
                else
@@ -422,6 +429,10 @@ public class LineageCache
                                e._nextEntry = oe._nextEntry;
                                oe._nextEntry = e;
                        }
+
+                       if (DMLScript.STATISTICS && 
LineageCacheEviction._removelist.containsKey(e._key))
+                               // Add to missed compute time
+                               
LineageCacheStatistics.incrementMissedComputeTime(e._computeTime);
                        
                        //maintain order for eviction
                        LineageCacheEviction.addEntry(e);
diff --git 
a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheEviction.java 
b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheEviction.java
index 6fc3d38..e8c4d8d 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheEviction.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheEviction.java
@@ -65,7 +65,7 @@ public class LineageCacheEviction
                        // with high computation time might contain function 
outputs. Pinning them
                        // will increase chances of multilevel reuse.
                        entry.setCacheStatus(LineageCacheStatus.PINNED);
-
+               
                if (entry.isMatrixValue() || exectime < 
LineageCacheConfig.MIN_SPILL_TIME_ESTIMATE) {
                        // Don't add the memory pinned entries in weighted 
queue. 
                        // The eviction queue should contain only entries that 
can
@@ -86,6 +86,7 @@ public class LineageCacheEviction
                        }
                }
                // Increase computation time of the sought entry.
+               // FIXME: avoid when called from partial reuse methods
                if (LineageCacheConfig.isCostNsize()) {
                        if (weightedQueue.remove(entry)) {
                                entry.updateComputeTime();
@@ -205,7 +206,7 @@ public class LineageCacheEviction
                                removeOrSpillEntry(cache, e, false);
                                continue;
                        }
-
+                       
                        if (!e.getCacheStatus().canEvict()) {
                                // Note: Execution should never reach here, as 
these 
                                //       entries are not part of the 
weightedQueue.
diff --git 
a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheStatistics.java 
b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheStatistics.java
index 5b54592..a4cd041 100644
--- a/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheStatistics.java
+++ b/src/main/java/org/apache/sysds/runtime/lineage/LineageCacheStatistics.java
@@ -38,6 +38,8 @@ public class LineageCacheStatistics {
        private static final LongAdder _numRewrites     = new LongAdder();
        private static final LongAdder _ctimeFSRead     = new LongAdder(); //in 
nano sec
        private static final LongAdder _ctimeFSWrite    = new LongAdder(); //in 
nano sec
+       private static final LongAdder _ctimeSaved      = new LongAdder(); //in 
nano sec
+       private static final LongAdder _ctimeMissed     = new LongAdder(); //in 
nano sec
 
        public static void reset() {
                _numHitsMem.reset();
@@ -52,6 +54,8 @@ public class LineageCacheStatistics {
                _numRewrites.reset();
                _ctimeFSRead.reset();
                _ctimeFSWrite.reset();
+               _ctimeSaved.reset();
+               _ctimeMissed.reset();
        }
        
        public static void incrementMemHits() {
@@ -122,6 +126,18 @@ public class LineageCacheStatistics {
                _ctimeFSWrite.add(delta);
        }
 
+       public static void incrementSavedComputeTime(long delta) {
+               // Total time saved by reusing.
+               // TODO: Handle overflow
+               _ctimeSaved.add(delta);
+       }
+
+       public static void incrementMissedComputeTime(long delta) {
+               // Total time missed due to eviction.
+               // TODO: Handle overflow
+               _ctimeMissed.add(delta);
+       }
+
        public static long getMultiLevelFnHits() {
                return _numHitsFunc.longValue();
        }
@@ -166,11 +182,18 @@ public class LineageCacheStatistics {
                return sb.toString();
        }
        
-       public static String displayTime() {
+       public static String displayFSTime() {
                StringBuilder sb = new StringBuilder();
                sb.append(String.format("%.3f", 
((double)_ctimeFSRead.longValue())/1000000000)); //in sec
                sb.append("/");
                sb.append(String.format("%.3f", 
((double)_ctimeFSWrite.longValue())/1000000000)); //in sec
                return sb.toString();
        }
+       public static String displayComputeTime() {
+               StringBuilder sb = new StringBuilder();
+               sb.append(String.format("%.3f", 
((double)_ctimeSaved.longValue())/1000000000)); //in sec
+               sb.append("/");
+               sb.append(String.format("%.3f", 
((double)_ctimeMissed.longValue())/1000000000)); //in sec
+               return sb.toString();
+       }
 }
diff --git a/src/main/java/org/apache/sysds/utils/Statistics.java 
b/src/main/java/org/apache/sysds/utils/Statistics.java
index f196968..ad52b10 100644
--- a/src/main/java/org/apache/sysds/utils/Statistics.java
+++ b/src/main/java/org/apache/sysds/utils/Statistics.java
@@ -984,7 +984,8 @@ public class Statistics
                                sb.append("LinCache hits (Mem/FS/Del): \t" + 
LineageCacheStatistics.displayHits() + ".\n");
                                sb.append("LinCache MultiLevel (Ins/SB/Fn):" + 
LineageCacheStatistics.displayMultiLevelHits() + ".\n");
                                sb.append("LinCache writes (Mem/FS/Del): \t" + 
LineageCacheStatistics.displayWtrites() + ".\n");
-                               sb.append("LinCache FStimes (Rd/Wr): \t" + 
LineageCacheStatistics.displayTime() + " sec.\n");
+                               sb.append("LinCache FStimes (Rd/Wr): \t" + 
LineageCacheStatistics.displayFSTime() + " sec.\n");
+                               sb.append("LinCache Computetime (S/M): \t" + 
LineageCacheStatistics.displayComputeTime() + " sec.\n");
                                sb.append("LinCache Rewrites:    \t\t" + 
LineageCacheStatistics.displayRewrites() + ".\n");
                        }
                        if( ConfigurationManager.isCodegenEnabled() ) {

Reply via email to