Performance et optimisation 26 min de lecture

Pipelining, async et parallelisme

Pipelining SSH

Le pipelining reduit le nombre de connexions SSH en executant les modules directement via stdin au lieu de copier des fichiers temporaires.

# ansible.cfg
[ssh_connection]
pipelining = True

# Prerequis : desactiver requiretty dans sudoers
# /etc/sudoers : commenter "Defaults requiretty"

Forks (parallelisme)

Le parametre forks definit le nombre d'hotes traites en parallele :

# ansible.cfg
[defaults]
forks = 50    # Par defaut : 5

# Ou en ligne de commande
ansible-playbook -f 50 deploy.yml

Taches asynchrones

Les taches longues peuvent etre executees en arriere-plan avec async :

- name: Mise a jour systeme (asynchrone)
  ansible.builtin.apt:
    update_cache: true
    upgrade: dist
  async: 600        # Timeout max en secondes
  poll: 0           # Ne pas attendre (fire and forget)
  register: apt_update

- name: Autres taches pendant la mise a jour
  ansible.builtin.debug:
    msg: "Execution de taches en parallele"

- name: Attendre la fin de la mise a jour
  ansible.builtin.async_status:
    jid: "{{ apt_update.ansible_job_id }}"
  register: job_result
  until: job_result.finished
  retries: 60
  delay: 10

Strategies d'execution

# Strategie linear (par defaut) : attend que tous les hotes
# terminent une tache avant de passer a la suivante
- hosts: all
  strategy: linear

# Strategie free : chaque hote avance a son propre rythme
- hosts: all
  strategy: free

# Strategie host_pinned : comme free, mais les workers
# restent assignes au meme hote
- hosts: all
  strategy: host_pinned

ControlPersist SSH

Maintenir les connexions SSH ouvertes pour eviter la reauthentification :

# ansible.cfg
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-%r@%h:%p
pipelining = True

Profiling avec callback

# ansible.cfg
[defaults]
callbacks_enabled = timer, profile_tasks, profile_roles

# Resultats : temps d'execution par tache et par role
Regle : Activez toujours pipelining et augmentez forks selon votre infrastructure pour des gains significatifs.