Ubicloud hosted Arm runners, 100x better price/performance

January 17, 2024 · 4 min read
Ozgun Erdogan
Founder / Co-CEO

Ubicloud is an open and portable cloud. Today, we’re excited to announce Ubicloud hosted Arm runners for GitHub Actions. These runners bring a 100x price/performance benefit over GitHub's default runners when you’re building & testing for Arm. We can bring this significant improvement thanks to the combination of two factors.

  • By working on bare metal instances, Ubicloud reduces your cloud costs. On GitHub Actions, that price benefit ends up being 10x between Ubicloud and GitHub's runners.
  • Today, when you want to build for Arm on GitHub Actions, you need to fall back to emulating your builds through QEMU using x64 VMs. Emulation degrades build performance by 10x as compared to natively building on arm64.

The rest of this blog post makes these numbers more concrete. We also share more about other product characteristics, such as ease of migration, security, and potential caveats.

Product Characteristics

With AWS’s push towards Graviton instances, and Azure and Google also providing Arm-based instances, arm64 platforms are becoming commonplace. As a result, we’ve heard from you that you’re looking to build and test natively on arm64.

Price: Today, if you’re building for arm64 on GitHub Actions, you emulate using QEMU on x64 architectures. So, the price matrix for building on Arm looks like the following.

There are two things to note in this table. First, Ubicloud managed runners are 10x more cost effective than GitHub ones. That’s because GitHub uses public cloud VMs that already come with a huge premium; and further adds its own margins. Comparatively, we provision Arm VMs run on Hetzner’s RX220 series and upgrade network connectivity on these instances.

Second, x64 and arm64 instances have hardware differences. Arm64 has slightly lower memory per vCPU because of RX220’s configuration. Further, we use vCPU to quantify processor resources, but this term means different things on x64 and arm64. You get two physical cores with arm64, but only one core with x64. This is due to the way processor terminology evolved on the cloud.


Performance:
To measure performance, we looked at various open source projects that use QEMU emulation for arm64 and benchmarked their performance. Here’s an example benchmark run from.

This benchmark run shows a performance improvement of 10.5x on the open source PostHog project. You can access and reproduce the benchmark results here. We’ve run this benchmark on various open source projects that use QEMU; and we’ve consistently seen a performance improvement of 10x or more.


Migrating to Arm:
It’s also easy to migrate to Ubicloud managed runners. After signing up for a Ubicloud account (https://console.ubicloud.com/create-account), it only takes a few lines. You need to change one line to switch to Ubicloud’s Arm runners and then delete lines related to QEMU emulation. Here’s the change associated with PostHog’s workflow file.


Security:
Ubicloud uses Linux KVM for virtualization and the Cloud Hypervisor as our virtual machine monitor (VMM). We contain each VMM within Linux namespaces for additional isolation. For virtual networking, we use IPsec tunneling to establish an encrypted and private network environment; and regularly rotate encryption keys.

For each new CI/CD job, we also provide you with a clean and ephemeral VM. Upon the job's completion, we decommission the VM and delete the block storage device associated with the VM.  This ensures that there is no way to persistently compromise the GitHub Actions environment or otherwise gain access to more information than was placed in this environment during the bootstrap process.

Additionally, we follow industry and GitHub Actions best practices for security. You can read more about them here.

Caveats: GitHub Actions doesn’t currently have an official Arm image available. As a result, Ubicloud builds its own Ubuntu image; and our Arm runners don’t have all pre-installed packages that are available for x64 runners. If your workflow has a package dependency that doesn’t exist on Ubicloud’s arm image, we recommend installing the dependency manually for the time being.

Conclusion

In summary, Ubicloud’s managed runners enable GitHub Actions users to build, test, and deploy on Arm instances. These native Arm runners come with a 100x price/performance benefit over GitHub’s default runners. This enables customers such as PeerDB, ParadeDB, Manifold.xyz to build across platforms in a fast and price-efficient way.

As Wilkins Chung, the CEO of Manifold says, “ARM based builds have always been a pain on GitHub. The need to use workaround images and the additional time it took to run these images kept hurting. Ubicloud's ARM runners solved these issues with a one-line change and we're way more productive because of it!”

If you’re using GitHub Actions, please check out our quick start guide! It takes 5 minutes to integrate with Ubicloud runners; and the price/performance benefits stay for good. To make your evaluation easier, we also provide each account with 1,250 free builds every month. As always, we welcome all input and we’d be happy to hear from you at  info@ubicloud.com.