文章 ID: 000089548 内容类型: 产品信息和文件 上次审核日期: 2022 年 08 月 05 日

英特尔® Software Guard Extensions (英特尔® SGX) SDK 是否提供确定围圈最大大小的方法?

BUILT IN - ARTICLE INTRO SECOND COMPONENT
总结

有两种方法可确定最大的围圈大小。

说明

在云环境中,无法检查 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

  1. 转到 SGX 硬件 Github下载文件test_sgx.c克隆存储库
  2. 编译 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 调用返回的值。

本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。