Thèse en cours

Étude de prefetchers matériels par canal auxiliaire sur le cache

FR  |  
EN

Accès à la thèse

AttentionLa soutenance a eu lieu le 20/01/2023. Le document qui a justifié du diplôme est en cours de traitement par l'établissement de soutenance.
Auteur / Autrice : Guillaume Didier
Direction : David Naccache
Type : Projet de thèse
Discipline(s) : Informatique
Date : Inscription en doctorat le
Soutenance le 20/01/2023
Etablissement(s) : Université Paris sciences et lettres
Ecole(s) doctorale(s) : École doctorale Sciences mathématiques de Paris centre (Paris ; 2000-....)
Partenaire(s) de recherche : Laboratoire : DIENS - Département d'informatique de l'École normale supérieure
Equipe de recherche : SECURITY
établissement opérateur d'inscription : École normale supérieure (Paris ; 1985-....)
Jury : Président / Présidente : David Monniaux
Examinateurs / Examinatrices : Guy Gogniat, Clémentine Maurice, Biswabandan Panda, Angeliki Kritikakou, James Hoe
Rapporteur / Rapporteuse : Guy Gogniat, David Hély

Mots clés

FR  |  
EN

Résumé

FR  |  
EN

Les caches contribuent de façon majeure à la performance des processeurs modernes. Pour réduire le nombre d'accès manquant le cache (cache miss), les fabricants incluent des prefetchers, qui visent à anticiper les requêtes mémoires du processeur. Toutefois, les fabricants ne documentent guère ces prefetchers, d'où l'intérêt d'en faire la rétro-ingénierie. Ceci intéresse les chercheurs en sécurité autant que la communauté haute performance. Néanmoins, cette rétro-ingénierie est rendue difficile parce que les prefetchers opèrent sur le cache et sont entrainés par les accès mémoires, moyen principal de mesurer l'état du cache. L'observateur interfère alors avec l'expérience. Pour éviter cela, nous avons cherché à employer un autre canal auxiliaire, Flush+Flush, qui utilise l'instruction clflush. Cette instruction n'est pas un accès mémoire, et n'influence donc pas les prefetchers. Toutefois, une importante variabilité et un fort bruit nuisent grandement à cette primitive sur les processeurs modernes. Notre première contribution a été d’identifier la source du bruit et de la variabilité comme provenant du réseau d’interconnexion entre les cœurs. Nous avons identifié sa topologie et modélisé les temps d’exécution de clflush, ce qui nous a permis de concevoir un algorithme de calibration qui rend Flush+Flush aussi précise que Flush+Reload. Cette primitive améliorée a rendu notre stratégie originale viable, et nous avons alors atteint notre deuxième contribution. Nous avons développé un outil, CacheObserver, écrit en Rust, qui utilise Flush+Flush pour surveiller l’état du cache dans une région de la mémoire, en réaction a une séquence d’accès mémoires. À l’aide de celui-ci, nous avons mis à jour des comportements jusque-là ignorés du Stream prefetcher L2 sur les processeurs Intel Whiskey et Coffee Lake. Nous avons aussi montré que ce prefetcher interagit avec l’autre prefetcher L2 de ces processeurs, le Adjacent Cache Line Prefetcher, prefetcher de ligne de cache adjacente.