% Copyright (c) 2014,2016,2018 Casper Ti. Vector % Public domain. \chapter{绪论}\label{sec:intro} 本章首先介绍论文的选题背景,然后介绍论文的研究平台和环境,最后介绍论文的组织结构。 \section{选题背景与研究意义} 现代微处理器使用了超标量流水线、乱序执行等设计,通过利用程序内的指令级 并行性,掩盖指令的延迟的方法,提高处理器的指令执行效率。 乱序执行是处理器对指令进行动态调度的技术,它允许一条指令在满足数据依赖 后即可进入执行单元执行,而无需等待程序序列之前的指令。在乱序执行处理器 中,处理器存在多个不同的执行单元,用于同时处理多个指令。处理器使用 Tomasulo 算法\supercite{tomasulo},可以识别指令之间的依赖关系,允许无 依赖关系的指令并行执行。 在乱序执行中,指令可以不按程序序列改变体系结构状态,在指令执行发生异常 时,发生异常之后的指令可能已经执行,使得处理器无法在处理异常后,恢复异 常发生时的体系结构状态。为了解决这个问题,处理器需要支持精确中断。现代 处理器通常使用重排序缓冲区(ROB)\supercite{preciseint}实现精确中断, 它使得指令按序提交至体系结构状态中,如果异常发生,则丢弃未提交的指令的 结果。 超标量处理器设计允许处理器平均每周期执行多于一条指令,它可以在一周期内 同时分发多个指令至不同的执行单元,进一步开发了程序的指令级并行性。 程序中除了数据相关之外,还存在控制相关。程序中存在大量的分支指令,等待 分支指令执行,则后续指令在分支指令执行期间均无法执行,降低了执行单元的 利用率,导致总体性能下降。因此现代微处理器使用了推测式执行技术,在分支 指令执行结束前,根据分支预测的结果,执行预测将要执行的指令。分支预测需 要预测分支的方向和目标地址。处理器使用分支目标缓冲器(BTB)预测分支指令 的方向和目标地址\supercite{btb}。为了预测函数调用的返回地址,处理器还使 用栈结构的返回栈缓冲器(RSB)\supercite{rsb}。 为了开发出多任务系统的线程级并行性,部分处理器使用了多线程技术,使得一 个处理器核可以执行多个线程。同时多线程(SMT)\supercite{smt}是一种多线 程技术,它对超标量处理器做了少量修改,使得多个线程可以共用一组执行单元, 提高执行单元的利用率。 \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{skylake.pdf} \caption{Skylake 微体系结构示意图\supercite{mdsattack}} \label{fig:skylake} \end{figure} 图\ref{fig:skylake}是 Intel Skylake 微体系结构的示意图,它是一个乱序执行超标 量处理器微体系结构,每周期最多可以将 6 个微操作发射至 8 组执行单元中执行, 它的 ROB 使得流水线中可以同时存在 224 个微操作,它的分支预测器可以预测 分支的方向和目标地址,使处理器在预测的目标处取出指令至指令缓存。 2018 年公布的“熔断”(Meltdown)\supercite{meltdown}和“幽灵”(Spectre) \supercite{spectre} 攻击使人们发现,虽然处理器在执行指令产生异 常,或推测式执行错误后,通过恢复可以使体系结构层次上的状态保持正确,但 是这些错误执行的指令在微体系结构中产生了副作用,并且可能泄露系统中的秘 密数据,破坏了系统的安全。在 Meltdown 和 Spectre 之后,研究者发现了更 多相似的攻击种类,包括 Foreshadow\supercite{foreshadow}、 Fallout\supercite{fallout}、RIDL\supercite{ridl}、 ZombieLoad\supercite{zombie}。 面对这些新型攻击,Intel、AMD、ARM 等处理器设计厂商,和 Google、 Microsoft 等软件厂商,均发布了软件补丁或处理器微码更新,用于减轻这些攻 击的威胁。Intel 在后续的处理器中,也在硬件上对一些攻击做出了防御 \supercite{intel-9900k}。当前的基于软件的防御方法,均对性能造成一定的 损失,并且通常无法防御更新的攻击手段。表\ref{tab:perf_mitigation}列出 了部分已有的软件和微码防御方法,它们所防御的攻击,和造成的性能损失。 \supercite{systematic} \begin{table}[hptb] \caption{软件防御对性能的影响} \begin{tabular}{ccc} \hline 防御方法 & 防御的攻击种类 & 性能损失\tabularnewline \hline KAISER & Meltdown & 0-2.6\%\tabularnewline Retpoline & Spectre v2 & 5\%-10\%\tabularnewline IBRS/IBPB/STIPB & Spectre v2 & 20\%-50\%\tabularnewline SSBD/SSBB & Spectre v4 & 2\%-8\%\tabularnewline 串行化指令 & Spectre v1 & 62\%\tabularnewline 推测式装载加固 & Spectre v1 & 29\%\tabularnewline \hline \end{tabular} \centering \label{tab:perf_mitigation} \end{table} 因此,通过改进微体系结构的设计,低开销地防御 Meltdown 和 Spectre 攻击, 具有重要的研究意义。本文的目标是设计一种微体系结构,防御 Spectre 攻击。 \section{研究平台与环境} 本文使用 Gem5 模拟器\supercite{gem5}作为研究平台。 Gem5 是一个模拟平台,由 GEMS\supercite{gems} 和 M5\supercite{m5} 两个 模拟器项目合并而成,同时具有这两个模拟器的优点。M5 提供了一个可配置的 框架,支持多种指令系统和多种 CPU模型,GEMS 则提供了一个详细而灵活的存 储系统,支持多种缓存一致性模型和互联模型。Gem5 支持 x86, ARM, Alpha, MIPS, RISC-V 等指令系统。作为一个开源的模拟器,学术界和工业界都为 Gem5 的开发做出贡献,使得 Gem5 成为体系结构研究中最流行的模拟器之一。 \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{gem5_cpu.pdf} \caption{Gem5 支持的 CPU 模型\supercite{gem5-tutorial}} \label{fig:Gem5_cpu} \end{figure} Gem5 的灵活性使得研究者可以根据需要选择不同的系统模型,取得模拟速度和精 度的平衡。Gem5 支持以下模型的配置: \begin{enumerate} \item CPU 模型:如图\ref{fig:Gem5_cpu},Gem5 支持多种不同的 CPU 模 型。AtomicSimpleCPU 模拟一个单周期处理器,模拟速度最 快。TimingSimpleCPU 在此之上增加对存储访问时间的模拟。O3CPU 则是一个 详细的乱序执行处理器模型。此外,Gem5 还支持使用 KVM 虚拟化技术模 拟 CPU 的执行。 \item 系统模式:Gem5 可以用系统调用模拟(SE)和全系统(FS)两种模式进行 模拟,前者模拟大多数的系统调用,无需对操作系统和设备进行模拟,而后者 则模拟了操作系统和设备,同时执行用户态和内核态的指令。 \item 存储系统:Gem5 包含两种存储系统模型,来自 M5 的 Classic 模型容易 配置且模拟速度快,而来自 GEMS 的 Ruby 模型则提供了一个可以精确模拟缓 存一致性模型的存储系统模拟框架。 \end{enumerate} Gem5 模拟器使用 C++ 编写,并集成了 Python,模拟器的核心功能由 C++ 实现, 而 Python 用于初始化、配置和控制模拟器。为了支持多种指令系统和缓存一致 性协议,Gem5 分别使用了两种领域专用语言,指令系统描述语言 和 SLICC 在 Gem5 构建时转为 C++ 代码并编译,生成指令系统和缓存一致性协议 的模型代码。 最新的 Gem5 还支持功耗的模拟,和 SystemC 协同模拟,同构和异构多核模拟 等特性。 \section{论文组织结构} 本文的组织结构如下: 第一章~\nameref{sec:intro}。阐述本文的选题背景和研究意义、研究平台与环境,并简述论文 的组织结构。 第二章~\nameref{sec:attack}。分析已经发现的 Meltdown 和 Spectre 攻击的各个变体。 第三章~\nameref{sec:defense}。对已经提出的 Meltdown 和 Spectre 攻击的软硬件防御方法进行分析。 第四章~\nameref{sec:mywork}。提出本文所设计的防御 Spectre 攻击的方法,并描述在 Gem5 模拟器上的实现。 第五章~\nameref{sec:eval}。对本文设计的 Spectre 防御方案,进行安全性的 验证和性能分析。 第六章~\nameref{sec:conclusion}。总结本文的主要工作和研究意义,并对未来工作进行展望。 % vim:ts=4:sw=4