Performance
This guide covers techniques for optimizing Jobmon workflow performance.
Note
This page is a placeholder. Content will be expanded based on common performance questions and best practices.
Overview
Workflow performance depends on several factors:
Task granularity: How much work each task does
Parallelization: How many tasks can run concurrently
Resource allocation: Memory, cores, and runtime settings
Dependencies: How tasks are connected
Key Principles
Right-Size Your Tasks
Tasks that are too small create overhead. Tasks that are too large limit parallelism.
Guidelines:
Target 5-30 minutes runtime per task
Avoid tasks shorter than 1 minute
Break up tasks longer than several hours
Minimize Dependencies
Each dependency adds coordination overhead. Only add dependencies that are truly necessary.
Use Arrays Efficiently
Jobmon groups tasks into Slurm job arrays automatically. Tasks with the same TaskTemplate and compute resources are batched together.
Tip: Keep compute resources consistent within a TaskTemplate when possible.
Resource Optimization
Start Conservative
Request less resources initially:
compute_resources={
"memory": "2G",
"runtime": "30m",
"cores": 1,
}
Let Jobmon’s resource retry handle cases that need more.
Use Resource Usage Data
After a workflow completes, check actual usage:
# Get resource usage for a task template
usage = task_template.resource_usage(workflows=[workflow_id])
print(usage)
Concurrency Limits
Control maximum concurrent tasks:
workflow = tool.create_workflow(
name="my_workflow",
max_concurrently_running=500
)
Or per TaskTemplate:
workflow.set_task_template_max_concurrency_limit(
task_template_name="heavy_compute",
limit=100
)
Monitoring Performance
Use the GUI to monitor:
Tasks completed over time
Resource utilization
Bottlenecks (tasks waiting on dependencies)
Future Content
This section will be expanded with:
Detailed benchmarking guidance
Cluster-specific optimization
Memory profiling techniques
I/O optimization strategies