是否可以将比EPC内存更大的程序加载到安全区?理论上我觉得这是允许的,因为
EEXTEND
以256字节递增地测量一个安全区因此从理论上讲,似乎可以只使用一页EPC内存来加载一个大程序:
我在理论上是否正确理解?虽然在实践中,我在加载大型程序时立即收到错误。
答案 0 :(得分:3)
我在英特尔论坛上问了一个类似的问题。摘要[1]很有帮助。
简短回答:不,你现在不能加载比EPC更大的飞地。
由于目前缺乏寻呼支持(并且缺乏v2将提供的动态页面分配),这意味着同时加载的所有包围区的组合HeapMaxSize不能超过〜90MB。 [1]
答案很长:在SGX中有两种动态内存管理机制:
那你为什么不装载比EPC更大的飞地?
因此,您的飞地必须在当前硬件上使用低于90MB的堆大小。我已经尝试过SDK仿真,并发现它允许堆最大大小约为1GiB [2]。未来的OS版本有望支持EPC页面交换,允许更大的静态飞地大小。未来的SGX硬件将允许动态页面分配,允许动态飞地大小。
[1] https://software.intel.com/en-us/forums/intel-isa-extensions/topic/607004#comment-1857071
[2] 1GiB - 64KiB - TCSnum * 128KiB,其中TCSnum是线程数。超过此HeapMaxSize会导致模拟错误
答案 1 :(得分:2)
此处的研究员,与英特尔SGX合作。
我只想补充一点,Linux确实支持上面提到的机制 2),允许页面加密并换成常规DRAM。 这有效意味着你原来的问题是。 Linux能够创建任意大小的飞地。然而,在其目前的形式(v1)中,一旦飞地最终确定,尺寸可能不会扩大。
至于这是否是一个好主意,答案肯定是否定的。将扩展区域扩展到EPC的大小以上会导致大量昂贵的页面故障,从而显着降低性能。