Performance et optimisation 22 min de lecture

Mitogen et fact caching

Mitogen pour Ansible

Mitogen est un plugin de connexion qui remplace le mecanisme SSH standard d'Ansible. Il peut accelerer les playbooks de 2x a 7x.

Installation de Mitogen

pip install mitogen

# Trouver le chemin d'installation
python -c "import mitogen; print(mitogen.__path__[0])"
# Exemple : /usr/lib/python3/dist-packages/mitogen

Configuration

# ansible.cfg
[defaults]
strategy_plugins = /usr/lib/python3/dist-packages/ansible_mitogen/plugins/strategy
strategy = mitogen_linear

# Pour la strategie free :
# strategy = mitogen_free

Comment Mitogen fonctionne

  • Etablit un tunnel Python via SSH (pas de copie de fichiers)
  • Transfere le code des modules directement en memoire
  • Reutilise les connexions entre les taches
  • Reduit drastiquement les appels fork() sur les hotes distants

Fact Caching

Le fact caching evite de reevaluer les facts a chaque execution :

Cache JSON (fichier local)

# ansible.cfg
[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts_cache
fact_caching_timeout = 3600   # 1 heure en secondes

Cache Redis

# Installation
pip install redis

# ansible.cfg
[defaults]
gathering = smart
fact_caching = redis
fact_caching_connection = localhost:6379:0
fact_caching_timeout = 7200   # 2 heures
fact_caching_prefix = ansible_facts_

Modes de gathering

  • implicit (defaut) : Collecte les facts a chaque execution
  • explicit : Ne collecte que si gather_facts: true
  • smart : Utilise le cache si disponible, sinon collecte

Desactiver les facts inutiles

# Desactiver completement la collecte
- hosts: all
  gather_facts: false
  tasks:
    - name: Tache sans facts
      ansible.builtin.debug:
        msg: "Pas besoin de facts"

# Collecter uniquement certains facts
- hosts: all
  gather_facts: true
  gather_subset:
    - network
    - hardware
    - "!facter"

Optimisations supplementaires

# ansible.cfg
[defaults]
# Desactiver la verification des cles hotes (env de dev)
host_key_checking = False

# Compresser les transferts
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -C

# Limiter le nombre de facts collectes
[defaults]
gather_subset = min

Comparaison de performance

# Benchmark typique (100 hotes, role moyen) :
# Standard SSH :        ~180 secondes
# SSH + Pipelining :    ~120 secondes
# Mitogen :             ~45 secondes
# Mitogen + Fact Cache : ~30 secondes
Impact : Combiner Mitogen, fact caching et pipelining peut diviser le temps d'execution par 5 ou plus.