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