Autoscaled runners: run multiple jobs concurrently by runner

I am setting up autoscaling with gitlab runners. Here is my config.toml:

concurrent = 9
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "gitlab-runner-orchestrator"
  limit = 3
  url = "https://gitlab.com/"
  token = "xxx"
  executor = "docker+machine"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "ubuntu:20.04"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.machine]
    MaxGrowthRate = 1
    IdleCount = 0
    IdleTime = 1800
    MaxBuilds = 100
    MachineDriver = "google"
    MachineName = "gitlab-runner-%s"
    MachineOptions = [...]
    OffPeakTimezone = ""
    OffPeakIdleCount = 0
    OffPeakIdleTime = 0

What I want to do: I want to start at most 3 runners. However I want each runner to run up to 3 jobs at the same time. So I should run 9 jobs concurrently at most.

What it does: it starts 3 runners but each runner run a single job at one time.

What did I wrong? As I understand the config file, I should have 3 [[runners]] sections, each with limit = 3 but it doesn’t look to be compatible with docker-machine and dynamic provisioning.

In autoscale setup the limit parameter is used only to limit the number of machines that are running at a single point of time. As you have noticed, each machine does only 1 job at a time.