Skip to content

CI Job Contention #418

Closed
Closed
@CleanCut

Description

@CleanCut

The way I phrased my information in #129 (comment) may have led to the conclusion that GitHub Actions are unlimited in every way for open source projects. It is true that the total number of minutes does not have a limit. It is not true that the number of concurrent jobs is unlimited.

There are two limits on the number of concurrent jobs for free, open source plans:

  • 20 total concurrent jobs
  • 5 of which may be macOS jobs

We're hitting at least the first limit. Due to the proliferation of the number of jobs in a CI run (#357, #373, etc.), combined with the high level of activity on this project, a number of jobs end up waiting in the queue for a slot to open for them to run.

For example, take a look at this run. If it had been able to launch all the jobs simultaneously, it would have completed in 45 seconds because clippy quickly failed. But the clippy job didn't get a chance to start for ~6 minutes because of other concurrent jobs from other pull requests.

Currently there are 9 jobs defined. That means we can only have 2 concurrent CI runs before we start piling up delays. I would suggest, at a minimum, to collapse 3 of the jobs (2 tests, 1 clean) into 2 of the build jobs, for a total of 6 jobs. Tests already have to build the code, so there shouldn't be any reduction in what CI is checking there. Adding the "clean" stuff on top of one of those may increase the max runtime of that particular job a little bit, but if we pick the job which completes the fastest on average, we may avoid increasing the max job time at all. Even if we do increase max job time by a few seconds, the overall increase in throughput is a clear win.

If no one else beats me to it, I'm willing to make a PR for this later this week. I won't complain if someone else would rather do it, though. 😄

/cc @AngelOnFira

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-Build-SystemRelated to build systems or continuous integrationC-PerformanceA change motivated by improving speed, memory usage or compile times

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions