Orka Write IO Performance Improvements
While CI/CD may have been a term thrown around without much thought in the past, it is absolutely essential for every software organization today.
CI/CD best practices enable you and your team to experiment, and perhaps most importantly, quickly detect and fix problems with your builds. It’s imperative to detect these issues quickly because the sooner a problem is found, the cheaper it is to fix.
And at the forefront of any CI/CD pipeline is the most important characteristic: performance. The faster a pipeline executes, the sooner potential issues are found.
Performance is Orka’s main focus
In the upcoming Orka release, we’ve improved write IO operations within a range of 40% - 500% depending on the use case (and as each use case is unique, to talk to a sales engineer about your builds on Orka).
Before we cover the different tests we ran to gauge the performance, let’s talk about what we did to achieve this improvement.
To achieve better write IO performance, we began using paravirtualized IO drivers. Paravirtualized (PV) drivers are optimized to be used within a VM. In fact, they "know" they're running inside a VM and can make better decisions compared to standard drivers.
Using paravirtualized drivers comes at a cost. Those PV drivers need to be supported by the underlying OS, and macOS added support for PV drivers in a later Mojave version: 10.14.4. Running macOS 10.14.4 or later allows you to take advantage of those drivers, but running macOS 10.14.3 won’t work.
For benchmarking, we used synthetic tests. These tests simulate a particular type of workload on a component, in our case, on IO.
To compare Orka's performance with and without paravirtualized drivers, we use a tool called fio. fio allows running various IO benchmarking tests. We’ll focus on one of them:
fio --name=randwrite --readwrite=randwrite --size=10G --direct=1 --iodepth=32 --end_fsync=1
What does each argument mean?
- readwrite - This is the IO operation to be used. In our case, we’re doing random writes.
- size - The dataset size. We’re writing to a 10GB file.
- direct - Use non-buffered IO. It allows bypassing the host cache ensuring we are testing the actual IO.
- iodepth - Number of queued IO requests.
- end_fsync - Flush the dirty data to the disk before completing the run.
We’re looking at the number of IO operations per second (IOPS). The higher the number, the better the performance.
Running that command on a VM with standard drivers results in IOPS=5270. Running the same command on a VM with paravirtualized drivers results in IOPS=13500. The difference? 156% performance increase.
The physical host used for the test run is a 3.5GHz 6-core 2013 Mac Pro.
What does this mean for CI/CD pipeline performance?
One question you’re no doubt asking is: Do builds get faster? It depends.
IO write operations are significantly faster. If a build has a lot of those, performance improvements are expected. However, if a build rarely does write operations, not much will change. According to our tests build improvement varies from 0% to 7% depending on the build.
How can you use the paravirtualized drivers in Orka?
The upcoming Orka version uses the standard drivers by default. Why? We want everyone to be able to get familiar with the new functionality before enabling it by default.
In addition to that, all existing VM configs continue to use the standard drivers. To use the paravirtualized drivers, you need to create a new VM config running macOS 10.14.4 or higher with the io-boost flag:
orka vm create-config -v <name> -b <base_image> -c <cpu_count> -C <vcpu_count> --io-boost true -y</vcpu_count></cpu_count></base_image></name>
If you want to create a new VM config running macOS 10.14.3 or older, then you need to set io-boost to false:
orka vm create-config -v <name> -b <base_image> -c <cpu_count> -C <vcpu_count> --io-boost false -y</vcpu_count></cpu_count></base_image></name>
With the upcoming Orka release, we’re introducing performance improvements for builds that use IO write operations heavily. These improvements are available for newer macOS versions - 10.14.4 or higher, and depending on your use case, can help greatly with performance.
Get notified when this release is publicly available by signing up to our Orka Product Updates email list. Haven’t tried Orka yet? Get access to the free demo environment for two hours and try Orka today.