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() ) {