diff --git a/.gitignore b/.gitignore index aad1936..1f7f40b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,10 @@ *.blg *.log *.run.xml +*.nav +*.snm *.toc *.out +*.kra *.pdf diff --git a/Makefile b/Makefile index 7c4bda2..a74f06b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,12 @@ +all: rapport.pdf presentation.pdf + rapport.pdf: rapport.tex refs.bib pdflatex -interaction=nonstopmode -halt-on-error rapport.tex bibtex rapport pdflatex -interaction=nonstopmode -halt-on-error rapport.tex +presentation.pdf: presentation.tex + lualatex -interaction=nonstopmode -halt-on-error presentation.tex + clean: rm *.bbl *.bcf *.blg *.log *.run.xml *.toc *.aux *.out -f diff --git a/README.md b/README.md new file mode 100644 index 0000000..4f87eab --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# Rapport de Stage de L3 + +## Rapport + + +## Présentation + +Les croquis pdf ont été réalisés avec IPE, avec la configuration suivante: + +`emojis.isy`: +```xml + + + +\usepackage{emoji} + + +``` + +`customsize.isy`: +```xml + + + +``` + +Pour avoir l'emoji "🪩", la présentation est compilée avec LuaTeX, et la paquet `emoji` a été mis à jour manuellement depuis [GitHub](https://github.com/stone-zeng/latex-emoji/issues/16) diff --git a/figs/Cores.pdf b/figs/Cores.pdf new file mode 100644 index 0000000..605e6e3 Binary files /dev/null and b/figs/Cores.pdf differ diff --git a/figs/hachage.pdf b/figs/hachage.pdf new file mode 100644 index 0000000..ad40afb Binary files /dev/null and b/figs/hachage.pdf differ diff --git a/figs/hit-slice-bad.png b/figs/hit-slice-bad.png new file mode 100644 index 0000000..c1e1aa9 Binary files /dev/null and b/figs/hit-slice-bad.png differ diff --git a/figs/hit-slice-good.png b/figs/hit-slice-good.png new file mode 100644 index 0000000..a063eb4 Binary files /dev/null and b/figs/hit-slice-good.png differ diff --git a/figs/logo-Grid5000.png b/figs/logo-Grid5000.png new file mode 100644 index 0000000..e2d1325 Binary files /dev/null and b/figs/logo-Grid5000.png differ diff --git a/figs/logo-Kadeploy.png b/figs/logo-Kadeploy.png new file mode 100644 index 0000000..07094cb Binary files /dev/null and b/figs/logo-Kadeploy.png differ diff --git a/figs/model-hit.pdf b/figs/model-hit.pdf new file mode 100644 index 0000000..54b013b Binary files /dev/null and b/figs/model-hit.pdf differ diff --git a/figs/multi-socket.pdf b/figs/multi-socket.pdf new file mode 100644 index 0000000..35258c5 Binary files /dev/null and b/figs/multi-socket.pdf differ diff --git a/figs/pattern-hor.pdf b/figs/pattern-hor.pdf new file mode 100644 index 0000000..6ccbece Binary files /dev/null and b/figs/pattern-hor.pdf differ diff --git a/figs/pattern.pdf b/figs/pattern.pdf new file mode 100644 index 0000000..46ecf17 Binary files /dev/null and b/figs/pattern.pdf differ diff --git a/figs/predicted-remote-hit-cut.png b/figs/predicted-remote-hit-cut.png new file mode 100644 index 0000000..59fe9c4 Binary files /dev/null and b/figs/predicted-remote-hit-cut.png differ diff --git a/figs/simplified_cores.pdf b/figs/simplified_cores.pdf new file mode 100644 index 0000000..ecbdb72 Binary files /dev/null and b/figs/simplified_cores.pdf differ diff --git a/figs/topology-miss.jpg b/figs/topology-miss.jpg deleted file mode 100644 index 12a9007..0000000 Binary files a/figs/topology-miss.jpg and /dev/null differ diff --git a/presentation.tex b/presentation.tex new file mode 100644 index 0000000..850fbd3 --- /dev/null +++ b/presentation.tex @@ -0,0 +1,366 @@ +\documentclass{beamer} +\let\textmdorig\textmd +\let\textscorig\textsc +\let\textttorig\texttt + +\usepackage[french]{babel} +\usepackage[T1]{fontenc} +\usepackage{csquotes} +\usepackage{hyperref} +\usepackage{footmisc} +\usepackage{textcomp} +\usepackage{amsmath} +\usepackage{lmodern} +\usepackage{xcolor} +\usepackage{syntax} +\usepackage{emoji} +\usepackage{float} + +\newcommand{\ang}[1]{\emph{#1}} % texte anglais +\newcommand{\TODO}[1]{\color{red}#1} +\graphicspath{ {./figs/} } +\usetheme{Madrid} + +\title{Soutenance de stage} +\author{Augustin LUCAS} +\institute[TARAN, IRISA]{ + Encadré par Guillaume DIDIER, Angeliki KRITIKAKOU\\ + Équipe TARAN, Laboratoire IRISA +} +\date{} + +\begin{document} + +\maketitle + + +\begin{frame}{Plan} + \begin{itemize} + \item Contexte \begin{itemize} + \item Hiérarchie de cache + \item Attaques par canal auxiliaire sur le cache + \end{itemize} + \item Mise en application : analyse d'un système à deux \ang{sockets} \begin{itemize} + \item Mise en oeuvre + \item Topologie \ang{miss} + \item Topologie \ang{hit} + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame}{Hiérarchie de cache} + \begin{center} + \includegraphics[height=0.8\textheight]{Cores} + \end{center} + %Hiérarchie de cache +\end{frame} + +\begin{frame}{Hiérarchie de cache} + %Fonction de hachage + \begin{center} + \includegraphics[height=0.8\textheight]{hachage} + \end{center} +\end{frame} + +\begin{frame}{Cohérence de cache} + \begin{center} + \makebox[0.7\textwidth][r]{% + \includegraphics<1->[scale=0.8]{protocols/exclusive} + } + \vspace{1em} + + \makebox[0.7\textwidth][r]{% + \includegraphics<2->[scale=0.8]{protocols/modified} + } + \vspace{1em} + + \makebox[0.7\textwidth][r]{% + \includegraphics<3->[scale=0.8]{protocols/shared} + } + \vspace{1em} + + \makebox[0.7\textwidth][r]{% + \includegraphics<4->[scale=0.8]{protocols/invalid} + } + \end{center} +\end{frame} + +\begin{frame}{Multi-\textit{socket}} + \begin{center} + \includegraphics[width=0.9\textwidth]{multi-socket} + \end{center} +\end{frame} + +\begin{frame}{Multi-\textit{socket}} + \begin{center} + \vspace{-10cm} + \includegraphics[width=0.9\textwidth]{multi-socket} + \end{center} +\end{frame} + +\begin{frame}{NUMA} + \begin{center} + \includegraphics[width=0.9\textwidth]{lstopo} + \end{center} +\end{frame} + +\begin{frame}{Attaques par canal auxiliaire sur le cache} + %Canal auxiliaire + Objectif des attaques étudiées + \begin{itemize} + \item<2-> Savoir quelles adresses mémoire un programme accède + \item<3-> A permis des attaques récupérant des clés privées via OpenSSL + \item<4-> A permis d'implémenter des enregistreurs de frappe (\ang{keylogger}) + \end{itemize} +\end{frame} + +\begin{frame}{Flush+Reload} + \only<1>{ + \begin{center} + \includegraphics[height=0.7\textheight]{flushattacks/initialb} + + Observons le mécanisme proposé par Flush+Reload + \end{center} + } + \only<2>{ + \begin{center} + \includegraphics[height=0.7\textheight]{flushattacks/flushhit0} + + L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} + \end{center} + } + \only<3>{ + \begin{center} + \includegraphics[height=0.7\textheight]{flushattacks/flushhit1} + + L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} + \end{center} + } + \only<4>{ + \begin{columns}[c] + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/initialb} + + La victime charge \texttt{0xfe3a} + \end{center} + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} + + La victime ne fait rien + \end{center} + \end{columns} + } + \only<5>{ + + \center{L'attaquant charge à nouveau \texttt{0xfe3a}}, en mesurant le temps nécessaire + \begin{columns}[c] + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/reloadhitb} + + \emoji{stopwatch} \sim{1ns} + \end{center} + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/reloadmissb} + + \emoji{stopwatch} \sim{10-100ns} + \end{center} + \end{columns} + } + %F+R + % 1. état actuel, émoji dans les caches [0x076e: :smile:] [0xfe3a: :disco:] + % 2. flush(0xfe3a) + % 3. attente, on sépare en deux options + % 4. reload, temps différent, mettre une petite horloge en bas +\end{frame} + +\begin{frame}{Flush+Flush} + %F+F + % 1. état actuel, émoji dans les caches [0x076e: :smile:] [0xfe3a: :disco:] + % 2. flush(0xfe3a) + % 3. attente, on sépare en deux options + % 4. flush, temps différent, mettre une petite horloge en bas + \only<1>{ + \begin{center} + \includegraphics[height=0.7\textheight]{flushattacks/initialb} + + Observons le mécanisme proposé par Flush+Flush + \end{center} + } + \only<2>{ + \begin{center} + \includegraphics[height=0.7\textheight]{flushattacks/flushhit0} + + L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} + \end{center} + } + \only<3>{ + \begin{center} + \includegraphics[height=0.7\textheight]{flushattacks/flushhit1} + + L'attaquant (en \textit{Core 0}) appelle \texttt{clflush(0xfe3a)} + \end{center} + } + \only<4>{ + \begin{columns}[c] + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/initialb} + + La victime charge \texttt{0xfe3a} + \end{center} + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} + + La victime ne fait rien + \end{center} + \end{columns} + } + \only<5>{ + \center{L'attaquant appelle \texttt{clflush(0xfe3a)}, en mesurant le temps nécessaire} + \begin{columns}[c] + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/flushhit0} + \end{center} + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} + \end{center} + \end{columns} + } + \only<6>{ + \center{L'attaquant appelle \texttt{clflush(0xfe3a)}, en mesurant le temps nécessaire} + \begin{columns}[c] + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} + + \emoji{stopwatch} \sim{175 cycles} + \end{center} + \column{.5\textwidth} + \begin{center} + \includegraphics[height=0.6\textheight]{flushattacks/flushhit1} + + \emoji{stopwatch} \sim{160 cycles} + \end{center} + \end{columns} + } +\end{frame} + +\begin{frame}{Problématique} + \begin{itemize} + \item<1-> La différence de temps est moindre + \item<2-> La décision de \textit{hit} ou \textit{miss} demande une bonne précision + \item<3-> Le mieux est de calibrer par paire de coeurs, et pour chaque \textit{slice} + % Cela a été fait en \textit{reversant} les messages échangés pour des machines à 1 socket, on va proposer une analyse pour des machines à 2 sock. + \end{itemize} + %Objectif +\end{frame} + +\begin{frame}{Protocole expérimental} + \center{ + \includegraphics[height=0.15\textheight]{logo-Grid5000} + + \vspace{4em} + + \includegraphics[height=0.1\textheight]{logo-Kadeploy} + } + %Protocole expérimental +\end{frame} + +\begin{frame}{Premiers résultats} + %Premiers résultats + \begin{figure}[ht] + \centering + \includegraphics[height=0.7\textheight]{hit-slice-bad} + \caption{Premiers résultats sur \textit{paravance} (\textit{hit})} + \end{figure} +\end{frame} + +\begin{frame}{Premiers résultats} + \begin{itemize} + \item<1-> Beaucoup de bruit + \item<2-> La fréquence, fixée avec le profil \textbf{performance} de \texttt{cpufreq} ne l'est pas réellement + \item<3-> L'architecture NUMA change fréquemment les adresses physiques des données + \end{itemize} +\end{frame} + +\begin{frame}{Résultats après rectification} + \begin{figure}[ht] + \centering + \includegraphics[height=0.7\textheight]{hit-slice-good} + \caption{Nouveaux résultats sur \textit{paravance} (\textit{hit})} + \end{figure} + +\end{frame} + +\begin{frame}{Modèle \ang{miss}} + %Modèle miss, chemin de pensée + \begin{itemize} + \item Ne dépend pas du coeur de la victime + \item Le temps minimal à \textit{slice} fixée est croissant selon + la distance à l'autre \textit{socket} dans le sens horaire + \item Les variations restantes indiquent le chemin suivant + \end{itemize} + \center{ + \includegraphics[scale=0.5]{pattern-hor} + } +\end{frame} + +\begin{frame}{Modèle \ang{miss}} + \begin{enumerate} + \item Le coeur attaquant contacte la \ang{slice} locale en suivant le chemin précédent + \item La \ang{slice} locale contacte la \ang{slice} distante en passant par le QPI. + Le trajet de la \ang{slice} locale au QPI se fait dans le sens horaire, + celui du QPI à la \ang{slice} distante dans le sens anti-horaire. + \item Si le \ang{Home Agent} distant doit être contacté, cela se fait à ce moment, en faisant + un tour complet de la \ang{socket} pour revenir à la \ang{slice} distante. + \item Le chemin est parcouru à l'envers pour repasser par la \ang{slice} locale jusqu'au coeur attaquant + \end{enumerate} +\end{frame} + +\begin{frame}{Modèle \ang{miss}} + \begin{figure}[ht] + \centering + \includegraphics[scale=0.35]{predicted-miss} + \caption{Prédictions pour un \ang{miss}} + \end{figure} +\end{frame} + +\begin{frame}{Modèle \ang{hit}} + \begin{itemize} + \item<1-> On cherche un modèle cohérent avec le modèle des \ang{miss}, + car le fonctionnement initial doit être le même ; + \item<2-> Le temps d'exécution pour un \ang{hit} dépend largement du fait d'être inter-\ang{socket}, donc si la première \ang{slice} contactée contient la ligne en cache, tout semble s'arrêter. + \end{itemize} +\end{frame} + + +\begin{frame}{Modèle \ang{hit}} + \begin{center} + Cela suggère le modèle suivant: + + \vspace{3em} + + \includegraphics[scale=0.7]{model-hit} + \end{center} +\end{frame} + +\begin{frame}{Modèle \ang{hit}} + \begin{figure}[ht] + \centering + \includegraphics[scale=0.18]{predicted-remote-hit-cut} + \caption{Prédictions pour un \ang{hit} au sein de \ang{sockets} différents} + \end{figure} +\end{frame} + +\begin{frame}{Pistes pour la suite} + +\end{frame} + +\end{document} diff --git a/rapport.tex b/rapport.tex index 2120732..80a55a0 100644 --- a/rapport.tex +++ b/rapport.tex @@ -504,7 +504,7 @@ tout en maîtrisant les principales sources de bruit. Plusieurs pistes se proposent alors pour continuer le travail présenté ici : \begin{itemize} - \item Affiner le modèle, qui nes't pas parfait sur les \ang{cache miss} et ne colle pas + \item Affiner le modèle, qui n'est pas parfait sur les \ang{cache miss} et ne colle pas bien aux \ang{cache hit}. On pourrait ensuite voir comment celui-ci s'étend aux autres états de cohérrence de cache ; \item Clarifier les hypothèses avancées dans ce rapport en effectuant certaines vérifications :