| A list of fun things we've done for CI runners to improve CI: - Configured a block-level in-memory disk accelerator / cache (fs operations at the speed of RAM!) - Benchmarked EC2 instance types (m7a is the best x86 today, m8g is the best arm64) - "Warming" the root EBS volume by accessing a set of priority blocks before the job starts to give the job full disk performance [0] - Launching each runner instance in a public subnet with a public IP - the runner gets full throughput from AWS to the public internet, and IP-based rate limits rarely apply (Docker Hub) - Configuring Docker with containerd/estargz support - Just generally turning kernel options and unit files off that aren't needed [0] https://docs.aws.amazon.com/ebs/latest/userguide/ebs-initial... |
Are you not using a caching registry mirror, instead pulling the same image from Hub for each runner...? If so that seems like it would be an easy win to add, unless you specifically do mostly hot/unique pulls.
The more efficient answer to those rate limits is almost always to pull less times for the same work rather than scaling in a way that circumvents them.