Go Performance - Profiling, optimisation et patterns haute performance
Maîtrisez les outils et techniques d'optimisation du langage Go
Formation créée le 15/04/2026.Version du programme : 2
Type de formation
PrésentielDurée de formation
21 heures (3 jours)
Cette formation est gratuite.
S'inscrire
Cette formation est gratuite.
S'inscrire
Cette formation est gratuite.
S'inscrire
Go Performance - Profiling, optimisation et patterns haute performance
Maîtrisez les outils et techniques d'optimisation du langage Go
Cette formation de 3 jours permet aux développeurs Go expérimentés de maîtriser les outils et méthodes d'optimisation des performances : benchmarking, profiling avec pprof, tracing, gestion mémoire, garbage collector et Profile-Guided Optimization (PGO). Les participants apprendront à appliquer les patterns de concurrence haute performance et à mettre en place une démarche systématique d'optimisation en environnement de production.
Objectifs de la formation
- Identifier et mesurer les goulets d'étranglement d'une application Go à l'aide des outils de profiling natifs
- Écrire et interpréter des benchmarks fiables et reproductibles
- Optimiser la gestion mémoire, les allocations et l'interaction avec le garbage collector
- Appliquer la Profile-Guided Optimization (PGO) pour améliorer les performances de compilation
- Appliquer les patterns de concurrence avancés pour maximiser le débit et minimiser la latence
- Mettre en place une démarche systématique d'optimisation en environnement de production
Profil des bénéficiaires
Pour qui
- Développeurs
- Ingénieurs logiciels
- Chercheurs pratiquant Go en environnement de production ou de recherche, souhaitant optimiser les performances de leurs applications
Prérequis
- Pratique régulière du langage Go depuis au moins 6 mois
- Maîtrise des fondamentaux : goroutines, channels, interfaces, modules, tests unitaires
Contenu de la formation
Fondamentaux de l'optimisation en Go
- Philosophie d'optimisation : mesurer avant d'optimiser
- Architecture du runtime Go : scheduler, stack management, escape analysis
- Comprendre le modèle mémoire de Go
Écrire des benchmarks fiables
- Le package testing : fonctions Benchmark, sous-benchmarks
- Pièges courants : optimisations du compilateur, effets de cache, timer resets
- Suivi des allocations mémoire dans les benchmarks (b.ReportAllocs)
- Séries répétées et comparaison statistique avec benchstat
- Établir une baseline reproductible
Profiling avec pprof
- Profils CPU : génération, collecte, interprétation
- Profils mémoire (heap) : allocations, objets en vie
- Profils block, mutex et goroutine
- Navigation dans pprof : top, list, web, peek
- Visualisation : flame graphs, graphes d'appels
- Profiling d'applications en cours d'exécution avec net/http/pprof
Tracing
- Le traceur d'exécution Go (go tool trace)
- Analyse des événements : scheduling, GC, syscalls, network
- Identification des latences et des contentions à partir des traces
Gestion mémoire et garbage collector
- Fonctionnement du GC Go : phases, latence, throughput
- Variables GOGC et GOMEMLIMIT : réglage du GC
- Réduction de la pression GC : stratégies concrètes
- Lecture et interprétation des statistiques GC (GODEBUG=gctrace=1)
Réduction des allocations
- Stack vs heap : comprendre l'escape analysis (go build - gcflags="-m")
- Patterns courants d'allocations évitables
- Réutilisation d'objets avec sync.Pool
- Pré-allocation de slices et maps
- Buffers réutilisables pour les opérations d'encodage/décodage
Optimisation des structures de données
- Alignement mémoire et padding des structs
- Optimisation de la taille des structures (réordonnancement des champs)
- Choix de structures de données adaptées au cas d'usage
- Strings vs bytes : quand et comment convertir sans allocation
Profile-Guided Optimization (PGO)
- Principe et fonctionnement de PGO dans le compilateur Go
- Génération d'un profil CPU compatible PGO
- Compilation avec PGO activé : workflow et intégration CI
- Quand PGO est utile et quand il ne remplace pas le travail de profiling classique
Panorama des optimisations bas niveau et de leurs limites
- Inlining : comprendre les heuristiques du compilateur
- Bound check elimination
- Cas exceptionnels d'usage de unsafe et risques associés
Concurrency haute performance
- Patterns : fan-out/fan-in, pipeline, worker pool, semaphore
- Dimensionnement des worker pools
- Contention sur les locks : diagnostic et alternatives (atomic, lock-free patterns)
- Channel vs mutex : critères de choix en contexte performance
- Load shedding et backpressure
- errgroup et gestion d'erreurs concurrentes
Optimisation des I/O
- Buffered I/O : readers et writers, dimensionnement des buffers
- Allocation patterns en I/O : identifier et réduire les allocations dans les chemins critiques
- HTTP client/server tuning : timeouts, keep-alive, connection pooling
- Sérialisation comparée sur un cas concret : JSON, Protocol Buffers, formats binaires
Observabilité et performance en production
- Le package runtime/metrics : exposition des métriques runtime (/gc/gogc:percent, /gc/gomemlimit:bytes, etc.)
- Intégration avec l'observabilité existante (Prometheus, OpenTelemetry)
- Profiling continu : intégration de pprof dans un service de production
- Réduction de la taille des binaires, build tags et compilation conditionnelle
Démarche systématique d'optimisation
- Workflow : identifier, mesurer, optimiser, valider
- Arbitrage performance vs lisibilité vs maintenabilité
- Documentation des décisions d'optimisation
- Anti-patterns : optimisations prématurées, micro-benchmarks trompeurs
Équipe pédagogique
L'équipe pédagogique est composée de formateurs experts en développement Go, disposant d'une expérience significative en optimisation de performances applicatives en environnement de production. Tous nos intervenants sont sélectionnés pour leur maîtrise technique et leur capacité à transmettre des pratiques directement applicables.
Suivi de l'exécution et évaluation des résultats
- Exercices pratiques tout au long de la formation
- QCM d'évaluation des acquis en fin de formation
Ressources techniques et pédagogiques
- Alternance d'apports théoriques (30%) et de travaux pratiques sur poste (70%)
- Chaque concept est illustré par du code Go exécutable
- Les exercices s'appuient sur des cas réalistes (services HTTP, pipelines de données, traitements batch)