Étude de prefetchers matériels par canal auxiliaire sur le cache
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
Mots clés libres
Résumé
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é didentifier la source du bruit et de la variabilité comme provenant du réseau dinterconnexion entre les curs. Nous avons identifié sa topologie et modélisé les temps dexé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 daccès mémoires. À laide 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 lautre prefetcher L2 de ces processeurs, le Adjacent Cache Line Prefetcher, prefetcher de ligne de cache adjacente.