有两种方法可确定最大的围圈大小。
在云环境中,无法检查 BIOS 中的处理器保留内存 (PRM),包括围圈页面高速缓存 (EPC)。
无法使用 英特尔® Software Guard Extensions (英特尔® SGX) SDK 查找飞地的可用内存。
英特尔® Software Guard Extensions (英特尔® SGX) SDK 不提供查找最大围圈大小的方法。英特尔® Software Guard Extensions (英特尔® SGX) SDK 支持您使用围圈配置文件在应用程序中 设置围圈大小 。
有两种方法可以报告处理器上可用的英特尔® Software Guard Extensions (英特尔® SGX) 功能。两个选项都会报告 MaxEnclaveSize,这是虚拟最大的围圈大小。实际最大围圈大小取决于 操作系统或内存限制。
选项 1
在 Linux* 系统上, 在 终端中执行 cpuid:
$ cpuid | grep MaxEnclaveSize
选项 2
使用test_sgx.c:
- 转到 SGX 硬件 Github 并下载文件test_sgx.c 或克隆存储库
- 编译 和 跑 test_sgx.c 根据这些 指示:
$ gcc test-sgx.c -o test-sgx
$ ./test-sgx
MaxEnclaveSize 的说明
如果MaxEnclaveSize0,则平台上未启用 SGX。
如果启用了 SGX,最常见的输出是:
MaxEnclaveSize_Not64: 1f
MaxEnclaveSize_64: 24
- MaxEnclaveSize_Not64:在 64 位模式下,受支持的围圈大小为 2^(EDX[7:0])字节
- MaxEnclaveSize_64:在 64 位模式下运行时,受支持的围圈最大大小为 2^(EDX[15:8])字节。
对于 64 位围圈,该飞地的最大虚拟大小为 2^(0x1f),适用于 32 位和 2^(0x24)。
请参阅 IA 软件开发人员手册第 3d 第 4 部分第 37.7.2 表 37-6 中 CPUID 调用返回的值。