summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorgios Andreadis <info@gandreadis.com>2020-05-19 16:44:12 +0200
committerGeorgios Andreadis <info@gandreadis.com>2020-05-20 16:02:42 +0200
commit458c431223adc22693eec7b5f0b679ff464bcb1b (patch)
tree37f47feaf28bccd06a8a50b84414bb83d665789d
parentcb5c8ba35954e1fc012b82724433e283aaf4acbe (diff)
Add normalization for bitbrains trace
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20TraceConverter.kt34
1 files changed, 32 insertions, 2 deletions
diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20TraceConverter.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20TraceConverter.kt
index bfa217e9..82aeda43 100644
--- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20TraceConverter.kt
+++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/trace/Sc20TraceConverter.kt
@@ -141,10 +141,40 @@ fun readSolvinityTrace(
val timestampCol = 0
val cpuUsageCol = 1
val coreCol = 12
- val vmIdCol = 19
val provisionedMemoryCol = 20
val traceInterval = 5 * 60 * 1000L
+ // Identify start time of the entire trace
+ var minTimestamp = Long.MAX_VALUE
+ traceDirectory.walk()
+ .filterNot { it.isDirectory }
+ .filter { it.extension == "csv" || it.extension == "txt" }
+ .toList()
+ .forEach { vmFile ->
+ BufferedReader(FileReader(vmFile)).use { reader ->
+ reader.lineSequence()
+ .chunked(128)
+ .forEachIndexed { idx, lines ->
+ for (line in lines) {
+ // Ignore comments in the trace
+ if (line.startsWith("#") || line.isBlank()) {
+ continue
+ }
+
+ val values = line.split(" ")
+ val timestamp = (values[timestampCol].trim().toLong() - 5 * 60) * 1000L
+
+ if (timestamp < minTimestamp) {
+ minTimestamp = timestamp
+ }
+ return@forEach
+ }
+ }
+ }
+ }
+
+ println("Start of trace at $minTimestamp")
+
val allFragments = mutableListOf<Fragment>()
traceDirectory.walk()
@@ -176,7 +206,7 @@ fun readSolvinityTrace(
val values = line.split(" ")
vmId = vmFile.name
- val timestamp = (values[timestampCol].trim().toLong() - 5 * 60) * 1000L
+ val timestamp = (values[timestampCol].trim().toLong() - 5 * 60) * 1000L - minTimestamp
cores = values[coreCol].trim().toInt()
requiredMemory = max(requiredMemory, values[provisionedMemoryCol].trim().toLong())
maxCores = max(maxCores, cores)