Introduction

L'appel système fork() est relativement coûteux, car il doit copier l'ensemble de l'état du processus, y compris la mémoire, pour le processus enfant. De nombreuses optimisations ont été apportées au fil des ans, mais un fork() reste une opération fondamentalement coûteuse. Pour aggraver les choses, un appel fork() est souvent immédiatement suivi d'un appel exec(), qui va supprimer toute la mémoire qui a été soigneusement copiée pour le processus enfant.

Contexte Technique

Le patch set de Chen prend une approche intéressante pour optimiser le modèle fork() et exec(). Il se concentre sur les applications qui lancent régulièrement des processus exécutant le même fichier exécutable. Dans de tels cas, le programme peut établir un modèle pour accélérer ces invocations, en répartissant le coût de configuration sur plusieurs opérations. Ce modèle serait créé avec l'appel système spawn_template_create().

La structure spawn_template_create_args permet de spécifier les détails de l'exécutable, tels que le fichier exécutable ou le répertoire de travail. La création du modèle entraîne l'ouverture du fichier indiqué et la mise en cache d'informations qui permettront à un processus d'exécuter ce fichier plus rapidement à l'avenir.

Analyse et Implications

L'approche de Chen vise à améliorer les performances en réduisant le coût de fork() et exec(). Les résultats des benchmarks montrent une amélioration d'environ 2%, ce qui peut ne pas sembler beaucoup, mais qui peut faire une différence pour les applications qui correspondent au modèle attendu.

Cependant, les commentaires des développeurs, tels que Mateusz Guzik et Christian Brauner, soulignent que l'approche de Chen ne résout pas le problème fondamental de fork() et qu'une nouvelle API devrait être conçue pour supprimer la copie du processus actuel et créer un processus vierge.

Perspective

Les travaux futurs de Chen devraient se concentrer sur la création d'une nouvelle API qui permette de configurer un processus vierge et d'exécuter un fichier exécutable de manière plus efficace. Cela pourrait aboutir à une implémentation native de posix_spawn() dans l'espace utilisateur, qui serait une alternative bienvenue au modèle fork()/exec() actuel.

Il est important de surveiller les prochaines étapes dans ce domaine, car une amélioration de la performance et de la sécurité des appels système peut avoir un impact significatif sur les applications et les systèmes qui les utilisent.