Intel SGX1 指南

Intel SGX1 指南

目前主要负责一个使用Intel SGX技术的项目,我们知道Intel SGX是一个结构和设计都非常复杂的项目,SGX事实上是一系列技术的总称,由以下几个部分组成:

  • CPU/平台硬件特性:CPU全新的指令集(E开头指令集)、PRM(Processor Reserved Memory)中EPC(Enclave Page Cache)(你可以理解为CPU上有个小内存)、内存区域的微架构等新特征
  • SGX远程认证(SGX Remote Attestation):EPID、DCAP鉴证
  • SDK和各种软件:Intel sgxsdk

我的项目主要使用的是EPID远程认证方式,所以程序目前支持的是SGX1认证,同时使用Gramine框架开发enclave内具体应用程序。

机器装配

硬件选择

1、CPU选择:

EPID作为一种最老的认证方式,支持它的CPU型号有如下几种系列:

  • Intel Xeon E
  • Intel Xeon E3
  • Intel® Core™

当然,还有些不在这个系列里面的CPU也是支持EPID的(例如赛扬的一些产品),列举的这些只是日常用的比较多的。

2、主板选择

选用的BIOS厂商务必支持Intel SGX:

​ 前面提到SGX具有全新的硬件平台特性,你的程序要想ECALL、OCALL一些enclave内的方法,那么必须使用一些特殊的指令集里面的指令,作为底层BIOS其必须配合Intel SGX CPU带有适配的CPU微码*(Intel CPU出现漏洞时恢复TCB又是需要你升级BIOS,事实上是需要升级主板上ROM内的Microcode)*。

​ 只有当你的主板支持Intel SGX,你的主板上的CISC、RISC之类的处理器才能协同工作将你上层的汇编转换为特殊的CPU指令。目前基本上主流的主板厂商都支持开启(例如Supermicro),当然如果你足够厉害你可以自己画一个主板并自己build一个BIOS。

机器配置

对于机器的配置有如下几点要求:

1、打开SGX选项

​ 开机的时候进入BIOS界面,打开如下选项

##enable it
Software Guard Extension (SGX)

2、设置PRM大小为128MB

##Platforms vary
Enclave Memory Size

3、以UEFI启动

​ 如果你打开SGX选项的时候选用了software controlled,那么就以这个模式启动。

环境准备

​ 请安装Ubuntu 20.04或者22.04

1、enable SGX

​ 参见:https://github.com/intel/sgx-software-enable

2、升级内核

​ 升级内核到5.11及其以上,我的是5.15

3、申请远程认证SPID

​ 注意2024.09.29之后,Intel将完全移除DEV的SPID,2025.04.02讲彻底禁用EPID,R.I.P。

​ https://api.portal.trustedservices.intel.com/

至此所有的开发的环境准备完成,可以参阅Gramine官方文档开发程序。

使用测试&分析

测试情况

​ 在SGX1运行的enclave内构建了一个grpc服务,该服务可接收一个文件数据,通过该数据计算摘要,对每个请求的计算CPU的算力都会占满。

  • 一次发送1个请求,每个请求发送42MB的文件,计算504MB文件用时:1980.36s
  • 一次发送12个请求,每个请求发送42MB的文件,按到达顺序一个个处理,计算504MB文件总用时:2106.36s
  • 一次发送1个请求,每个请求发送8MB的文件,计算504MB文件总用时:1827s
  • 一次发送63个请求,每个请求发送8MB文件,按到达顺序一个个处理,计算504MB文件总用时:

所以同样处理504MB文件,大而多的内存会让enclave内处理效率显著下滑。

原因分析

  1. 内存限制:在SGX1中,Enclave Page Cache (EPC) 的大小被限制为128MB,所有的enclave都驻留在EPC(enclave page cache)中, 这是系统内一块被保护的物理内存区域,用来存放enclave和SGX数据结构。EPC布局由平台具体实现决定,如果CPU支持SGX架构并在加密保护的DRAM (dynamic random access memory)中实现EPC,那么它也支持BIOS保留一段叫PRM(processor reserved memory)的内存范围。BIOS通过配置一组范围寄存器分配PRM,具体的PRM和EPC布局和平台有关,并取决于BIOS设置

EPC

但是事实上由于要留给其他硬件等数据结构,测试机器使用fortanix的sgx-detect检测后128MB的PRM大概还有93MB用于业务enclave,如果处理大文件或多个请求,可能会导致EPC空间不足,进而触发频繁的EPC换页操作,降低处理效率。换页操作涉及将数据从EPC移出到正常的内存区域,并在需要时将其调回,这些操作都需要额外的时间。

  1. CPU资源占用:每个请求的计算会占满CPU算力。如果请求是顺序处理的,这可能会导致CPU资源在某些时刻成为瓶颈,尤其是在处理多个请求的情况下。

小结

​ SGX1环境下不适合运行占内存较多的程序,运行大内存的时候将会有较大的内存换页成本,这是SGX1的一个问题,所以使用SGX1的时候尽量避免这种情况发生。

参考文献

1.Gramine文档

2.SGX软件启动

3.SGX解释.第58页

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值