summaryrefslogtreecommitdiff
path: root/opendc-compute
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-compute')
-rw-r--r--opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt34
1 files changed, 24 insertions, 10 deletions
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
index 8a2585ce..ab7f051f 100644
--- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
+++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
@@ -27,6 +27,8 @@ import org.opendc.simulator.compute.workload.SimTraceWorkload
import org.opendc.trace.*
import org.opendc.trace.opendc.OdcVmTraceFormat
import java.io.File
+import java.time.Duration
+import java.time.Instant
import java.util.*
import java.util.concurrent.ConcurrentHashMap
import kotlin.math.roundToLong
@@ -58,15 +60,21 @@ public class ComputeWorkloadLoader(private val baseDir: File) {
private fun parseFragments(trace: Trace): Map<String, List<SimTraceWorkload.Fragment>> {
val reader = checkNotNull(trace.getTable(TABLE_RESOURCE_STATES)).newReader()
+ val idCol = reader.resolve(RESOURCE_ID)
+ val timestampCol = reader.resolve(RESOURCE_STATE_TIMESTAMP)
+ val durationCol = reader.resolve(RESOURCE_STATE_DURATION)
+ val coresCol = reader.resolve(RESOURCE_CPU_COUNT)
+ val usageCol = reader.resolve(RESOURCE_STATE_CPU_USAGE)
+
val fragments = mutableMapOf<String, MutableList<SimTraceWorkload.Fragment>>()
return try {
while (reader.nextRow()) {
- val id = reader.get(RESOURCE_ID)
- val time = reader.get(RESOURCE_STATE_TIMESTAMP)
- val duration = reader.get(RESOURCE_STATE_DURATION)
- val cores = reader.getInt(RESOURCE_CPU_COUNT)
- val cpuUsage = reader.getDouble(RESOURCE_STATE_CPU_USAGE)
+ val id = reader.get(idCol) as String
+ val time = reader.get(timestampCol) as Instant
+ val duration = reader.get(durationCol) as Duration
+ val cores = reader.getInt(coresCol)
+ val cpuUsage = reader.getDouble(usageCol)
val fragment = SimTraceWorkload.Fragment(
time.toEpochMilli(),
@@ -90,21 +98,27 @@ public class ComputeWorkloadLoader(private val baseDir: File) {
private fun parseMeta(trace: Trace, fragments: Map<String, List<SimTraceWorkload.Fragment>>): List<VirtualMachine> {
val reader = checkNotNull(trace.getTable(TABLE_RESOURCES)).newReader()
+ val idCol = reader.resolve(RESOURCE_ID)
+ val startTimeCol = reader.resolve(RESOURCE_START_TIME)
+ val stopTimeCol = reader.resolve(RESOURCE_STOP_TIME)
+ val coresCol = reader.resolve(RESOURCE_CPU_COUNT)
+ val memCol = reader.resolve(RESOURCE_MEM_CAPACITY)
+
var counter = 0
val entries = mutableListOf<VirtualMachine>()
return try {
while (reader.nextRow()) {
- val id = reader.get(RESOURCE_ID)
+ val id = reader.get(idCol) as String
if (!fragments.containsKey(id)) {
continue
}
- val submissionTime = reader.get(RESOURCE_START_TIME)
- val endTime = reader.get(RESOURCE_STOP_TIME)
- val maxCores = reader.getInt(RESOURCE_CPU_COUNT)
- val requiredMemory = reader.getDouble(RESOURCE_MEM_CAPACITY) / 1000.0 // Convert from KB to MB
+ val submissionTime = reader.get(startTimeCol) as Instant
+ val endTime = reader.get(stopTimeCol) as Instant
+ val maxCores = reader.getInt(coresCol)
+ val requiredMemory = reader.getDouble(memCol) / 1000.0 // Convert from KB to MB
val uid = UUID.nameUUIDFromBytes("$id-${counter++}".toByteArray())
val vmFragments = fragments.getValue(id).asSequence()