Formation en Développement: Go Performance - Profiling, optimisation et patterns haute performance - Ascent Formation
Retour aux formations
Développement

Go Performance - Profiling, optimisation et patterns haute performance

3 jour(s)21h

Description

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 pédagogiques

  • 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

Public concerné

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

Déroulé du programme

1

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
2

É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
3

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
4

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
5

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)
6

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
7

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
8

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
9

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
10

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
11

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
12

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
13

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

Informations

Durée

3 jour(s)

21h

Tarif

Sur demande