Skip to content

Latest commit

 

History

History
51 lines (36 loc) · 1.96 KB

resource_config_guide.md

File metadata and controls

51 lines (36 loc) · 1.96 KB

Resource Configuration Guide

Due to SGX hardware limitations, Occlum needs users' assistance to specify some resource limits or hints in Occlum.json. These configuration values must be tuned on a per-application basis.

If you already know the memory usage of your application, set the memory usage in the process field. Otherwise, use the default configuration file generated after occlum init. During the tuning process, the log of Occlum should be turned on by setting the OCCLUM_LOG_LEVEL environment variable (e.g., OCCLUM_LOG_LEVEL=error, OCCLUM_LOG_LEVEL=info).

To make the tuning process smooth, some troubleshooting instructions are listed below. They can cover common types of errors resulting from the lack of resources.

  1. Mmap syscall error:

    • Error message: [____Mmap] Error = ENOMEM (#12, Out of memory): not enough memory

    • Solution: Enlarge process.default_mmap_size

  2. Brk syscall error:

    • Error message: [_____Brk] Error = EINVAL (#22, Invalid argument): New brk address is too high

    • Solution: Enlarge process.default_heap_size

  3. Process creation error:

    • Error message: ENOMEM (#12, Out of memory): run out of reserved memory

    • Solution: Enlarge resource_limits.user_space_size

  4. Malloc of Rust SDK error:

    • Error message: memory allocation of XXX bytes failed

    • Solution: Enlarge resource_limits.kernel_space_heap_size

  5. SGX protected file I/O error:

    • Error message: SGX protected file I/O error: EIO (#5, I/O error): Cannot allocate memory (os error: 12)

    • Solution: Enlarge resource_limits.kernel_space_heap_size

  6. LibOS thread execution error:

    • Error message: [ERROR] occlum-pal: Failed to enter the enclave to execute a LibOS thread (host tid = XXX): Unknown SGX error

    • Solution: There are many reasons resulting in the above errors. Try to enlarge resource_limits.max_num_of_threads if your application has threads far more than it.