summaryrefslogtreecommitdiff
path: root/chap/chap1.tex
blob: 689616825139646e3f71b7e8163b1ce879d98a59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
% 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 程序完成。
为了支持多种指令系统和缓存一致
性协议,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