Show HN: WarpBuild – x86-64 and arm GitHub Action runners for 30% faster builds (warpbuild.com)
WarpBuild provides fast, secure `x86-64` and `arm64` Github actions runners. This speeds up your workloads by 30%, at half the cost, and takes ~2mins to get started.
We’ve been seeing pretty good results since we opened up signups a week ago and I’ve shared some numbers publicly here [1].
Currently, we support linux runners for Github organizations (not personal accounts) and MacOS support is coming soon (~Jan).
The way the runners work is deceptively simple: Runners are assigned to hardware that is ideal for build workloads with fast NVMe disks and high single-core performance.
The runners are allocated on VMs, not containers. This provides faster performance and enables use cases requiring (1) nested virtualization for running firecracker and other hypervisors, (2) k8s without relying on kind, and (3) Android emulators on `arm64` instances in test workflows.
We also have released a Github Action called `Action-Debugger` that allows you to SSH into a running workflow for simplifying pesky debugging[2].
The same set of packages that you’d get on Github hosted runners are pre-configured (on x86-64 runners) so everything works out of the box with no modifications needed.
A very minor detail that I’m rather proud of, and I’d love your thoughts on improving it further, is the onboarding flow for the ease of moving workflows to WarpBuild. We’ve also put in a lot of effort into making the workflow start up time where we are as fast or faster than Github.
[1] https://x.com/suryaoruganti/status/1732932591001735419 [2] https://github.com/WarpBuilds/action-debugger, h/t to tmate
Making builds faster by providing optimal hardware and configurations across CI providers is the first step in our mission to make build engineering better.
I’d love your feedback on the product and thoughts on other CI pain points we could solve to enable better collaboration and developer experience.
87 comments
[ 3.1 ms ] story [ 144 ms ] threadCall me old school, but I'm with you. A vendor would have to be exceptionally well regarded over a long time to get my trust in such a scenario.
Who are you to judge "real projects" BTW? It might not suit your security profile, but it might for other businesses that have different security concerns.
How do you differentiate from BuildJet, which takes a similar approach?
Our mission is broader than just fast runners - it's about better CI dev ex. This includes surfacing recommendations that would optimize build times, insights into the critical paths of workflows and more.
We're also investing in tooling to overcome issues that currently exist, such as an action to ssh into running workflows for easy debugging.
I reported this issue to BuildJet over a week ago and haven’t received any response.
https://buildjet.com/for-github-actions/docs/guides/migratin...
I spent a solid couple hours trying to fix this before moving to WarpBuild.
In the tests with my GitHub Action [1] that spawns ephemeral runners for any workflow, I found BuildJet bandwidth speed 10 to 20 times slower than machines at AWS.
[1]: https://github.com/runs-on/action
Edit: Never mind. Misunderstood what this is.
Try it out if you can, you will like the results :-)
1) I was being conservative on my promises. For instance, we have users who reported GHA runtimes going down from ~25m to ~9m [1] 2) Local builds have the amazing advantage of being able to cache subsequent runs. CI workflows are ephemeral. This introduces a performance penalty. However, we are working on something that automagically caches some builds, especially container builds, that would enable huge benefits of 2x-10x further.
Hope this clarifies!
[1] https://x.com/suryaoruganti/status/1730419264132370556
What? I haven't benchmarked it lately, but containers should (almost?) always have less overhead and better performance than VMs
(I do agree that VMs are far more flexible and let you do privileged things; it's only perf that I question)
VMs on warpbuild: baremetal > hypervisor for VM > runner workload Container: baremetal > (cloud VM [1]) > k8s worker node OS > containerd > container OS > runner workload
This assumes containers are running on k8s, which is an okay assumption in this case. The perf penalty of using a VM is much lower.
Note: if you are referring to the VM spin up time, then it is a whole other story and we have taken some pains to mitigate that to achieve comparable spinup time.
[1] if using a non-bare metal ec2/gce instance, say
And also while containerd and potentially some Linux distro in a container are involved, they aren't really adding runtime overhead. containerd (via runc) instructs the Linux kernel to isolate the workload processes, but doesn't really sit in between them and the kernel. Further, the OS in the container doesn't have its own kernel and most of the time not even its own init. It's really just a set of libraries and binaries.
I believe that you run workloads faster than competitors relying on containers, but it doesn't seem to me that containers are the problem. If you installed Linux on the same baremetal host, I'm convinced you can get that same performance in a container that you can get in a VM on that host.
Benchmarks are hard to come by but iirc, each VMM adds a 3-5% overhead. The gatekeeping for permissions and sandboxing that is done at each level involves active compute cycles and that adds a little overhead.
Something of the order of 10% may not be large but there's a difference.[1]
Disk IO is another major factor btw, since virtual filesystems can be ... flaky.
[1] https://www.vmware.com/pdf/hypervisor_performance.pdf
What makes you stand out from the pack? The VM approach seems very cool - is this unique in the space? Do you have different approaches that provide speedups or security benefits not possible with other third party runner systems? Any benchmarks against competitors?
Separately, I'm curious about how you address VM startup speed. Do you boot VMs on demand, or do you have a pool of booted VMs awaiting jobs?
Anyways, it's exciting to see new approaches in the space! Wishing you and the team the best of luck!
I haven't run benchmarks but this comment provides a glimpse - https://news.ycombinator.com/item?id=38571518
VM startup speed has many levels to it. Right now, we are doing the inefficient job of having a pool though we have some items in the roadmap to fix this better.
In terms of speed up, we are doing things differently. For instance, we are baking in container layer caching natively so that users can benefit. This leads to speed ups of 2-10x depending on how the dockerfile is structured for caching.
This is just the first step - we have a very exciting roadmap :-)
How do you ensure that the VMs are clean on every run? Do you boot up a fresh clean install?
How do you make sure your host machines are clean too? What’s the cadence for resetting those host machines up?
We also use VMs. But they are persistent. So you always see your runners as Online in GitHub UI.
We achieve this by investing in virtualization technology so that idle runner VMs do not consume too many resources. Disclaimer: I used to work for Google Cloud.
Zig + Rust allows cross-compilation for Rust: https://actually.fyi/posts/zig-makes-rust-cross-compilation-...
For example, at work, we cross-compile C/C++/Fortran/Rust code in R packages. We compile for supported versions of R, so that ends up being tens of thousands of packages that we need to compile.
By cross-compiling we saved a lot of work and nearly eliminated our need for macOS.
I get that performance is important, and if MS puts their weight behind it I can see them fixing their stuff and basically removing the market for 3rd party solutions.
Or is this maybe a “hey MS buy us?” thing?
Also, this is the first step in our broader objective to: (a) support all CI providers (b) provide ecosystem support and tooling for efficient build engineering. The latter is in the form of additional tools, recommendations to be incorporated into workflow design, build insights etc. We are just getting started.
- Github actions are faster for us (~30% faster)
- Some of our tests failed while waiting for a dockerized server to be up
- It takes several minutes before all jobs are running (I have a pipeline with 6 parallel jobs, a few started with 2 minutes delay).
We are currently seeing fairly heavy load. The hn hug of death is real. Tweaked some settings and the startup delays should be back to the sub-10 second range in a few minutes.
Try out the jobs once again - you should be okay (I think :) )
We are a small company but our autoscaling cluster for GitHub actions on aws will scale up to >500vcpus during the work day when there are a lot of prs going in.
I don't see it documented anywhere, what are your concurrency limits on accounts?
In general, we should be able to deal with spiky workloads of that scale without issue in a couple of minutes.
I'd love for you to try us out.
May be easier to think of it as an $8 credit. It shows up as such in the dashboard.
> Runners are assigned to hardware that is ideal for build workloads with [...] high single-core performance
In my kind of projects (C++, Rust, C) the builds are highly parallelizable, so single core performance is generally not what you want, if you can instead get a lot of cores.
The main bottleneck to my own build pipelines on github was how painful it is to use containers, and how "helpful to idiots but not experts" a lot of the github actions docs are (microsofts style, I guess?).
Good luck though!
Could you elaborate on the pain points with using containers?
I was trying to cross-compile a side project (https://github.com/marcus-crane/october) for Linux arm64 but trying to do so would throw up some instruction set errors.
I had parted the idea of supporting Linux arm since Github has no runners but I threw in BuildJet and it spat out a working build with no problems!
Given it only needs to run on release, for a small open source project, being charged something like 1 cent per build is surprisingly reasonable compared to having no runner at all / having to spin up a self-hosted runner :)
I'm not officially affiliated with them at all. But I'm a big fan of their product.
It appears that one difference though is that Depot is more focused on just docker builds and y'all are more generalized runners Is that right?
So you'll get that goodness when running CI with zero changes to your actions needed.
The docs are wip - it'll be updated in the next couple of days.
Can I expect complex caching actions like https://github.com/DeterminateSystems/magic-nix-cache to work as quickly as they do on GitHub?
This works extremely well. It just spins up spot (or normal) instances as needed.
Automated container layer caching is coming in ~2 weeks.
This will be present transparently so you'll be able to get the goodness with zero changes to your current actions.