13 KiB
OCCLUM EDMM 配置介绍
EDMM环境要求
- 硬件平台:需要支持SGX-2
- OS: 需要Linux Kernel v6.0及以上版本,目前的开发测试主要使用的是v6.2
EDMM启用方法
EDMM功能默认不启用。如需开启,在Occlum build阶段通过设置ENABLE_EDMM
启用:
ENABLE_EDMM=Y occlum build
occlum run /xxx/xxx
如果未启用,则默认按照非EDMM平台进行build以及配置。
Occlum.json配置
配置设计原则
一份Occlum.json文件可以同时运行在EDMM以及非EDMM平台。并且在EDMM平台能够自动地最大限度地使用EDMM的功能。
EDMM原理
在支持EDMM后,Enclave.xml
对于包括TCS, heap, stack等内存相关配置都提供类似Init
和Max
的两个配置项(有的还有第三个配置项 Min)。它的意义就是可以使得Enclave在启动阶段能够加载比较少的内存,来提高Enclave应用的启动速度。而把其他内存的加载时间平摊在运行时。Occlum.json
由Occlum内部的配置工具转换成Enclave.xml
并作为Enclave的最终配置。为了充分利用EDMM能力,因此也补充了相关的配置项。
总体配置思路大概是:如果希望Occlum启动速度比较快,就配置较少的Init
内存。而当内存不足时,应该增加Max
内存大小。Init
内存作为Occlum启动时加载的内存,不管有没有真正用到都会被加载。Max
内存决定了应用需要的最大内存,即使不用也不会浪费,在运行时进行按需加载。
Occlum.json EDMM相关配置示例
总体是在原有Occlum.json
基础上增加了3个选填字段,包括kernel_space_heap_max_size
, user_space_max_size
, 以及init_num_of_threads
。打开全部EDMM相关配置后的Occlum.json
内存部分配置如下:
{
"resource_limits": {
"kernel_space_stack_size": "1MB", // (已有,必填)
"kernel_space_heap_size": "4MB", // (已有,必填)
"kernel_space_heap_max_size": "40MB", // !!! (新增,选填)
"user_space_size": "1MB", // (已有,必填)
"user_space_max_size": "600MB", // !!! (新增,选填)
"init_num_of_threads": 2, // !!! (新增,选填)
"max_num_of_threads": 64 // (已有,必填)
},
"process": {
"default_stack_size": "4MB", // (已有,必填)
"default_heap_size": "8MB", // (已有,必填)
"default_mmap_size": "100MB" // (已有,必填,但不生效)
},
}
如果没有提供必填项,则occlum build会失败。
详细解释
Kernel Stack
对应Occlum kernel space stack内存, 与原有配置方式保持一致
- 对应
Enclave.xml
文件的StackMaxSize, StackMinSize (大小相同) - 由于该stack只为Occlum kernel thread提供, 因此内存需求并不会很大。一般都在1~4M,并且绝大多数时候都不需要改动。因此不再提供其他配置项
- 推荐配置方式:与之前配置一致,不做修改
Kernel Heap
-
推荐配置方式
User Space
-
推荐配置方式
TCS Number
-
和kernel heap以及user space大小配置不同的是,对于线程数量的配置是增加了对
Init
数量的配置,而保留了原有的Max
数量的配置 -
推荐配置方式
需要注意
-
运行在EDMM平台会自动地最大限度使用EDMM功能。在目前的实现中,即使用户手动配置了
或者
, 也可能会超过这个限制而使用系统提供的
。因此无法通过限制
max_size
来限制应用的最大物理内存用量。由于是按需分配的,这些内存如果没有用到的话,是不会占用物理内存的。 -
如果需要考虑兼容性,即一份
Occlum.json
需要同时运行在EDMM和非EDMM平台,则请勿将Max
相关值(包括)设置的过大。在EDMM平台,由于内存按需提交,过大的
Max
值不影响程序正常运行,也不会造成浪费。但是在非EDMM平台,由于内存全量提交,Max
值配置的比较大会导致LibOS启动速度慢,如果过大甚至会导致加载Enclave失败。 -
环境变量
SGX_MODE
优先级高于ENABLE_EDMM
。即在Simulation模式下无法启用EDMM。 如果同时配置了ENABLE_EDMM=Y SGX_MODE=SIM
则只有SGX_MODE
环境变量生效。 -
用户应尽力避免
occlum build
时对EDMM的配置与occlum run
时实际的EDMM配置冲突。如果occlum build
和occlum run
在不同环境:occlum build
时不启用EDMM,occlum run
时环境支持EDMM: Occlum不会启用EDMM能力,依然按照非EDMM配置运行occlum build
时启用EDMM,occlum run
时环境不支持EDMM: Enclave可以启动,但是由于配置文件的内存用量是按照EDMM环境进行配置的,在非EDMM环境会出现未定义错误。包括可能由于内存不足报错退出或发生panic等