summaryrefslogtreecommitdiff
path: root/simulator/opendc-simulator
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-03-27 12:48:51 +0100
committerGitHub <noreply@github.com>2021-03-27 12:48:51 +0100
commitbef2b2fc9ab97941613ec4537ebca1eb3fccdee6 (patch)
tree4a4c1e0fb2de6aa0a0b9810f9c255e039a7ce47b /simulator/opendc-simulator
parent57ebc8a1c6779d7e7276754838e83f1c026cceb9 (diff)
parent5b0eaf76ec00192c755b268b7655f6463c5bc62f (diff)
Integrate OpenTelemetry into OpenDC
This pull request resolves issue #91 by adopting the industry-standard OpenTelemetry standard for collecting traces and metrics in OpenDC simulations: * Metrics will now be exposed through OpenTelemetry's metrics API * `opendc-telemetry` provides complementary code to support gathering telemetry in OpenDC. **Breaking API Changes** * `opendc-tracer` has been removed. * `EventFlow` and all usages of it have been removed. * `opendc-experiments-sc18` has been removed for now, but a suitable replacement will follow soon.
Diffstat (limited to 'simulator/opendc-simulator')
-rw-r--r--simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimAbstractMachine.kt7
-rw-r--r--simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt1
-rw-r--r--simulator/opendc-simulator/opendc-simulator-resources/src/jmh/kotlin/org/opendc/simulator/resources/SimResourceBenchmarks.kt2
-rw-r--r--simulator/opendc-simulator/opendc-simulator-resources/src/main/kotlin/org/opendc/simulator/resources/SimAbstractResourceContext.kt14
4 files changed, 20 insertions, 4 deletions
diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimAbstractMachine.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimAbstractMachine.kt
index 1c0f94fd..2127b066 100644
--- a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimAbstractMachine.kt
+++ b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimAbstractMachine.kt
@@ -108,8 +108,11 @@ public abstract class SimAbstractMachine(private val clock: Clock) : SimMachine
.launchIn(this)
launch {
- source.consume(consumer)
- job.cancel()
+ try {
+ source.consume(consumer)
+ } finally {
+ job.cancel()
+ }
}
}
}
diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt
index f86c4198..830ff70e 100644
--- a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt
+++ b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/SimBareMetalMachine.kt
@@ -71,6 +71,7 @@ public class SimBareMetalMachine(
override fun close() {
super.close()
+
scheduler.close()
scope.cancel()
}
diff --git a/simulator/opendc-simulator/opendc-simulator-resources/src/jmh/kotlin/org/opendc/simulator/resources/SimResourceBenchmarks.kt b/simulator/opendc-simulator/opendc-simulator-resources/src/jmh/kotlin/org/opendc/simulator/resources/SimResourceBenchmarks.kt
index 937b6966..f2eea97c 100644
--- a/simulator/opendc-simulator/opendc-simulator-resources/src/jmh/kotlin/org/opendc/simulator/resources/SimResourceBenchmarks.kt
+++ b/simulator/opendc-simulator/opendc-simulator-resources/src/jmh/kotlin/org/opendc/simulator/resources/SimResourceBenchmarks.kt
@@ -71,7 +71,7 @@ class SimResourceBenchmarks {
fun benchmarkForwardOverhead(state: Workload) {
return scope.runBlockingTest {
val provider = SimResourceSource(4200.0, clock, scheduler)
- val forwarder = SimResourceTransformer()
+ val forwarder = SimResourceForwarder()
provider.startConsumer(forwarder)
return@runBlockingTest forwarder.consume(state.consumers[0])
}
diff --git a/simulator/opendc-simulator/opendc-simulator-resources/src/main/kotlin/org/opendc/simulator/resources/SimAbstractResourceContext.kt b/simulator/opendc-simulator/opendc-simulator-resources/src/main/kotlin/org/opendc/simulator/resources/SimAbstractResourceContext.kt
index 9705bd17..5c5ee038 100644
--- a/simulator/opendc-simulator/opendc-simulator-resources/src/main/kotlin/org/opendc/simulator/resources/SimAbstractResourceContext.kt
+++ b/simulator/opendc-simulator/opendc-simulator-resources/src/main/kotlin/org/opendc/simulator/resources/SimAbstractResourceContext.kt
@@ -54,8 +54,17 @@ public abstract class SimAbstractResourceContext(
override val remainingWork: Double
get() {
val activeCommand = activeCommand ?: return 0.0
- return computeRemainingWork(activeCommand, clock.millis())
+ val now = clock.millis()
+
+ return if (_remainingWorkFlush < now) {
+ _remainingWorkFlush = now
+ computeRemainingWork(activeCommand, now).also { _remainingWork = it }
+ } else {
+ _remainingWork
+ }
}
+ private var _remainingWork: Double = 0.0
+ private var _remainingWorkFlush: Long = Long.MIN_VALUE
/**
* A flag to indicate the state of the context.
@@ -201,6 +210,9 @@ public abstract class SimAbstractResourceContext(
// Flush may not be called when the resource consumer has finished
throw IllegalStateException()
}
+
+ // Flush remaining work cache
+ _remainingWorkFlush = Long.MIN_VALUE
} catch (cause: Throwable) {
doStop(cause)
} finally {