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 :