Ansible Performance Tuning
Ansible performance advice is mostly repeated without measurement. This times one playbook against a baseline, with pipelining, with fact caching and with ten times the forks - alternating the runs so the answer cannot be first-run warm-up. Three settings move the number, one does nothing, and the obvious way to check whether pipelining is on reports the wrong answer.
Bonus: Beyond the Blueprint Guide 43 of 45 Intermediate
- OSUbuntu 26.04 LTS
- ansible-core2.20.1
- Python3.14.4
- TimeAbout 16 min
pipelining is off by default for one reason: it is incompatible with sudo configured requiretty, which was the RHEL default long ago and is not any more. On ansible-core 2.20.1 ansible-config dump does not report its effective value - see the fourth step, which is why that step exists.
| Server Name | IP Address | OS | Roles | CPU | RAM | HDD |
|---|---|---|---|---|---|---|
| ANS-CTL01 | 192.168.0.36 | Ubuntu 26.04 LTS | Ansible Control Node | 2 Core | 3 GB | 50 GB |
| ANS-A01 | 192.168.0.37 | Ubuntu 26.04 LTS | Managed Node (group: web) | 2 Core | 3 GB | 50 GB |
| ANS-B01 | 192.168.0.38 | Ubuntu 26.04 LTS | Managed Node (group: db) | 2 Core | 3 GB | 50 GB |
This guide includes
Use this before repeating performance advice nobody measured. This matters because one run is not a measurement - pipelining removes one specific thing, and a widely-recommended setting does nothing at all here.
- establishing that a single run is not a measurement
- finding what pipelining actually removes
- meeting the check that reports the wrong answer about it
- measuring what fact caching buys
- finding the setting that does nothing whatsoever on this setup
Before you start
- A control node configured as shown in the first step.
- The session rewrites
~/ansible.cfgseveral times and restores the original at the end.
-
The configuration this guide assumes
-
One run is not a measurement
-
What pipelining actually removes
-
The check that reports the wrong answer
-
Fact caching
-
The setting that does nothing here