diff options
Diffstat (limited to 'opendc')
20 files changed, 44 insertions, 12 deletions
diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/DurationJobOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/DurationJobOrderPolicy.kt index 6581b7d3..bbdb9f71 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/DurationJobOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/DurationJobOrderPolicy.kt @@ -32,7 +32,7 @@ import com.atlarge.opendc.workflows.workload.Task import com.atlarge.opendc.workflows.workload.WORKFLOW_TASK_DEADLINE /** - * The [DurationJobOrderPolicy] sorts tasks based on the critical path length of the job. + * A [JobOrderPolicy] that orders jobs based on its critical path length. */ data class DurationJobOrderPolicy(val ascending: Boolean = true) : JobOrderPolicy { override fun invoke(scheduler: StageWorkflowService): Comparator<JobState> = diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/LoadJobAdmissionPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/LoadJobAdmissionPolicy.kt index a58d965f..e1c27472 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/LoadJobAdmissionPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/LoadJobAdmissionPolicy.kt @@ -28,7 +28,7 @@ import com.atlarge.opendc.workflows.service.JobState import com.atlarge.opendc.workflows.service.StageWorkflowService /** - * A [JobAdmissionPolicy] that limits the amount of jobs based on the system load. + * A [JobAdmissionPolicy] that limits the amount of jobs based on the average system load. * * @property limit The maximum load before stopping admission. */ diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/RandomJobOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/RandomJobOrderPolicy.kt index c1f23376..14a3d98d 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/RandomJobOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/RandomJobOrderPolicy.kt @@ -30,6 +30,9 @@ import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.workload.Job import java.util.Random +/** + * A [JobOrderPolicy] that randomly orders jobs. + */ object RandomJobOrderPolicy : JobOrderPolicy { override fun invoke(scheduler: StageWorkflowService): Comparator<JobState> = object : Comparator<JobState>, StageWorkflowSchedulerListener { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SizeJobOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SizeJobOrderPolicy.kt index d6c3155b..3bce43cf 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SizeJobOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SizeJobOrderPolicy.kt @@ -28,7 +28,7 @@ import com.atlarge.opendc.workflows.service.JobState import com.atlarge.opendc.workflows.service.StageWorkflowService /** - * The [SizeJobOrderPolicy] sorts tasks based on the order of arrival in the queue. + * A [SizeJobOrderPolicy] that orders jobs based on the number of tasks it has. */ data class SizeJobOrderPolicy(val ascending: Boolean = true) : JobOrderPolicy { override fun invoke(scheduler: StageWorkflowService) = diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SubmissionTimeJobOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SubmissionTimeJobOrderPolicy.kt index bf5bff1d..d6e24b2b 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SubmissionTimeJobOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/job/SubmissionTimeJobOrderPolicy.kt @@ -28,7 +28,7 @@ import com.atlarge.opendc.workflows.service.JobState import com.atlarge.opendc.workflows.service.StageWorkflowService /** - * The [SubmissionTimeJobOrderPolicy] sorts tasks based on the order of arrival in the queue. + * A [JobOrderPolicy] orders jobs in FIFO order. */ data class SubmissionTimeJobOrderPolicy(val ascending: Boolean = true) : JobOrderPolicy { override fun invoke(scheduler: StageWorkflowService) = diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/resource/RandomResourceSelectionPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/resource/RandomResourceSelectionPolicy.kt index 5f070e27..9b05cbac 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/resource/RandomResourceSelectionPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/resource/RandomResourceSelectionPolicy.kt @@ -28,6 +28,9 @@ import com.atlarge.opendc.compute.metal.Node import com.atlarge.opendc.workflows.service.StageWorkflowService import java.util.Random +/** + * A [ResourceSelectionPolicy] that randomly orders the machines. + */ object RandomResourceSelectionPolicy : ResourceSelectionPolicy { override fun invoke(scheduler: StageWorkflowService) = object : Comparator<Node> { private val ids: Map<Node, Long> diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/ActiveTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/ActiveTaskOrderPolicy.kt index 15f0d0dc..b084d26c 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/ActiveTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/ActiveTaskOrderPolicy.kt @@ -29,6 +29,9 @@ import com.atlarge.opendc.workflows.service.StageWorkflowSchedulerListener import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState +/** + * A [TaskOrderPolicy] that orders tasks based on the number of active relative tasks (w.r.t. its job) in the system. + */ data class ActiveTaskOrderPolicy(val ascending: Boolean = true) : TaskOrderPolicy { override fun invoke(scheduler: StageWorkflowService): Comparator<TaskState> = object : Comparator<TaskState>, StageWorkflowSchedulerListener { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/BalancingTaskEligibilityPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/BalancingTaskEligibilityPolicy.kt index f6311644..2255d40c 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/BalancingTaskEligibilityPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/BalancingTaskEligibilityPolicy.kt @@ -30,6 +30,13 @@ import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState import kotlin.math.max +/** + * A [TaskEligibilityPolicy] that balances the tasks based on their job, e.g. do not allow a single job to claim all + * resources of the system. + * + * @property tolerance The maximum difference from the average number of tasks per job in the system as a fraction of + * the average. + */ data class BalancingTaskEligibilityPolicy(val tolerance: Double = 1.5) : TaskEligibilityPolicy { override fun invoke(scheduler: StageWorkflowService): TaskEligibilityPolicy.Logic = object : TaskEligibilityPolicy.Logic, StageWorkflowSchedulerListener { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/CompletionTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/CompletionTaskOrderPolicy.kt index 29d6f6b5..d0cf1374 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/CompletionTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/CompletionTaskOrderPolicy.kt @@ -29,6 +29,9 @@ import com.atlarge.opendc.workflows.service.StageWorkflowSchedulerListener import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState +/** + * A [TaskOrderPolicy] that orders tasks based on the number of completed relative tasks. + */ data class CompletionTaskOrderPolicy(val ascending: Boolean = true) : TaskOrderPolicy { override fun invoke(scheduler: StageWorkflowService): Comparator<TaskState> = object : Comparator<TaskState>, StageWorkflowSchedulerListener { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependenciesTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependenciesTaskOrderPolicy.kt index e49c4858..73d83d21 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependenciesTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependenciesTaskOrderPolicy.kt @@ -28,7 +28,7 @@ import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState /** - * The [DependenciesTaskOrderPolicy] sorts tasks based on the number of dependency tasks it has. + * A [TaskOrderPolicy] that orders tasks based on the number of dependency tasks it has. */ data class DependenciesTaskOrderPolicy(val ascending: Boolean = true) : TaskOrderPolicy { override fun invoke(scheduler: StageWorkflowService) = compareBy<TaskState> { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependentsTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependentsTaskOrderPolicy.kt index 9dcaecb2..85b3543f 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependentsTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DependentsTaskOrderPolicy.kt @@ -28,7 +28,7 @@ import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState /** - * The [DependentsTaskOrderPolicy] sorts tasks based on the number of dependent tasks it has. + * A [TaskOrderPolicy] that orders tasks based on the number of dependent tasks it has. */ data class DependentsTaskOrderPolicy(val ascending: Boolean = true) : TaskOrderPolicy { override fun invoke(scheduler: StageWorkflowService) = compareBy<TaskState> { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationHistoryTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationHistoryTaskOrderPolicy.kt index ea6bf541..426a76a4 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationHistoryTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationHistoryTaskOrderPolicy.kt @@ -29,6 +29,9 @@ import com.atlarge.opendc.workflows.service.StageWorkflowSchedulerListener import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState +/** + * A [TaskOrderPolicy] that orders tasks based on the average duration of the preceding tasks in the job. + */ data class DurationHistoryTaskOrderPolicy(val ascending: Boolean = true) : TaskOrderPolicy { override fun invoke(scheduler: StageWorkflowService): Comparator<TaskState> = diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationTaskOrderPolicy.kt index 96ee233e..23b47891 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/DurationTaskOrderPolicy.kt @@ -31,7 +31,7 @@ import com.atlarge.opendc.workflows.workload.WORKFLOW_TASK_DEADLINE import java.util.UUID /** - * The [DurationTaskOrderPolicy] sorts tasks based on the duration of the task. + * A [TaskOrderPolicy] orders tasks based on the pre-specified (approximate) duration of the task. */ data class DurationTaskOrderPolicy(val ascending: Boolean = true) : TaskOrderPolicy { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitPerJobTaskEligibilityPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitPerJobTaskEligibilityPolicy.kt index 8202c4cd..c039bf6f 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitPerJobTaskEligibilityPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitPerJobTaskEligibilityPolicy.kt @@ -29,6 +29,9 @@ import com.atlarge.opendc.workflows.service.StageWorkflowSchedulerListener import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState +/** + * A [TaskEligibilityPolicy] that limits the number of active tasks of a job in the system. + */ data class LimitPerJobTaskEligibilityPolicy(val limit: Int) : TaskEligibilityPolicy { override fun invoke(scheduler: StageWorkflowService): TaskEligibilityPolicy.Logic = object : TaskEligibilityPolicy.Logic, StageWorkflowSchedulerListener { diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitTaskEligibilityPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitTaskEligibilityPolicy.kt index 29324a27..75322ef5 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitTaskEligibilityPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LimitTaskEligibilityPolicy.kt @@ -27,6 +27,9 @@ package com.atlarge.opendc.workflows.service.stage.task import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState +/** + * A [TaskEligibilityPolicy] that limits the total number of active tasks in the system. + */ data class LimitTaskEligibilityPolicy(val limit: Int) : TaskEligibilityPolicy { override fun invoke(scheduler: StageWorkflowService) = object : TaskEligibilityPolicy.Logic { override fun invoke( diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LoadTaskEligibilityPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LoadTaskEligibilityPolicy.kt index 3f5232d4..090f7be7 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LoadTaskEligibilityPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/LoadTaskEligibilityPolicy.kt @@ -27,6 +27,9 @@ package com.atlarge.opendc.workflows.service.stage.task import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState +/** + * A [TaskEligibilityPolicy] that limits the number of active tasks in the system based on the average system load. + */ data class LoadTaskEligibilityPolicy(val limit: Double) : TaskEligibilityPolicy { override fun invoke(scheduler: StageWorkflowService) = object : TaskEligibilityPolicy.Logic { override fun invoke( diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/NullTaskEligibilityPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/NullTaskEligibilityPolicy.kt index 3dc86e85..889f2ab5 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/NullTaskEligibilityPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/NullTaskEligibilityPolicy.kt @@ -28,7 +28,7 @@ import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState /** - * A [TaskEligibilityPolicy] that marks tasks as eligible if they are tasks roots within the job. + * A [TaskEligibilityPolicy] that always allows new tasks to enter. */ object NullTaskEligibilityPolicy : TaskEligibilityPolicy { override fun invoke(scheduler: StageWorkflowService): TaskEligibilityPolicy.Logic = Logic diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskEligibilityPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskEligibilityPolicy.kt index c15ec741..d6f49d14 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskEligibilityPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskEligibilityPolicy.kt @@ -28,6 +28,9 @@ import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState import java.util.Random +/** + * A [TaskEligibilityPolicy] that randomly accepts tasks in the system with some [probability]. + */ data class RandomTaskEligibilityPolicy(val probability: Double = 0.5) : TaskEligibilityPolicy { override fun invoke(scheduler: StageWorkflowService) = object : TaskEligibilityPolicy.Logic { val random = Random(123) diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskOrderPolicy.kt index 60aad9a7..4c309085 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/RandomTaskOrderPolicy.kt @@ -31,9 +31,7 @@ import com.atlarge.opendc.workflows.workload.Task import kotlin.random.Random /** - * The [RandomTaskOrderPolicy] sorts tasks randomly. - * - * @property random The [Random] instance to use when sorting the list of tasks. + * A [TaskOrderPolicy] that orders the tasks randomly. */ object RandomTaskOrderPolicy : TaskOrderPolicy { override fun invoke(scheduler: StageWorkflowService): Comparator<TaskState> = diff --git a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/SubmissionTimeTaskOrderPolicy.kt b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/SubmissionTimeTaskOrderPolicy.kt index 998d782b..a261965f 100644 --- a/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/SubmissionTimeTaskOrderPolicy.kt +++ b/opendc/opendc-workflows/src/main/kotlin/com/atlarge/opendc/workflows/service/stage/task/SubmissionTimeTaskOrderPolicy.kt @@ -28,7 +28,7 @@ import com.atlarge.opendc.workflows.service.StageWorkflowService import com.atlarge.opendc.workflows.service.TaskState /** - * The [SubmissionTimeTaskOrderPolicy] sorts tasks based on the order of arrival in the queue. + * A [TaskOrderPolicy] that orders tasks based on the order of arrival in the queue. */ data class SubmissionTimeTaskOrderPolicy(val ascending: Boolean = true) : TaskOrderPolicy { override fun invoke(scheduler: StageWorkflowService) = compareBy<TaskState> { |
