\chapter{评测}\label{sec:eval} \section{评测环境} 本文对 gem5 模拟器修改,对以下 5 种配置进行评测:Baseline, Fence, Fence+DIFT, IS, IS+DIFT. Baseline 表示受 Spectre 攻击影响的处理器模型, Fence 和 IS 分别表示对所有推测式执行中的 load 指令,推迟执行和用 InvisiSpec的方案执行,Fence+DIFT 和 IS+DIFT 则是使用动态信息流追踪识别 可能泄露秘密数据的 load,只对这些 load 使用相应的安全的执行方案。 表\ref{tab:gem5_conf}中列出了所有处理器配置的基本配置。 \begin{table} \caption{模拟的处理器的基本配置} \label{tab:gem5_conf} \begin{tabular}{|c|c|} \hline 参数 & 配置 \tabularnewline \hline \hline 指令系统 & x86\_64\tabularnewline \hline \multirow{9}{*}{功能单元} & IntAlu\tabularnewline \cline{2-2} & IntMult + IntAlu\tabularnewline \cline{2-2} & FloatAdd + FloatCmp + FloatCvt\tabularnewline \cline{2-2} & FloatMult + FloatMultAcc + FloatMisc + FloatDiv + FloatSqrt\tabularnewline \cline{2-2} & MemRead + FloatMemRead\tabularnewline \cline{2-2} & SIMD\tabularnewline \cline{2-2} & MemWrite + FloatMemWrite\tabularnewline \cline{2-2} & MemRead + MemWrite + FloatMemRead + FloatMemWrite\tabularnewline \cline{2-2} & IprAccess\tabularnewline \hline 提交宽度 & 8\tabularnewline \hline ROB & 192\tabularnewline \hline LDQ & 32\tabularnewline \hline STQ & 32\tabularnewline \hline 发射队列大小 & 64\tabularnewline \hline 转移预测 & TournamentBP, 4096 BTB, 16 RAS\tabularnewline \hline L1 I-Cache & 32KB, 4路组相联, 1周期延迟\tabularnewline \hline L1 D-Cache & 64KB, 8路组相联, 1周期延迟\tabularnewline \hline L2 Cache & 2MB, 16路组相联, 8周期延迟\tabularnewline \hline \end{tabular} \end{table} \section{评测指标} 本文评测每种微架构设计的安全性和性能。安全性表现为是否受 Spectre 攻击的 影响,本文构造测试程序测试微架构的安全性。性能指标使用每个微架构设计运 行基准程序,和 Baseline 的运行时间的比值,平均性能取这些比值的几何平均 数。 \section{评测结果与分析} \subsection{微架构安全性测试} 本文构造一个测试程序对每种配置的处理器进行安全性的测试,用于验证实现的 方案可以防御 Spectre 攻击。 由于 gem5 的 Ruby 存储模型不支持 clflush 指令,因此测试程序使 用Evict+Reload 的方式进行攻击。由于配置的系统末级缓存为 2MB,可以对一 个2MB 的存储区域进行访问,以清除缓存内原有内容,具体代码可 见附件\ref{lst:poc_for_gem5}。 在此验证程序中,攻击者要通过受害者执行的函数 victim 的推测式执行泄 露 victim 在正常执行中无法访问的 X 的值。攻击者先训练 victim 的分支预测 器,清除缓存中原有的内容,之后我们设置 X 为 123,然后攻击者再让 victim 执行访问 X,最后扫描 array2 检查其中是否有元素在缓存中命中。 在 Baseline 配置中,执行上述程序,可以看到 \verb|array2[123 * 64]| 在 缓存中命中,在 array2 的其他位置缓存缺失,从而攻击者可以通过 Spectre 攻击得到 X 的值 123. 而在其他配置中,array2 的所有位置都发生缓存缺失, 从而攻击者无法得出 X 的值,说明这些配置都能防御 Spectre 攻击。 \subsection{SPEC CPU2006的性能评测} 本文对 21 个 SPEC CPU2006 基准测试进行评测,基准测试的数据集使用 ref 集。所有的基准程序均用 GCC 8.3.0 编译,编译优化选项为 -O2,并且和 Glibc 2.24 静态链接。 由于 gem5 模拟器运行 SPEC CPU2006 所需时间过长,因此评测时选取部分指令, 方法是先用 gem5 的 AtomicSimpleCPU 运行 10000000000 条指令进行程序的预 热,再用待评测的处理器配置运行 1000000000 条指令,得出评测结果。 %% 表\ref{tab:spec2006}中列出每个 SPEC CPU2006 在 Baseline 模式下运行的指 %% 令数和操作数,在其他处理器配置下,实际运行的指令数可能有增加或减少,相 %% 应的操作数也有增加或减少。 %% \begin{table} %% \begin{tabular}{|c|c|c|c|} %% \hline %% 基准测试程序 & 类型 & 指令数 & 操作数\tabularnewline %% \hline %% \hline %% 401.bzip2 & int & 1000000015 & 1607899217\tabularnewline %% \hline %% 429.mcf & int & 1000000012 & 1308544223\tabularnewline %% \hline %% 445.gobmk & int & 1000000014 & 1932674840\tabularnewline %% \hline %% 456.hmmer & int & 1000000013 & 1980694497\tabularnewline %% \hline %% 458.sjeng & int & 1000000010 & 1827828221\tabularnewline %% \hline %% 462.libquantum & int & 1000000011 & 1714852019\tabularnewline %% \hline %% 464.h264ref & int & 1000000017 & 1545541668\tabularnewline %% \hline %% 471.omnetpp & int & 1000000011 & 1971636254\tabularnewline %% \hline %% 473.astar & int & 1000000010 & 1702905457\tabularnewline %% \hline %% 410.bwaves & fp & 1000000011 & 1839010239\tabularnewline %% \hline %% 433.milc & fp & 1000000018 & 1285963875\tabularnewline %% \hline %% 434.zeusmp & fp & 1000000014 & 1524235186\tabularnewline %% \hline %% 435.gromacs & fp & 1000000013 & 1630938771\tabularnewline %% \hline %% 436.cactusADM & fp & 1000000014 & 1320986203\tabularnewline %% \hline %% 437.leslie3d & fp & 1000000010 & 1415843900\tabularnewline %% \hline %% 444.namd & fp & 1000000009 & 1333316425\tabularnewline %% \hline %% 450.soplex & fp & 1000000013 & 1664925057\tabularnewline %% \hline %% 454.calculix & fp & 1000000010 & 1691328153\tabularnewline %% \hline %% 459.GemsFDTD & fp & 1000000014 & 1320385828\tabularnewline %% \hline %% 470.lbm & fp & 1000000011 & 1191402714\tabularnewline %% \hline %% 482.sphinx3 & fp & 1000000016 & 1618883137\tabularnewline %% \hline %% \end{tabular} %% \caption{SPEC CPU2006 各基准程序的指令数和操作数} %% \label{tab:spec2006} %% \end{table} 图\ref{fig:is_spec06_result}是每种配置的处理器运行 SPEC CPU2006 相对于 Baseline 的运行时间。 \begin{figure}[htbp] \centering \includegraphics[width=\textwidth]{result.eps} \caption{每种配置的处理器运行 SPEC CPU2006 的相对运行时间} \label{fig:is_spec06_result} \end{figure} 从评测结果可以看出,在使用 DIFT 识别可能泄露数据的 load 指令后,推迟这 些指令的执行,有 15\% 的性能开销,平均性能开销比 InvisiSpec 小。在此基 础上,用 InvisiSpec 的方案执行这些 load 指令,可以进一步将性能开销减少 至 8.5\%. 其中在 IS+DIFT 方案中,有 12 个基准程序的性能开销在 3\% 以下, 6 个在 10\% 至 20\%. 性能开销最大的是 omnetpp, 所有安全的方案都会造成 94\% 以上的性能开销。 为了观察使用基于信息流追踪的检测机制的效果,可以统计 IS 和 IS+DIFT 方 案中 SpecLoad 请求的数量。 \begin{table} \center \begin{tabular}{|c|c|c|c|} \hline 基准测试 & IS & IS+DIFT & SpecLoad 减少量\tabularnewline \hline \hline astar & 592665385 & 337046726 & 43.13\%\tabularnewline \hline bwaves & 197767307 & 4175863 & 97.89\%\tabularnewline \hline bzip2 & 194937438 & 88235308 & 54.74\%\tabularnewline \hline cactusADM & 6789192 & 1730316 & 74.51\%\tabularnewline \hline calculix & 167229407 & 51778868 & 69.04\%\tabularnewline \hline GemsFDTD & 82999260 & 1731800 & 97.91\%\tabularnewline \hline gobmk & 243636621 & 50238751 & 79.38\%\tabularnewline \hline gromacs & 12385627 & 899474 & 92.74\%\tabularnewline \hline h264ref & 83954284 & 14540555 & 82.68\%\tabularnewline \hline hmmer & 188615797 & 95542441 & 49.35\%\tabularnewline \hline lbm & 16619502 & 4 & 100.00\%\tabularnewline \hline leslie3d & 84725917 & 1497323 & 98.23\%\tabularnewline \hline libquantum & 34125171 & 4306 & 99.99\%\tabularnewline \hline mcf & 138128311 & 27634366 & 79.99\%\tabularnewline \hline milc & 41388836 & 1224233 & 97.04\%\tabularnewline \hline namd & 35643072 & 11144890 & 68.73\%\tabularnewline \hline omnetpp & 117181327 & 38237525 & 67.37\%\tabularnewline \hline sjeng & 241108901 & 49780302 & 79.35\%\tabularnewline \hline soplex & 161218472 & 77026596 & 52.22\%\tabularnewline \hline sphinx3 & 107409895 & 22898074 & 78.68\%\tabularnewline \hline zeusmp & 102149604 & 431352 & 99.58\%\tabularnewline \hline \end{tabular} \caption{DIFT 对 SPEC CPU2006 各基准测试的效果} \label{tab:specload} \end{table} 可以看出,几乎所有的基准程序中,DIFT 可以过滤一半以上被认为不安全的装 载操作,其中 bwaves, GemsFDTD, libquantum, milc 中,推测式执行中的装载 指令只有 3\% 以下需要用安全的方式执行,因此使用 Fence+DIFT 即可以获得 与 Baseline 几乎同等的性能。在 IS+DIFT 性能开销最大的 omnetpp 中, SpecLoad 的数量只减少了 67\%,而性能开销接近 20\% 的 calculix 和 astar, SpecLoad 减少的数量也在 70\% 以下。 %\Todo: 评测结果的分析 \section{本章总结} 本章先介绍了评测环境,列出了各个处理器配置的基本参数。其后给出了评测指 标,包括安全性的测试和性能测试的指标。最后给出了安全测试的方法和结果, 以及用 SPEC CPU2006 进行性能评测得出的性能结果与分析。