Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Fragment scaling #296

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@v3
- name: Set up JDK
uses: actions/setup-java@v4
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@ import org.opendc.compute.simulator.telemetry.GuestSystemStats
import org.opendc.simulator.compute.machine.SimMachine
import org.opendc.simulator.compute.machine.VirtualMachine
import org.opendc.simulator.compute.workload.ChainWorkload
import org.opendc.simulator.compute.workload.TraceFragment
import org.opendc.simulator.compute.workload.TraceWorkload
import org.opendc.simulator.compute.workload.trace.TraceFragment
import org.opendc.simulator.compute.workload.trace.TraceWorkload
import org.opendc.simulator.compute.workload.trace.scaling.NoDelayScaling
import java.time.Duration
import java.time.Instant
import java.time.InstantSource
Expand Down Expand Up @@ -93,6 +94,8 @@ public class Guest(

onStart()

val scalingPolicy = NoDelayScaling()

val bootworkload =
TraceWorkload(
ArrayList(
Expand All @@ -107,6 +110,7 @@ public class Guest(
0,
0,
0.0,
scalingPolicy,
)

if (task.workload is TraceWorkload) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
package org.opendc.compute.workload

import mu.KotlinLogging
import org.opendc.simulator.compute.workload.TraceWorkload
import org.opendc.simulator.compute.workload.trace.TraceWorkload
import org.opendc.simulator.compute.workload.trace.scaling.NoDelayScaling
import org.opendc.simulator.compute.workload.trace.scaling.ScalingPolicy
import org.opendc.trace.Trace
import org.opendc.trace.conv.TABLE_RESOURCES
import org.opendc.trace.conv.TABLE_RESOURCE_STATES
Expand Down Expand Up @@ -53,6 +55,7 @@ public class ComputeWorkloadLoader(
private val checkpointInterval: Long = 0L,
private val checkpointDuration: Long = 0L,
private val checkpointIntervalScaling: Double = 1.0,
private val scalingPolicy: ScalingPolicy = NoDelayScaling(),
) : WorkloadLoader(subMissionTime) {
/**
* The logger for this instance.
Expand Down Expand Up @@ -84,7 +87,10 @@ public class ComputeWorkloadLoader(
val cores = reader.getInt(coresCol)
val cpuUsage = reader.getDouble(usageCol)

val builder = fragments.computeIfAbsent(id) { Builder(checkpointInterval, checkpointDuration, checkpointIntervalScaling) }
val builder =
fragments.computeIfAbsent(
id,
) { Builder(checkpointInterval, checkpointDuration, checkpointIntervalScaling, scalingPolicy) }
builder.add(durationMs, cpuUsage, cores)
}

Expand Down Expand Up @@ -178,7 +184,12 @@ public class ComputeWorkloadLoader(
/**
* A builder for a VM trace.
*/
private class Builder(checkpointInterval: Long, checkpointDuration: Long, checkpointIntervalScaling: Double) {
private class Builder(
checkpointInterval: Long,
checkpointDuration: Long,
checkpointIntervalScaling: Double,
scalingPolicy: ScalingPolicy,
) {
/**
* The total load of the trace.
*/
Expand All @@ -187,7 +198,7 @@ public class ComputeWorkloadLoader(
/**
* The internal builder for the trace.
*/
private val builder = TraceWorkload.builder(checkpointInterval, checkpointDuration, checkpointIntervalScaling)
private val builder = TraceWorkload.builder(checkpointInterval, checkpointDuration, checkpointIntervalScaling, scalingPolicy)

/**
* Add a fragment to the trace.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

package org.opendc.compute.workload

import org.opendc.simulator.compute.workload.TraceWorkload
import org.opendc.simulator.compute.workload.trace.TraceWorkload
import java.time.Instant
import java.util.UUID

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ package org.opendc.experiments.base.experiment.specs
import kotlinx.serialization.Serializable
import org.opendc.compute.workload.ComputeWorkloadLoader
import org.opendc.compute.workload.WorkloadLoader
import org.opendc.simulator.compute.workload.trace.scaling.NoDelayScaling
import org.opendc.simulator.compute.workload.trace.scaling.PerfectScaling
import org.opendc.simulator.compute.workload.trace.scaling.ScalingPolicy
import java.io.File

/**
Expand All @@ -41,6 +44,7 @@ public data class WorkloadSpec(
val type: WorkloadTypes,
val sampleFraction: Double = 1.0,
val submissionTime: String? = null,
val scalingPolicy: ScalingPolicyEnum = ScalingPolicyEnum.NoDelay,
) {
public val name: String = File(pathToFile).nameWithoutExtension

Expand All @@ -56,11 +60,6 @@ public data class WorkloadSpec(
* @constructor Create empty Workload types
*/
public enum class WorkloadTypes {
/**
* Compute workload
*
* @constructor Create empty Compute workload
*/
ComputeWorkload,
}

Expand All @@ -74,6 +73,7 @@ public fun getWorkloadLoader(
checkpointInterval: Long,
checkpointDuration: Long,
checkpointIntervalScaling: Double,
scalingPolicy: ScalingPolicy,
): WorkloadLoader {
return when (type) {
WorkloadTypes.ComputeWorkload ->
Expand All @@ -83,6 +83,19 @@ public fun getWorkloadLoader(
checkpointInterval,
checkpointDuration,
checkpointIntervalScaling,
scalingPolicy,
)
}
}

public enum class ScalingPolicyEnum {
NoDelay,
Perfect,
}

public fun getScalingPolicy(scalingPolicyEnum: ScalingPolicyEnum): ScalingPolicy {
return when (scalingPolicyEnum) {
ScalingPolicyEnum.NoDelay -> NoDelayScaling()
ScalingPolicyEnum.Perfect -> PerfectScaling()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import org.opendc.compute.simulator.service.ComputeService
import org.opendc.compute.simulator.telemetry.parquet.ParquetComputeMonitor
import org.opendc.compute.topology.clusterTopology
import org.opendc.experiments.base.experiment.Scenario
import org.opendc.experiments.base.experiment.specs.getScalingPolicy
import org.opendc.experiments.base.experiment.specs.getWorkloadLoader
import org.opendc.simulator.kotlin.runSimulation
import java.io.File
Expand Down Expand Up @@ -80,6 +81,8 @@ public fun runScenario(
val checkpointDuration = scenario.checkpointModelSpec?.checkpointDuration ?: 0L
val checkpointIntervalScaling = scenario.checkpointModelSpec?.checkpointIntervalScaling ?: 1.0

val scalingPolicy = getScalingPolicy(scenario.workloadSpec.scalingPolicy)

val workloadLoader =
getWorkloadLoader(
scenario.workloadSpec.type,
Expand All @@ -88,6 +91,7 @@ public fun runScenario(
checkpointInterval,
checkpointDuration,
checkpointIntervalScaling,
scalingPolicy,
)
val workload = workloadLoader.sampleByLoad(scenario.workloadSpec.sampleFraction)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll
import org.opendc.compute.workload.Task
import org.opendc.simulator.compute.workload.TraceFragment
import org.opendc.simulator.compute.workload.trace.TraceFragment
import java.util.ArrayList

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll
import org.opendc.compute.workload.Task
import org.opendc.simulator.compute.workload.TraceFragment
import org.opendc.simulator.compute.workload.trace.TraceFragment
import java.util.ArrayList

/**
Expand Down
Loading
Loading