diff --git a/public/_redirects b/public/_redirects index e5c24edd..0bc7e7fc 100644 --- a/public/_redirects +++ b/public/_redirects @@ -39,8 +39,10 @@ /blog/debugging-docker-on-windows-mac-and-linux/ https://docs.ddev.com/en/stable/users/usage/troubleshooting/ 301 /blog/drupal7-drupal9-migration-ddev-acquia-migrate-accelerate https://www.drupal.org/docs/upgrading-drupal 301 /blog/drupal7-drupal9-migration-ddev-acquia-migrate-accelerate/ https://www.drupal.org/docs/upgrading-drupal 301 -/blog/ddev-docker-desktop-and-colima-benchmarking-updated-dec-2022 /blog/docker-performance-2023/ 301 -/blog/ddev-docker-desktop-and-colima-benchmarking-updated-dec-2022/ /blog/docker-performance-2023/ 301 +/blog/ddev-docker-desktop-and-colima-benchmarking-updated-dec-2022 /blog/docker-performance/ 301 +/blog/ddev-docker-desktop-and-colima-benchmarking-updated-dec-2022/ /blog/docker-performance/ 301 +/blog/docker-performance-2023 /blog/docker-performance/ 301 +/blog/docker-performance-2023/ /blog/docker-performance/ 301 # Authors redirects /meet-the-team /blog/author/ 301 diff --git a/public/img/blog/2026/09/perf-dashboard-drupal-install.png b/public/img/blog/2026/09/perf-dashboard-drupal-install.png new file mode 100644 index 00000000..ef99733e Binary files /dev/null and b/public/img/blog/2026/09/perf-dashboard-drupal-install.png differ diff --git a/src/content/blog/docker-performance-2023.md b/src/content/blog/docker-performance-2023.md deleted file mode 100644 index 3f3c523a..00000000 --- a/src/content/blog/docker-performance-2023.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "macOS Docker Provider Performance, November 2023" -pubDate: 2023-11-30 -#modifiedDate: 2023-11-30 -summary: "Comparisons of Docker provider performance on macOS using OrbStack, Docker Desktop, and Colima" -author: "Randy Fay" -featureImage: - src: /img/blog/2023/11/whale-race.jpg - alt: Cartoon race with three whales competing in a running race - credit: "Image generated by OpenAI's DALL-E: A whimsical, wide-format scene depicting three whales, each uniquely designed and humorously wearing athletic gear, competing in a running race." -categories: - - DevOps - - Performance ---- - -## Background - -Docker providers for macOS have been getting better and faster (mostly) over time, and [DDEV has recently added OrbStack and Rancher Desktop to its officially supported providers](docker-providers.md). It's time to take a look and see what is happening with DDEV and Docker provider performance. - -This test used an update of the same technique used in December 2022. - -## Test Methodology - -The test does a Drupal 10 web install (details below), because it's a heavy PHP-access process that exercises both the database and filesystem extensively. - -## Results: OrbStack Wins! - -We'll start with Mutagen enabled (`ddev config --performance-mode=mutagen`), which is the default for macOS. You'll see that OrbStack has the fastest setup, but that all five of the configurations are in a similar range. You would probably be happy with any of them. - -![macOS Docker provider performance with Mutagen - OrbStack faster but all configurations probably fine](/img/blog/2023/11/d10_web_install_mutagen.svg) - -Now, with Mutagen disabled (`ddev config --performance-mode=none`), OrbStack is by far the fastest, with Docker Desktop coming next and Rancher Desktop and Colima (both configurations) looking pretty sluggish. It's possible that OrbStack could be used without Mutagen, but I don't have any experience with that. Colima with SSHFS definitely cannot be used without Mutagen due to consistency problems with SSHFS. - -![macOS Docker provider performance without Mutagen - OrbStack way faster, Colima way too slow](/img/blog/2023/11/d10_web_install_no_mutagen.svg) - -**I should note that I'm super happy with DDEV and all of these Docker Providers and the crazy-wonderful [Mutagen](https://mutagen.io) project that have brought such great improvements in performance.** Circa 2018, a Drupal web installation without NFS or Mutagen could take 7 minutes. Now it's 30 seconds or less. That's amazing. - -## Details - -I used the [ddev-puppeteer](https://github.com/ddev/ddev-puppeteer) project to run the tests. Want to try it against your system or configuration? I'd love to hear your results. - -See the [spreadsheet with the raw data](https://docs.google.com/spreadsheets/d/14d79oUItssfB1_spUjjGOPkhumARXyhF0DNBK1kp2KA/edit?usp=sharing) - -- DDEV v1.22.5 -- Drupal 10.1.6 with Drush (`ddev config --project-type=drupal10 --docroot=web --create-docroot && ddev composer create drupal/recommended-project -y && ddev composer require drush/drush && ddev start`) -- PHP 8.1 -- MacBook Air (M1, 2020), 16GB RAM, plugged in -- Docker Desktop 4.25.2 -- Colima v0.6.6, Lima v0.18.0, QEMU 8.1.3 (`colima start qemutest --cpu 4 --memory 6 --disk 100 --dns=1.1.1.1 --vm-type=qemu --mount-type=sshfs` and `colima start vztest --cpu=4 --memory=6 --disk=100 --mount-type=virtiofs`) -- Rancher Desktop 1.11.0 -- OrbStack 1.1.0 - -## Summary - -You'll probably like any of these Docker providers with DDEV (using Mutagen) based on your choice of performance, maintenance characteristics, and open-source vs. commercial products. My own experience at this point is that OrbStack is providing an outstanding product at a modest price, and is also providing great support and reliable updates. The [DDEV Providers Announcement](/blog/docker-providers) explains how you can test out any of these without breaking anything on your system. diff --git a/src/content/blog/docker-performance.md b/src/content/blog/docker-performance.md new file mode 100644 index 00000000..51310267 --- /dev/null +++ b/src/content/blog/docker-performance.md @@ -0,0 +1,126 @@ +--- +title: "Docker Provider Performance, 2026: Now Measured Every Night" +pubDate: 2026-10-06 +summary: DDEV now runs a nightly benchmark across every supported platform and Docker provider, and publishes the history. Here's what the numbers say about macOS Docker providers three years after the 2023 hand-run comparison. +author: Randy Fay +featureImage: + src: /img/blog/2023/11/whale-race.jpg + alt: Cartoon race with three whales competing in a running race + credit: "Image generated by OpenAI's DALL-E: A whimsical, wide-format scene depicting three whales, each uniquely designed and humorously wearing athletic gear, competing in a running race." +categories: + - DevOps + - Performance +--- + +## TL;DR + +macOS Docker provider performance has improved significantly over the years, and now all the providers seem to be performing about equivalently. So OrbStack, Docker Desktop, Lima, Colima, and Rancher Desktop are fast and working well. + +## Introduction + +Back in November 2023 we published a hand-run comparison of macOS Docker providers. It was a snapshot: one laptop, one afternoon, one set of versions, and a Google Sheet. It answered the question people were asking, and then it started going stale the moment it was published. + +That post is gone now, and this one replaces it, because the way we answer the question has changed. DDEV now runs the same benchmark battery **every night**, unattended, on every platform and Docker provider we support, and publishes the accumulated history. + +## Table of Contents + +## Where to see the numbers + +The nightly results live at the [DDEV performance history dashboard](https://ddev.github.io/ddev/perf/). + +The easiest way to find it (and everything else the DDEV GitHub organization publishes) is to start at [github.com/ddev/ddev.github.io](https://github.com/ddev/ddev.github.io) and follow the "Performance History" link. That repo's README is the index of DDEV's GitHub Pages sites — bookmark it and you don't have to remember any of the other URLs. + +![DDEV performance history dashboard showing drupal_install_s trend lines for macOS Docker providers over roughly six weeks](/img/blog/2026/09/perf-dashboard-drupal-install.png) + +The dashboard has two views. **Trend over time** plots one line per leg so you can see regressions and improvements as they land. **Compare environments (latest)** gives you a sorted bar chart of each environment's recent median, which is the view that most directly replaces the 2023 post's charts. + +## Which metric to compare + +The harness collects six metrics per run. The one that lines up with the 2023 post is **`drupal_install_s`**: Puppeteer drives the Drupal web install wizard end-to-end, in a real browser, through the DDEV router, the web server, and PHP-FPM. + +I think it's important that it uses a web-intensive install process for studying web server performance. The interactive installer deliberately breaks each batch step into its own HTTP request and page reload, so every one of those round trips exercises exactly the layer where Docker provider differences show up — bind mount vs. Mutagen, gRPC-FUSE vs. virtiofs, and so on. It's the closest thing in the suite to "what does it feel like to actually use this." + +The companion metric `drush_install_s` runs the same install non-interactively via `ddev drush si`, which never touches the router or web server at all. If the two track together, filesystem I/O dominates; if they diverge, the gap isolates router/web server overhead. The [perf/README.md](https://github.com/ddev/ddev/tree/main/perf) describes all six metrics and why each one is there. + +## macOS results + +Medians of the nightly runs from 2026-08-31 through 2026-09-30, `drupal_install_s` in seconds, fastest first. All legs are Apple Silicon (ARM64), all with Mutagen enabled except where noted. + +| Docker provider | `drupal_install_s` | `drush_install_s` | `ddev_start_cold_s` | +| -------------------- | ------------------ | ----------------- | ------------------- | +| Rancher Desktop | 12.0 | 9.8 | 16.5 | +| Lima | 12.1 | 9.9 | 15.8 | +| Podman (rootless) | 12.3 | 9.9 | 46.0 | +| Colima (vz) | 12.6 | 10.0 | 14.4 | +| OrbStack | 13.4 | 10.4 | 12.2 | +| Docker Desktop | 16.7 | 13.4 | 21.0 | +| OrbStack, no Mutagen | 16.8 | 11.2 | 9.2 | + +The headline is how boring this table is. Five of the six Mutagen-enabled macOS providers land within 1.4 seconds of each other on the flagship metric, and their `drush_install_s` numbers are within 0.6 seconds. **On macOS with Mutagen, your choice of Docker provider is mostly not a performance decision anymore.** Pick based on licensing, maintenance, and how the tool fits your workflow. + +That is a significant change from 2023, when OrbStack was clearly ahead and Colima and Rancher Desktop looked sluggish. Those gaps have largely closed (all are now using VZ/VirtioFS). + +### Compared with the 2023 numbers + +The 2023 test did a Drupal 10 web install with Mutagen and got OrbStack 20s, Docker Desktop 22s, Rancher Desktop 22s, Colima QEMU 33s, and Colima VZ 35s. The fastest then (OrbStack, 20s) compares with 12.0s for the fastest now (Rancher Desktop), and with 13.4s for OrbStack. The slowest providers gained the most: Rancher Desktop went from 22s to 12.0s and Colima VZ from 35s to 12.6s. The spread between providers went from 15 seconds to about 1.4 (excluding Docker Desktop). + +Treat these as a rough comparison, not a like-for-like benchmark. The 2023 numbers came from one MacBook Air M1 (2020) on a single afternoon, with DDEV v1.22.5, Drupal 10.1.6, and PHP 8.1. The nightly runs use CI runner machines, and newer DDEV, Drupal, and PHP versions. Both tests drive the `demo_umami` install through Puppeteer. Each Docker provider has also shipped many releases since 2023, and the Colima leg now uses VZ where one of the 2023 legs used QEMU with sshfs. Some of the improvement comes from the hardware, and some from the software. + +When DDEV was young, a web install with Docker Desktop took SEVEN MINUTES. You'd just watch it poke along at each section. Now you don't even see those as they flash by. Now it takes 12-17 seconds. That's progress! + +### Mutagen is still doing the work + +The most interesting row is the last one. OrbStack with Mutagen finishes the browser install in 13.4s; the same provider without Mutagen takes 16.8s — about 25% slower. Note that the no-Mutagen leg is _faster_ on `ddev_start_cold_s` (9.2s vs. 12.2s), because there's no sync session to establish, and closer on `drush_install_s` (11.2s vs. 10.4s), because Drush never goes through the web server. The penalty concentrates in exactly the browser-driven path, which is what you use all day. + +Mutagen is on by default on macOS for this reason, and these numbers say to leave it on. + +However, plenty of people are perfectly happy with turning off Mutagen. Some folks don't like the additional complexity and don't want the speed trade-off. `ddev config global --performance-mode=none` turns it off. (Mutagen has more benefits than just performance though; with Mutagen, the web server in the container is dealing with a Linux filesystem, more like the real deployment environment, instead of a Docker bind-mount, which is more like a network filesystem.) + +:::warning[Read the hardware caveat before comparing rows] +The Docker Desktop leg runs on **older M1 test runner machines** that have dedicated hardware. OrbStack, Rancher Desktop, Colima, Lima, and Podman share a pool of **newer** machines. Some of the Docker Desktop gap in the table above is that hardware difference, not the provider. We didn't normalize it — the dashboard deliberately doesn't either — so treat Docker Desktop's row as "somewhat pessimistic" rather than as a clean like-for-like comparison. +::: + +## The other platforms, and why you shouldn't rank them against macOS + +The dashboard also carries Linux, WSL2, and traditional Windows legs. They're useful for spotting regressions _within_ a leg over time, but the cross-platform bar chart is misleading if you read it as a platform ranking: + +- The **Linux** leg runs on ephemeral GitHub-hosted runner VMs. It provisions the Drupal codebase from scratch every night and starts with cold image, Composer, and OS page caches. Every macOS and Windows leg reuses a persistent codebase and warm caches. +- The **Windows and WSL2** legs run on entirely different physical hardware from the macOS test runners. + +Trends within a leg: meaningful. Bar-chart comparisons across legs: only meaningful when the machines are comparable, which across platforms they aren't. + +## Getting the raw data + +Every chart on the dashboard has a **Download CSV** button that exports exactly the rows behind whatever is currently displayed — after your leg and metric selections, not the whole dataset. That's the quickest path to your own analysis. + +If you want everything, the underlying dataset is one JSON object per line at [`history.ndjson`](https://ddev.github.io/ddev/perf/history.ndjson), with one line per (commit, leg) benchmark run: + +```bash +curl -sL https://ddev.github.io/ddev/perf/history.ndjson | + jq -r 'select(.os=="darwin") | [.timestamp, .docker_provider, .metrics.drupal_install_s] | @tsv' +``` + +## Running it on your own machine + +The harness that replaced the old [ddev-puppeteer](https://github.com/ddev/ddev-puppeteer) script lives in the DDEV repository and runs locally against a standard DDEV Drupal project: + +```bash +./perf/run-benchmark.sh \ + --project-dir ~/workspace/d11 \ + --site-url https://d11.ddev.site/ \ + > result.json +``` + +It needs `jq` and Node.js on your `PATH` in addition to the usual DDEV prerequisites. If your numbers look very different from the nightly legs, we'd like to hear about it. + +## Summary + +Three years ago the answer to "which Docker provider is fastest on macOS?" was worth a blog post with charts. Today the simple answer is that, with Mutagen on, they're close enough that the question is mostly settled, and any lingering differences are small next to the hardware you're running on. + +What's better than a fresh answer is a standing one. The nightly harness means the next time performance shifts — a provider regression, a Mutagen improvement, a DDEV build-layer mistake — it shows up on the [dashboard](https://ddev.github.io/ddev/perf/) within a day, instead of waiting for somebody to run the numbers by hand and write another post. + +Have questions, or numbers that look different from the dashboard? Join the conversation in our [Discord](/s/discord), [open an issue](https://github.com/ddev/ddev/issues), or reach out via [email](mailto:support%40ddev.com). + +Follow our [blog](https://ddev.com/blog/), [Bluesky](https://bsky.app/profile/ddev.bsky.social), [LinkedIn](https://www.linkedin.com/company/ddev-foundation), [Mastodon](https://fosstodon.org/@ddev), and join us on [Discord](/s/discord). Sign up for the [monthly newsletter](/newsletter). + +_This article was edited and refined with assistance from Claude Code._ diff --git a/src/content/blog/markdown-features-demo.md b/src/content/blog/markdown-features-demo.md index 77554130..4a3f7164 100644 --- a/src/content/blog/markdown-features-demo.md +++ b/src/content/blog/markdown-features-demo.md @@ -214,7 +214,7 @@ nodejs_version: "20" ### Links Between Blog Posts -Internal blog links use filename references: [Learn about DDEV performance](docker-performance-2023.md) +Internal blog links use filename references: [Learn about DDEV performance](docker-performance.md) ### Links to Other Site Pages diff --git a/src/content/blog/whats-so-different-about-ddev-local.md b/src/content/blog/whats-so-different-about-ddev-local.md index 2a07ef0c..62d59500 100644 --- a/src/content/blog/whats-so-different-about-ddev-local.md +++ b/src/content/blog/whats-so-different-about-ddev-local.md @@ -20,7 +20,7 @@ These days users from designers to developers to testers and open source contrib - **Full cross-platform support on Windows, WSL2, Linux, and macOS (Apple Silicon and Intel)**: We support and test and have a full automated test suite for DDEV on [macOS, Windows 10 Home, Pro, WSL2, and Linux.](https://docs.ddev.com/en/stable/#system-requirements) Windows is a first-class citizen, both on the traditional Windows side and the [WSL2 feature](https://docs.ddev.com/en/stable/users/install/ddev-installation/#step-1-install-wsl2). DDEV’s binaries are signed and notarized on macOS and Windows, so you never have to sneak around scary operating system warnings. - **Interoperability with many Docker providers**: While a number of tools require you to use one exact version of Docker (and may take the liberty of installing it themselves), DDEV currently works fine with versions that are a couple of years old, and keeps up with the bleeding edge as well. In addition, alternate Docker providers like OrbStack, Colima, Rancher Desktop, and Podman (in addition to Docker installed inside WSL2) provide options for those who do not choose to use Docker Desktop. -- **Performance**: We think DDEV on macOS and traditional Windows has about the [best performance](docker-performance-2023.md) you can get on any local development, both in terms of starting DDEV (around 10-20 seconds) and in terms of webserving. With no setup required at all, the [Mutagen feature](https://docs.ddev.com/en/stable/users/install/performance/#mutagen) speeds up webserving by at least 10x, and it’s enabled by default on macOS and traditional Windows. And of course on Linux including WSL2 it’s truly superb. +- **Performance**: We think DDEV on macOS and traditional Windows has about the [best performance](docker-performance.md) you can get on any local development, both in terms of starting DDEV (around 10-20 seconds) and in terms of webserving. With no setup required at all, the [Mutagen feature](https://docs.ddev.com/en/stable/users/install/performance/#mutagen) speeds up webserving by at least 10x, and it’s enabled by default on macOS and traditional Windows. And of course on Linux including WSL2 it’s truly superb. - **Settings file management**: DDEV is happy to get you started quickly and easily and even manage your settings files. You can use your own repository or follow one of the [quickstart guides](https://docs.ddev.com/en/stable/users/quickstart/) to create something new and you’ll have a project going in no time. You can also [turn off settings file management](controlling-cms-settings-files-in-ddev-local.md) to fine tune your team’s approach when you need more customization. - **Database support**: DDEV supports many versions of MariaDB, MySQL and PostgreSQL. You don't have to do anything but say what type and version you want. - **Trusted HTTPS**: DDEV uses [mkcert](https://github.com/FiloSottile/mkcert) to allow you to conduct all your work using [locally trusted HTTPS](ddev-local-trusted-https-certificates.md), like it will work in the real world. You don’t have to click around scary browser warnings to view your project in development.