\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}
