# Étudier les performances de Bouncer ## In situ Il est possible d'activer via la configuration de Bouncer de endpoints capable de générer des fichiers de profil au format [`pprof`](https://github.com/google/pprof). Par défaut, le point d'entrée est `.bouncer/profiling` (l'activation et la personnalisation de ce point d'entrée sont modifiables via la [configuration](../../../misc/packaging/common/config.yml)). **Exemple:** Visualiser l'utilisation mémoire de Bouncer ```bash go tool pprof -web http:///.bouncer/profiling/heap ``` L'ensemble des profils disponibles sont visibles à l'adresse `http:///.bouncer/profiling`. ## En développement Le package `./internal` est dédié à l'étude des performances de Bouncer. Il contient une suite de benchmarks simulant de proxies avec différentes configurations de layers afin d'évaluer les points d'engorgement sur le traitement des requêtes. Voir le répertoire `./internal/bench/testdata/proxies` pour voir les différentes configurations de cas. ### Lancer les benchmarks Le plus simple est d'utiliser la commande `make bench` qui exécutera séquentiellement tous les benchmarks. Il est également possible de lancer un benchmark spécifique via la commande suivante: ```bash go test -bench="BenchmarkProxies/$BENCH_CASE" -run='^$' ./internal/bench ``` Par exemple: ```bash # Pour exécuter ./internal/bench/testdata/proxies/basic-auth.yml go test -bench='BenchmarkProxies/basic-auth' -run='^$' ./internal/bench ``` ### Visualiser les profils d'exécution Vous pouvez visualiser les profils d'exécution via la commande suivante: ```shell go tool pprof -web path/to/file.prof ``` Par défaut l'exécution des benchmarks créera automatiquement des fichiers de profil dans le répertoire `./internal/bench/testdata/proxies`. Par exemple: ```shell go tool pprof -web ./internal/bench/testdata/proxies/basic-auth.prof ``` ### Comparer les évolutions ```bash # Lancer un premier benchmark go test -bench="BenchmarkProxies/$BENCH_CASE" -run='^$' ./internal/bench # Faire une sauvegarde du fichier de profil cp ./internal/bench/testdata/proxies/$BENCH_CASE.prof ./internal/bench/testdata/proxies/$BENCH_CASE-prev.prof # Faire des modifications sur les sources # Lancer un second benchmark go test -bench="BenchmarkProxies/$BENCH_CASE" -run='^$' ./internal/bench # Visualiser la différence entre les deux profils go tool pprof -web -base=./internal/bench/testdata/proxies/$BENCH_CASE-prev.prof ./internal/bench/testdata/proxies/$BENCH_CASE.prof ```