应用内存超售在虚拟化环境中优化SGX的性能

2022-02-21 10:42姚旭佳吴新月
微型电脑应用 2022年1期
关键词:监视器驱动程序虚拟化

姚旭佳, 吴新月

(上海交通大学,软件学院,上海 200240)

0 引言

越来越多的云用户寻求安全技术来保护云中的数据和代码,这促进了英特尔SGX在云环境中的广泛应用。通过提供称为enclave的可信执行环境,SGX实现数据保密性和完整性。enclave数据和代码存储在称为“enclave页缓存”(EPC)的特殊内存区域。EPC的内容是加密的,并且仅在enclave内的线程中可见。但EPC大小最多可配置为256 MB。为了支持大于该大小的enclave,在EPC内存管理中应用了分页。虚拟机(Virtual Machine)是一种特殊的软件,简称VM,可以模拟出完整的计算机系统,是云厂商向用户提供服务的方式,用户的应用都运行在VM中。目前,EPC资源静态地划分在多个VM之间,静态分配的EPC资源无法适应VM动态变化的需求,导致EPC资源利用不足。

本文介绍了EPC超售的设计与实现。结合下面2个机制以支持EPC超售:在虚拟机监视器层中执行的分页机制和通过VM层和虚拟机监视器层之间的合作实现的气球机制。这样可以动态分配云中的EPC资源,同时性能开销很少。

本文作出以下贡献。

(1)第一个基于软件的EPC超售的解决方案,几乎没有性能开销。

(2)云环境中enclave的详细性能评估。EPC超售机制可使Memcached平均吞吐量最高提高49.2%。

1 背景介绍

近年来,围绕英特尔SGX技术在虚拟化环境中的研究有所增加[1-4]。用户发现enclave很难在虚拟化环境中实现与物理机器相同的性能。EPC的规模限制在256MB。虽然通过分页支持大于该大小的enclave,但引入了大量性能开销。目前,EPC资源只能在多个VM之间静态分区,分配给VM的EPC部分在启动时确定,在其生命周期内无法更改。因此每个VM的可用资源可能小于EPC总数。EPC资源减少导致昂贵的分页程序会更频繁地被触发。此外,当整个EPC资源已分配给其他VM时,不可能在SGX支持下创建新的VM,导致SGX的灵活性有限。

为了解决这个问题,EPC资源可以以类似于内存的方式超售。内存超售是一种广泛应用于虚拟化场景的技术,它使内存能够在多个虚拟机中动态分配。使用超售内存,虚拟机监视器可以从闲置的VM中回收内存页面,并将它们分配给另一个VM。当EPC以类似方式超售时,可以更好地利用和提高虚拟化场景中的enclave性能。然而,与内存资源相比,EPC作为一种特殊类型的内存,管理起来要复杂得多。如何通过高效科学的方式在虚拟化环境中超售EPC资源是一个待解决的问题。

2 系统架构

EPC超售的架构如图1所示。

图1 EPC超售整体架构

EPC超售通过2种机制实现:在分页单元内实现的分页机制和基于气球驱动程序和气球监测器实现的气球机制。分页单元通过将EPC页面交换出去和交换进来管理EPC资源。分配给VM的物理EPC页面中的内容可以通过分页单元逐出到常规内存中,因此物理EPC页面已被释放,将来可以使用,通过缺页故障处理可以直接满足VM的EPC资源需求。此外,由于不需要客户虚拟机的合作,这种机制在大多数情况下是切实可行的。但是,分页机制会引入大的开销,主要来自跟踪页面元数据和页面驱逐。

气球监视器计算每个VM的EPC部分,并要求VM通过通信渠道调整使用的虚拟EPC的大小。气球驱动程序将标记一些虚拟页面无法使用,以限制对这些页面的访问,然后可以安全地回收映射到这些页面的物理EPC资源。由于虚拟机监视器不涉及分页程序,气球机制比分页机制效率更高。虚拟机监视器只是显示虚拟机可以使用多大的虚拟EPC,然后虚拟机做分页来释放一些资源。由于VM更接近应用程序,他们拥有更多有关EPC使用的信息,因此在驱逐期间可以做出更好的选择。然而,由于气球机制需要客户VM合作,因此在任何时候都是不可行的。恶意VM可能会拒绝响应虚拟机监视器的请求,因此虚拟机监视器无法回收物理EPC资源。或者,VM处于重负荷下无法及时响应。虚拟机监视器无法及时获得物理EPC资源,其他VM可能会饥饿甚至崩溃。

气球机制结合分页机制可以应对恶意和无响应的虚拟机。对于图1,恶意的VM-2可以拒绝配合气球机制。在这种情况下,EPC资源可以基于分页机制实现对VM的透明性,这样管理EPC资源不需要VM配合,虽然VM-2禁用气球驱动程序,分配给它的物理EPC页面仍然可以回收。

3 挑战与解决方案

3.1 跟踪EPC的层次结构

EPC页面具有不同的类型并相互连接。一些页面仅包含enclave代码和数据,称为常规页面。对于每个enclave,有一个安全enclave控制结构(SECS)页面,记录常规页面的元数据。

EPC管理器必须跟踪页面结构信息,以便进行页面的换进换出。一个简单的策略是捕获所有SGX指令,然后虚拟机监视器可以清楚地查看EPC的使用情况和EPC布局,但是这样性能成本高。为了降低成本,需要减少被捕获指令的数量,如表1所示。

表1 Intel SGX的EPC管理指令

在表1中,SGXv1中有9个指令对EPC布局有影响,我们只捕获其中3个指令,性能开销小。可以这样做的原因是即使元数据不完整,虚拟机监视器也能管理EPC资源,SGX指令的返回值暴露了EPC布局的信息,这些信息可以用来补充记录的元数据。

3.2 处理页面驱逐中的冲突

驱逐EPC页面时为了安全,首先通过EBLOCK阻止创建常规EPC页面的新映射,再用ETRACK检查TLB状态,用EWB加密页面内容并将页面逐出到常规内存。当VM和虚拟机监视器对同一范围的EPC执行驱逐时(称为双分页),可能会发生冲突。于是,列出了所有可能的冲突和解决方案。

(1)重复阻塞页面。当VM和虚拟机监视器都尝试驱逐相同的EPC页面时,后来的EBLOCK将失败并返回错误。如果虚拟机监视器失败,则忽略此错误并继续驱逐EPC页面;如果VM失败就放弃驱逐。

(2)并发执行EBLOCK和ETRACK /EWB。这时EBLOCK可能会失败,ETRACK/EWB可能会触发一般保护故障。如果EBLOCK在虚拟机监视器层中失败,虚拟机监视器将反复重试;如果EBLOCK在VM层中失败,VM将放弃驱逐。如果ETRACK和EWB因并发访问而失败,则反复重试。

(3)并发执行ETRACK。这会触发保护错误,解决方案是直接重试。

上述解决方案的一个限制是需要更改VM层中的SGX驱动程序,不过修改量不大。

4 性能测试

测试EPC超售对于内存密集型应用的性能,具体配置如表2所示。

表2 混合负载配置

Memcached的测试分两个阶段,第一个阶段是插入100 000个元素初始化;另一个是运行阶段,200 000个操作产生ycsb-a工作负载。每个元素都有20B大小的键和1KB大小的值。Memcached中有4个工作线程,还有一个计时器线程每50 ms计算平均吞吐量。快速排序是对一个随机生成的数组排序。

Memcached在没有快速排序运行的情况下的表现如图2所示。

图2 没有快速排序运行下的Memcached性能

基线是静态分区策略下的性能。EPC超售的平均吞吐量比基线高49.2%。

对于Memcached和QuickSort的混合工作负载如图3所示。

图3 Memcached和QuickSort混合工作负载下的性能

EPC资源竞争加剧导致EPC超售的吞吐量从9 800万ops/s降至4 400万ops/s。但是,EPC超售仍优于基线,节省13.7%的执行时间。

5 相关工作

5.1 SGX内存管理

Eleos[5]通过应用级分页管理SGX内存,需要修改源代码,而EPC超售对应用程序是透明的。虽然相关厂商提供了专为EPC超售设计的新硬件功能[6],但是这些功能目前无法使用,而我们的解决方案仅涉及软件修改。

5.2 内存超售

关于内存超售有大量的研究[7],但EPC管理比常规内存管理更为复杂。

6 总结

本文提出了EPC超售的分页机制和气球机制,测试结果显示,EPC超售比静态分区有显著的性能提升。

猜你喜欢
监视器驱动程序虚拟化
阻止Windows Update更新驱动程序
基于OpenStack虚拟化网络管理平台的设计与实现
计算机硬件设备驱动程序分析
对基于Docker的虚拟化技术的几点探讨
深耕广电,时代奥视监视器“花香遍墙内外”
浅谈虚拟化工作原理
用户怎样选择虚拟化解决方案
妙用鼠标驱动
驱动程序更新与推荐