Lead
La mémoire vive non volatile (NVRAM) adressable par octet est une technologie émergente qui est persistante lors d'une interruption de l'alimentation (au contraire de la DRAM), qui propose un accès rapide et fin à la mémoire (au contraire des disques durs), et qui promet d'excellentes performances (supérieures de plusieurs ordres de grandeur à la mémoire flash). Elle est particulièrement intéressante pour les structures de données en mémoire partagée qui sont au cœur de nombreux composants clés d’infrastructure. Cependant la plupart des structures de données ne sont pas persistantes et, par conséquent, elles n’ont pas été conçues pour tolérer des défaillances ou des altérations, qu’elles soient accidentelles ou malveillantes. Les techniques traditionnelles comme la journalisation sur une unité de stockage engendrent un surcoût important en termes de performance, tant lors de l’exécution normale que lors d’une reprise après défaillance.

Lay summary
L’objectif du projet PersiST est de concevoir et mettre en œuvre des structures de données et des algorithmes performants, concurrents et sécurisés à même de tirer profit des capacités de la mémoire vive non volatile (NVRAM). La principale cible de telles structures est de favoriser le stockage et le traitement de grandes masses de données (« big data »).

Nous explorerons plus précisément trois axes de recherche complémentaires qui seront menés en parallèle durant le projet et évalués conjointement dans le contexte du stockage de données volumineuses.

Dans le premier axe, nous examinerons, concevrons et mettrons en œuvre des structures de données persistantes (ou PDTs pour « Persistent Data Types »), ainsi que des algorithmes appropriés permettant d’exploiter le potentiel de la NVRAM. L’objectif est de développer un ensemble de PDTs proposant divers compromis en termes de performance et de robustesse, et qui soient directement utilisables par des applications exigeantes en données. Ces PDTs iront de structures simples et polyvalentes comme des listes, des queues ou des tables de hachage, en passant par des structures spécialisées pour certains types de données comme des arbres ou des graphes.

Dans le deuxième axe, nous nous concentrerons sur la performance et le passage à l’échelle en étudiant comment les PDTs peuvent être accédées de manière concurrente par un grand nombre de fils d’exécution dans les systèmes multi-cœurs. Ce problème est loin d’être trivial car les structures de données doivent rester cohérentes en tout temps et dans leur intégralité—pas uniquement au niveau des emplacements de mémoire individuels—malgré les accès concurrents, de manière à permettre une récupération après un défaillance. Dans le cas contraire, les fils d’exécution pourraient ne pas observer le même état avant et après le redémarrage car les effets d’une opération partiellement exécutée en NVRAM persistent au-delà des défaillances, à la différence de la mémoire volatile.

Dans le troisième axe, nous sécuriserons ces PDTs en mémoire en les protégeant des attaques, même dans le cas où des logiciels malveillants essaieraient d’altérer des logiciels système authentiques afin d’acquérir des niveaux de privilège plus élevés. Ce problème est particulièrement préoccupant pour la NVRAM car les données sont préservées même lorsque le système est arrêté brutalement. Cela permettrait à un attaquant d’accéder facilement aux données sensibles en lisant le contenu de la NVRAM d’un système qui aurait été arrêté intentionnellement avant qu’une quelconque mesure de sécurité ne soit appliquée (p.ex. le chiffrement). Il nous faut par conséquent des mécanismes permettant de préserver la confidentialité des données (contre la divulgation) et leur intégrité (contre la falsification), mais sans pour autant compromettre la performance.