self-host →

Fastest GitHub Actions Runners: Disk I/O

Compare alternatives to GitHub Actions runners across CPU speed, queuing times, and price. Includes self-hosted and third-party options such as RunsOn, AWS CodeBuild, Ubicloud, Namespace, and Blacksmith.

This page offers a detailed comparison of disk I/O performance for various providers of GitHub Actions self-hosted runners. The aim is to assist in identifying the best GitHub Actions self-hosted runner provider for your projects, based on your specific needs.

Providers included in the benchmark#

Official: GitHub (Azure)
Self-hosted: 👋RunsOn (AWS) ·AWS CodeBuild (AWS)
Third-party: Namespace (US/Europe) · Blacksmith (Hetzner) · StarSling (Oracle Cloud) · Avrea (Dedicated hardware) · Warpbuild (Hetzner / AWS) · Ubicloud (Hetzner)

Results#

The comparable table is sorted by Random writes, because this is where network-attached EBS volumes show their main limitation. You can click on any column header to sort by a different metric.

Comparable runner results

This table keeps default runners and RunsOn instance types at 2 vCPU or below, so the network-attached EBS and smaller NVMe results are easier to compare.

ProvidersAll providers
Provider
Type
Size
Configuration
Seq Writes (MiB/s)
Rand Writes (MiB/s)
Seq Reads (MiB/s)
Rand Reads (MiB/s)
CPU Single
Postgres RW (TPS)
Postgres RO (TPS)
Ping GitHub (ms)
Ping 8.8.8.8 (ms)
Infrastructure
Blacksmithblacksmith-2vcpu-ubuntu-2404145 GiBext42,2675844,3858924,5406,15544,862N/AN/AAS20454 SECURED SERVERS LLC
Namespacenscloud-ubuntu-24.04-amd64-2x863 GiBoverlay2,4664093,3746024,7364,30535,040N/AN/AAS401483 Namespace Labs
Avreaavrea-ubuntu-24.04-2-vcpu77 GiBext44,36130712,8004504,5223,73740,9759.95.2AS16276 OVH SAS
RunsOni7ie.large1.2 TiBoverlay2531775051792,5532,95822,53311.6AS14618 Amazon.com, Inc.
RunsOni7i.large428 GiBoverlay4181695331993,0123,47626,4650.91AS14618 Amazon.com, Inc.
RunsOni8g.large428 GiBoverlay4131695332021,9472,65417,8611.81.6AS14618 Amazon.com, Inc.
StarSlingstarsling-ubuntu-24.04-2150 GiBext41,7131271,9761603,2922,61321,36162.22.5AS31898 Oracle Corporation
RunsOnm9gd.large108 GiBoverlay147883101762,4724,00627,6211.91.7AS14618 Amazon.com, Inc.
RunsOnc7gd.large108 GiBoverlay74691591361,5571,4129,7500.80.5AS14618 Amazon.com, Inc.
RunsOnm8id.large108 GiBoverlay114682391363,2153,35827,0091.51.4AS14618 Amazon.com, Inc.
WarpBuildwarp-ubuntu-2404-x64-2x145 GiBext4889481,714713,8081,68817,23423.71.1AS24940 Hetzner Online GmbH
Ubicloudubicloud-standard-2-ubuntu-240472 GiBext4366241,360592,91690216,0325.85.5AS24940 Hetzner Online GmbH
GitHububuntu-24.0472 GiBext420115201372,3121,2998,875N/AN/AAS8075 Microsoft Corporation
Ubicloudubicloud-premium-2-ubuntu-240472 GiBext4447131,402582,8981,17817,3515.45.3AS24940 Hetzner Online GmbH
AWS CodeBuildubuntu-8.0-large300 GiBoverlay2591221722,154N/AN/AN/AN/AAS14618 Amazon.com, Inc.
RunsOnm8azn.large38 GiBext431112413124,2662,95762,7350.90.9AS14618 Amazon.com, Inc.
RunsOnm9g.large38 GiBext431912413121,2342,50228,0601.30.8AS14618 Amazon.com, Inc.

RunsOn larger instance types

Default 2-vCPU runners are usually limited by EBS throughput or the small share of local NVMe bandwidth attached to the instance. With RunsOn you can select a larger EC2 instance when a workflow needs real disk throughput, more local storage, or both.

Provider
Type
Size
Configuration
Seq Writes (MiB/s)
Rand Writes (MiB/s)
Seq Reads (MiB/s)
Rand Reads (MiB/s)
CPU Single
Postgres RW (TPS)
Postgres RO (TPS)
Ping GitHub (ms)
Ping 8.8.8.8 (ms)
Infrastructure
RunsOni7i.16xlarge14 TiBoverlay5,5237424,6112052,91718,233135,4041.61.1AS14618 Amazon.com, Inc.
RunsOni7i.8xlarge6.8 TiBoverlay5,4277014,5572042,81717,002128,0931.51.1AS14618 Amazon.com, Inc.
RunsOni7i.4xlarge3.4 TiBoverlay3,3226432,6841893,04312,782103,1401.82AS14618 Amazon.com, Inc.
RunsOni7i.2xlarge1.7 TiBoverlay1,6515962,1151852,6438,65070,2262.51.6AS14618 Amazon.com, Inc.
RunsOni7i.xlarge858 GiBoverlay8173351,0662103,2347,10159,8521.41.5AS14618 Amazon.com, Inc.

Analysis#

How to read the disk numbers#

While CPU speed is the most important factor for most workflows, disk performance can be the limiting factor in specific scenarios that require a high number of IOPS. That’s why it is important to be able to pick runner types that match your needs.

The table compares the disk performance of various providers. Sequential read and write performance is compared, as well as random read and write performance. Sequential performance is more important when dealing with large files, while random performance is more important for small, many files. Benchmark is run as per this Google Cloud article and measures the performance on the disk where the GITHUB_WORKSPACE resides.

Comparable 2-vCPU runners#

  • Blacksmith has the best random write result in the comparable table at 584MiB/s, followed by Namespace at 409MiB/s and Avrea at 307MiB/s.
  • Avrea has the strongest sequential read/write profile among the comparable runners: 4361MiB/s writes and 12800MiB/s reads.
  • StarSling is also solid on sequential throughput at 1713MiB/s writes and 1976MiB/s reads, but its random writes are lower at 127MiB/s.
  • GitHub-hosted ubuntu-24.04, AWS CodeBuild, Ubicloud premium, and the RunsOn EBS-only m8azn.large / m9g.large rows are all in the same low-random-write band, roughly 12-15MiB/s.

EBS and small local NVMe#

  • Network-attached EBS is fine for many CI jobs, but it shows its limits on random writes. The EBS-only RunsOn rows and AWS CodeBuild land around 11.8MiB/s, while GitHub is at 15MiB/s.
  • Small local NVMe is better, but not magic. RunsOn c7gd.large and m8id.large reach about 68MiB/s random writes, while m9gd.large reaches 88MiB/s.
  • The i7i.large, i7ie.large, and i8g.large rows are the more interesting 2-vCPU RunsOn options: they provide much larger local disks and reach 169-177MiB/s random writes.

For most CI workflows this still may not dominate total job time. If the job mostly pulls cache files, archives, Docker layers, or dependencies from the network and then spends time on CPU, sequential throughput and network latency often matter more than random writes. But databases, large monorepos with many small files, package-manager metadata, and test suites that churn the workspace can hit this hard.

Scaling up RunsOn#

  • The larger RunsOn table shows why instance choice matters. If you want to top the random-write chart, you can do it by selecting a larger local-NVMe instance, starting with i7i.2xlarge at 596MiB/s random writes and 1.7TiB of local NVMe.
  • Sequential writes scale much further: i7i.8xlarge reaches 5427MiB/s and i7i.16xlarge reaches 5523MiB/s.
  • Random writes also improve, but flatten earlier in this run: 596MiB/s on i7i.2xlarge, 643MiB/s on i7i.4xlarge, 701MiB/s on i7i.8xlarge, and 742MiB/s on i7i.16xlarge.

RunsOn allows you to select instances with local SSDs, and automatically mounts them for the workspace. That is the practical takeaway: default runners are enough for many workflows, but when disk is the bottleneck you can choose a runner shape with the storage and bandwidth you actually need.