Studying hardware prefetchers using cache side channels - TEL - Thèses en ligne
Thèse Année : 2023

Studying hardware prefetchers using cache side channels

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

Résumé

Caches are essential to the performance of modern CPUs. Hardware prefetchers attempt to fetch lines into the cache before these are requested. This aims at reducing the number of cache misses, especially cold misses. Most modern CPU designs include prefetchers, but the manufacturers disclose very little about those prefetchers. However, prefetchers may have a security impact, potentially leaking private information. Consequently, uncovering and documenting their behavior is valuable to the academic communities in security and high-performance computing. Nevertheless, this endeavor is challenging. Prefetchers only affect the cache state, usually deduced by timing memory accesses. Unfortunately, memory accesses influence the prefetchers; hence this method interferes with the experiments. To work around this issue, we started with the idea of using the Flush+Flush cache channel, which uses the clflush instruction. This instruction is not a memory access; hence, it does not influence the prefetchers. However, significant variability and noise hamper this primitive on modern CPUs. Our first contribution was to identify the interconnect between cores as the source of this noise, model clflush execution time, and use this knowledge to improve Flush+Flush to be as accurate a primitive as the reliable Flush+Reload. This made our initial strategy viable to achieve our second contribution. We built a framework, CacheObserver, written in Rust, that uses Flush+Flush to monitor the cache state of a range of addresses in response to a sequence of memory accesses. Using this framework, we uncovered behavior of the L2 Stream prefetcher on Intel's Coffee Lake and Whiskey Lake CPUs. We also showed that this prefetcher interacted with the L2 adjacent cache line prefetcher, the other L2 prefetcher included in those CPUs.
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 ou, en français, préchargeurs, qui visent à antici- per les requêtes mémoires du processeur. Toutefois, les fabricants ne documentent guère ces préchargeurs, 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 préchargeurs 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 préchargeurs. Toutefois, une importante variabi- lité 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 L2 Stream prefetcher des processeurs Intel Whiskey et Coffee Lake. Nous avons aussi montré que ce préchargeur interagit avec l’autre préchargeur de niveau 2 de ces processeurs, le Adjacent Cache Line Prefetcher, préchargeur de ligne de cache adjacente.
Fichier principal
Vignette du fichier
GuillaumeDIDIER-Thesis-Soutenu.pdf (17.66 Mo) Télécharger le fichier
Origine Fichiers produits par l'(les) auteur(s)

Dates et versions

tel-04481648 , version 1 (28-02-2024)

Identifiants

  • HAL Id : tel-04481648 , version 1

Citer

Guillaume Didier. Studying hardware prefetchers using cache side channels. Operating Systems [cs.OS]. École normale supérieure - PSL, 2023. English. ⟨NNT : ⟩. ⟨tel-04481648⟩
110 Consultations
135 Téléchargements

Partager

More