AVIS DE SOUTENANCE de Monsieur Adam CHADER

L’Ecole doctorale : Ecole Doctorale de l’Institut Polytechnique de Paris

et le Laboratoire de recherche SAMOVAR – Services répartis, Architectures, Modélisation, Validation, Administration des Réseaux

présentent

l’AVIS DE SOUTENANCE de Monsieur Adam CHADER

Autorisé à présenter ses travaux en vue de l’obtention du Doctorat de l’Institut Polytechnique de Paris, préparé à Télécom SudParis en :

Informatique

« Collecter de très grands tas avec téléGC »

le JEUDI 11 DéCEMBRE 2025 à 10h30

à

Amphithéâtre 3
19, place Marguerite Perey 91120 Palaiseau
https://webconf.imt.fr/frontend/rooms/e2b-mut-25i-kmp/join

Membres du jury :

M. Gaël THOMAS, Directeur de recherche, Inria Saclay, FRANCE – Directeur de thèse
M. Mathieu BACOU, Maître de conférences, Télécom SudParis, FRANCE – Co-encadrant de thèse
M. Pierre SENS, Professeur, Sorbonne Université, FRANCE – Rapporteur
M. Daniel HAGIMONT, Professeur, Université de Toulouse, FRANCE – Rapporteur
M. Guillermo  POLITO, Chargé de recherche, Inria Lille , FRANCE – Examinateur
Mme Sara BOUCHENAK, Professeure, INSA Lyon , FRANCE – Examinatrice

« Collecter de très grands tas avec téléGC »

présenté par Monsieur Adam CHADER

Résumé :

La mémoire hiérachique (ou mémoire à plusieurs niveaux), est un paradigme de gestion des données qui a émergé avec l’avènement de nouvelles technologies mémoire (mémoire persistente, disque, High Bandwith Memory (HBM), mémoire programmable,…) et de nouveaux canaux de communication entre les mémoires (Infiniband, CXL, NUMA, …). Dans cette abstraction, chaque niveaux mémoire offre des latences différentes, et des capacités de stockage plus ou moins élevées. Pour profiter des propriétés différentes des mémoires de manière optimale, l’objectif des chercheurs et développeurs système est de décider où placer les données dans ces divers niveaux. Par exemple, il est plus efficace de placer les données accédées plus fréquement dans les mémoires plus rapides comme la DRAM (Dynamic Random Access Memory) ou les caches CPU, et les données les moins utilisées dans les niveaux plus lents comme le disque, ou la mémoire distante. Notre étude se place dans un contexte précis de mémoire hierarchique appelé la mémoire désagrégée. Dans ce contexte, les noeuds au sein d’un cluster peuvent accéder directement à la mémoire des autres noeuds, sans interrompre leurs processeurs. Ce procédé s’appelle RDMA (accès mémoire direct à distance), et permet, si la transparence est assurée par le système d’exploitation, de donner l’abstraction aux applications d’une mémoire très grande, qui est en réalité la somme des mémoires de tous les noeuds dans le cluster. Cependant, RDMA qui, par construction, n’implémente pas de cohérence de cache, rend l’échange de donnée entre les CPUs des différents noeuds impossible. Dans les faits, le cluster est divisé en deux groupes de noeuds, des noeuds de calculs, qui accueillent les applications, et des noeuds mémoires, qui servent de stockage distant, plus performants que le disque. Dans ce contexte, plusieurs projets de recherche ont montré que l’execution d’une application accompagnée d’un ramasse miette (ou Garbage Collector (GC)), était particulièrement affectée par l’utilisation de mémoire désagrégée. Cela est du au fait que les GC possèdent une très mauvaise localité d’accès, car ils parcourent toute la mémoire pour trouver les objets à libérer. La solution trouvée dans la littérature a été de déplacer l’éxécution du ramasse miette vers les noeuds mémoires, dans lequels la majorité des objets est stockée. Cependant, nous avons mesuré que l’execution d’un GC sur le noeud mémoire dégrade les performances significativement à cause de la synchronisation entre le collecteur et l’application, car les faire communiquer est maintenant bien plus coûteux. Notre contribution vise à eviter ce coût de synchronisation à l’aide d’un nouveau ramasse miette appelé TeleGC. TeleGC est localisé sur le noeud distant, cependant, contrairement aux prototypes concurrents, nous proposons d’utiliser l’absence de cohérence de cache à notre avantage pour générer une capture de la mémoire sur le noeud distant. En effet, si l’on garantit qu’aucune écriture n’est effectuée sur une région de mémoire, il est possible de la collecter de manière indépendante, sans synchronisation avec l’application pour garantir l’intégrité de la mémoire. Pour obtenir cette capture, nous avons développé la barrière de write-back, qui bloque et redirige les écritures de la mémoire locale vers la mémoire distante pendant une collection. D’autre part, notre ramasse miette n’effectue pas de compaction, c’est à dire n’aggrege pas les objets vivants restants, car cela implique une synchronisation d’autant plus importante entre le ramasse miette et l’application, très couteuse dans le contexte de désagrégation. Pour palier à la fragmentation qui se génère alors, nous proposons une disposition de la mémoire particulière, similaire à celle de la machine virtuelle Python. Avec cette approche, notre prototype est capable de surpasser à la fois les GCs en production de la JVM (Java Virtual Machine), et les implémentations de l’état de l’art dans un contexte désagrégé.

Abstract :

Memory tiering has emerged in recent years as a good abstraction to account for the multiplicity of memory technologies (persistent memory, high bandwith memory (HBM), programmable memory, disk,…), and of memory communication technologies (NUMA, RDMA, CXL,…). A large portion of system research in this field has focused on transparent placement of memory in these multiple tiers that present different properties like latency and capacity. In our study, we focus on memory disaggregation, a memory tiering practice where nodes in a cluster can directly access memory in other special nodes called memory nodes. The access to these other remote memories is slower than to the local memory of the node, but allows to transparenly make application memory larger. The local memory is here used as a cache for the remote memory. In this context, several research projects have shown that the execution of a garbage collected (GC) application is greatly affected in terms of performance by the use of disaggregated memory. This is due to the fact that garbage collectors present very bad locality, as they need to parse the entire memory to determine which objects to collect. Thus, they perform poorly in the cache context that is disaggregation, and even pollute the cache, deteriorating the performance of the collected application even more. Contributions in the literature solve this problem by moving the garbage collector to the remote memory node. This way, all GC memory accesses are done directly, without transiting by the cache. Unfortunately, we measured that executing the GC on the memory node significantly degrades performance because of synchronization between the GC and the application as making them communicate is now costlier. Our contribution aims to avoid this synchronization with a garbage collector called TeleGC. TeleGC is located on the remote memory node, and removes the need for any synchronization by leveraging the absence of cache coherence between local and remote node in a disaggregated setting. Thanks to this, and with a new technique called write-back retention, we are able to obtain an immutable snapshot of the memory on the memory node during collection, which allows for safe collection without any synchronization. With this approach, we are able to outperform both production Java garbage collectors and the state of the art implementations in a disaggregated context.