← Retour au blog
tech 29 juillet 2026

Comment profiler le code eBPF ?

Découvre comment mesurer l'impact de performance du code eBPF avec des exemples concrets et des outils pertinents.

Article inspiré de la source originale
How Do I Profile eBPF Code? ↗ naveensrinivasan.com

Introduction

L'eBPF (Extended Berkeley Packet Filter) a révolutionné la manière dont nous pouvons interagir avec le noyau Linux. En tant que décideur tech ou développeur, comprendre comment profiler le code eBPF est crucial pour assurer une performance optimale de vos systèmes.

Pourquoi profiler le code eBPF ?

L'eBPF permet d'exécuter du code dans le noyau Linux avec une sécurité renforcée et sans modifier le code source du noyau. Cela offre une grande flexibilité pour le monitoring, le networking, et la sécurité. Cependant, chaque ajout de code peut potentiellement introduire une surcharge. Il est donc essentiel de mesurer cet impact pour garantir que les bénéfices surpassent les coûts.

Mise en place de l'environnement de test

Pour illustrer comment profiler le code eBPF, prenons l'exemple de la mesure des performances d'ouvertures de fichiers, une des opérations critiques dans un système d'exploitation. Nous utilisons un hook eBPF pour intercepter les appels d'ouverture de fichiers et mesurer la surcharge introduite.

Préparation du terrain

D'abord, nous avons besoin d'un programme C simple pour tester l'ouverture de fichiers. Ce programme utilise syscall(SYS_openat, …) au lieu du wrapper libc pour minimiser les interférences. L'objectif est de mesurer le temps d'ouverture d'un fichier dans des conditions de cache chaud, en éliminant les 10% premiers résultats comme période de rodage.

```c #define _GNU_SOURCE #include <fcntl.h> #include <stdio.h> #include <time.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #include <sched.h> #include <sys/mman.h> #include <sys/syscall.h>

static inline uint64_t now_ns(void) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return (uint64_t)ts.tv_sec * 1000000000ull + ts.tv_nsec; }

int main(int argc, char **argv) { const char path = argv[1]; uint64_t n = strtoull(argv[2], NULL, 10); uint64_t warm = n / 10; uint32_t d = mmap(NULL, n sizeof(uint32_t), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_POPULATE, -1, 0); mlock(d, n sizeof(uint32_t)); for (uint64_t i = 0; i < n; i++) d[i] = 0; for (uint64_t i = 0; i < n; i++) { uint64_t t0 = now_ns(); long fd = syscall(SYS_openat, AT_FDCWD, path, O_RDONLY); uint64_t t1 = now_ns(); if (fd >= 0) close(fd); d[i] = (uint32_t)(t1 - t0); } for (uint64_t i = warm; i < n; i++) printf("%u\n", d[i]); return 0; } ```

Profiler avec Perf et bpftool

Pour profiler le code eBPF, l'outil perf est indispensable. Il permet de résoudre les symboles et d'analyser où se situent les potentiels goulots d'étranglement.

Commandes de configuration

Les commandes suivantes activent le JIT et exposent les symboles compilés pour permettre à perf de les afficher correctement :

``bash sudo sysctl -w net.core.bpf_jit_enable=1 sudo sysctl -w net.core.bpf_jit_kallsyms=1 ``

Ensuite, exécute ton code eBPF et utilise bpftool pour vérifier l'apparition des symboles :

``bash sudo bpftool prog show | rg -A4 ' lsm ' sudo rg 'bpf_prog_[0-9a-f]+_ '/proc/kallsyms | rg 'security|path|file|open' ``

Interprétation des résultats

Une fois les données collectées, l'analyse des résultats est cruciale. Cherche les latences anormalement élevées et les motifs de surcharge. Cette étape te permettra d'optimiser ton code eBPF et d'améliorer les performances globales de ton système.

Conclusion

Profiler le code eBPF est essentiel pour garantir un impact minimal sur les performances du système. Avec les bons outils et une approche méthodique, tu peux facilement identifier et atténuer les goulots d'étranglement potentiels.

Discutons de ton projet en 15 minutes.

eBPF profiling performance Linux kernel system optimization
Newsletter Deepthix · 100% IA · chaque lundi 8h

Un agent IA lit la tech à ta place.

Notre agent IA scanne ~200 sources par semaine et te livre les meilleurs articles le lundi 8h. Gratuit. 1 clic pour se désinscrire.

Voir la page newsletter →

Tu veux automatiser tes opérations ?

Discutons de ton projet en 15 minutes.

Réserver un call