On Mon, Oct 16, 2023, Haitao Huang wrote:Maybe I understood the current implementation wrong. From what I see, vEPC is impossible not fully commit at launch time. The guest would EREMOVE all pages during initialization resulting #PF and all pages allocated. This essentially makes "prealloc=off" the same as "prealloc=on".
From this perspective, I think the current implementation is "well-defined":
EPC cgroup limits for VMs are only enforced at VM launch time, not runtime.
In practice, SGX VM can be launched only with fixed EPC size and all those
EPCs are fully committed to the VM once launched.
Fully committed doesn't mean those numbers are reflected in the cgroup. A VM
scheduler can easily "commit" EPC to a guest, but allocate EPC on demand, i.e.
when the guest attempts to actually access a page. Preallocating memory isn't
free, e.g. it can slow down guest boot, so it's entirely reasonable to have virtual
EPC be allocated on-demand. Enforcing at launch time doesn't work for such setups,
because from the cgroup's perspective, the VM is using 0 pages of EPC at launch.