macOS Performance

Our AnandTech Storage Bench trace-based tests are Windows-only, and running them on a Mac in a Boot Camp configuration wouldn't give us much insight beyond running the same ATSB tests on our usual desktop testbed. However, our suite of synthetic benchmarks uses the cross-platform FIO tool, so these tests could be easily adapted to run under macOS.

Our usual configuration for these tests has the drive under test as a secondary drive, with nothing on the drive other than the data written by the test itself. This is the best way to measure a drive's raw performance capability without any interference and minimal overhead, but that's not usually a very realistic configuration. Without our ATSB tests to give a more real-world picture to counterbalance the idealized synthetic benchmark results, we chose to reconfigure the synthetic tests to use a somewhat more realistic configuration. Instead of running the OS off a separate drive, the drives under test were used as the only storage attached to the system. A clean install of MacOS 10.14 Mojave was used on each drive, and instead of having the tests access the drive as a raw block device, the tests were run against ordinary files residing on the same APFS filesystem as macOS and the testing software.

The amount of data read or written by each test is the same as for our usual Linux-based synthetic benchmark results. However, with the overhead of a copy-on-write filesystem and background traffic from the OS getting in the way, and with an entirely different host operating system, the numbers below are not at all comparable to our previous results on our standard desktop testbed.

These tests were run on two different MacBook Pro systems: a base model 13" Retina MacBook Pro from 2015 with a dual-core Broadwell processor, and a high-end 15" Retina MacBook Pro (Late 2013 model) with a quad-core Haswell processor. The only attempt to tune the machines for performance was changing two sysctls to allow more threads to be used to handle asynchronous IO—necessary for testing higher queue depths, but not needed for real-world low queue depth workloads.

Random Read Performance

Our first test of random read performance uses very short bursts of operations issued one at a time with no queuing. The drives are given enough idle time between bursts to yield an overall duty cycle of 20%, so thermal throttling is impossible. Each burst consists of a total of 32MB of 4kB random reads, from a 16GB test file. The total data read is 1GB.

Burst 4kB Random Read (Queue Depth 1)

Consistent with our usual Linux-based testing, the two drives with Silicon Motion SM2262EN controllers (OWC Aura Pro X2 and HP EX950) offer the best burst random read performance. The WD Black SN750 fares poorly, ending up slower than the more recent Apple OEM drive but outperforming the older PCIe 2.0 Apple OEM drive.

Our sustained random read test adds higher queue depths to the score: queue depths from 1 to 32 are tested, and the average performance across QD1, QD2 and QD4 is reported as the primary score. Each queue depth is tested for one minute or 32GB of data transferred, whichever is shorter. After each queue depth is tested, the drive is given up to one minute to cool off so that the higher queue depths are unlikely to be affected by accumulated heat build-up. The individual read operations are again 4kB, and are taken from a 64GB test file.

Sustained 4kB Random Read

On the longer random read test, the Aura Pro X2 remains one of the fastest SSDs, and the Samsung 970 PRO is essentially tied. The HP EX950's performance was inconsistent between the two laptops.

At sufficiently high queue depths, the HP EX950 and Samsung 970 PRO develop small performance leads over the Aura Pro X2. Additionally, the 13" MacBook Pro is severely bottlenecked by its weaker CPU that is unable to keep the SSDs busy under these conditions.

Random Write Performance

Our test of random write burst performance is structured similarly to the random read burst test, but each burst is only 4MB and the total test length is 128MB. The 4kB random write operations are distributed over a 16GB test file, and the operations are issued one at a time with no queuing.

Burst 4kB Random Write (Queue Depth 1)

The modern NVMe drives all provide similar performance on this burst random write test, while the older Apple OEM drives are at a clear disadvantage but aren't unusably slow. The 15" rMBP has significantly better performance than the 13" with the modern drives, but both machines offer roughly similar performance with the original Apple SSDs.

As with the sustained random read test, our sustained 4kB random write test runs for up to one minute or 32GB per queue depth, covering a 64GB test file and giving the drive up to 1 minute of idle time between queue depths to allow for write caches to be flushed and for the drive to cool down.

Sustained 4kB Random Write

The results for the longer random write test are pretty similar to the burst random write test above. The modern NVMe drives all perform about the same, and the higher CPU power of the 15" machine compared to the 13" makes a bigger difference for these fast drives than it did for the original Apple SSDs.

Random write doesn't improve with higher queue depths under these test conditions. Instead, it is either flat or declining as the OS has to juggle more threads to issue IO, and there may be some locking somewhere in the filesystem and storage stack that's preventing the kind of scalability we see on Linux.

Mixed Random Performance

Our test of mixed random reads and writes covers mixes varying from pure reads to pure writes at 10% increments. Each mix is tested for up to 1 minute or 32GB of data transferred. The test is conducted with a queue depth of 4, and is limited to a 64GB test file. In between each mix, the drive is given idle time of up to one minute so that the overall duty cycle is 50%.

Mixed 4kB Random Read/Write

The Aura Pro X2's performance on the mixed random I/O test is comparable to the other recent TLC drives but a bit slower than the Samsung 970 PRO. The modern NVMe drives are about twice as fast as the Apple originals on the 15" MacBook Pro, but on the more CPU-limited 13", they Aura Pro X2 is only about 50-60% faster.

The recent NVMe SSDs all generally show performance increasing as workload becomes more write-heavy, but the 13" MBP's CPU bottleneck cuts off that growth for most of the second half of the test. The Apple originals show relatively flat performance across most of the test, but the older 512GB drive has a bit of the uptick at the end that we typically expect.

Introduction macOS Sequential IO Performance


View All Comments

  • trumanhw - Monday, March 29, 2021 - link

    You guys REALLY should've tested this in:

    • L '13 + M '14 MacBook Pros
    • Mid-2015 MacBook Pro
    • M '13 + '14 MacBook Airs
    • Early-2015 MacBook Air
    • Late 2013 Cylinder Mac Pro ...

    THOSE are the PRIMARY test scenarios ... and the interactions between their respective SSD controllers, FSB & CPU are more indicative of the likely performance than testing the NAND & Cache, respectively.
  • DHS - Wednesday, January 19, 2022 - link

    I am trying to find a external enclosure to use the aura pro x2 1TB as an external drive. OWC pointed me to an updated enclosure that now works with Apple ssd and the aura but I m looking for an alternative that is not owc, any advice? Reply

Log in

Don't have an account? Sign up now