Étude et optimisation du ramasse-miette de Nit

Le compilateur du langage Nit utilise boehmgc pour l'allocation et la desallocation de ses structures de données. Toutefois dans plusieurs cas d'essai, la part de temps CPU prise par le ramasse miettes frôle, voir dépasse, les 50% ce qui est très déraisonnable.

L'objectif du travail est d'explorer trois voies pour améliorer la performance du gc.

  • utiliser GC_malloc_atomic pour les structures feuilles ne contenant pas de pointeur (comme les chaînes de caractères). Une rapide expérimentation préalable a montré qu'une telle utilisation dégrade les performances ce qui contredit à la fois la documentation et le bon sens. Le travail consiste à expérimenter plus sérieusement, et si la tendance se confirme, comprendre pourquoi les performances ne s'améliorent pas.

  • utiliser les descriptions de types pour aider le gc à trouver plus efficacement les pointeurs. Le travail consiste à modifier le compilateur pour générer des descripteurs de types et les utiliser dans le gc. Puis a mesurer le gain en performances.

  • activer le ramasse en parallèle. Il est possible de faire exécuter le gc dans un thread dédié pour gagner en performance (c'est une stratégie mise en oeuvre par les meilleures machines virtuelles). Le travail consiste à comprendre les implications d'une telle fonctionnalité (en particulier aux niveaux du modèle mémoire et de la synchronisation), à expérimenter et mesurer les effets d'un tel parallélisme.