On Wed Aug 21, 2024 at 4:53 AM EEST, Haitao Huang wrote: > From: Kristen Carlson Accardi <kristen@xxxxxxxxxxxxxxx> > > In cases EPC pages need be allocated during a page fault and the cgroup > usage is near its limit, an asynchronous reclamation needs to be > triggered to avoid blocking the page fault handling. > > To keep implementation simple, use a workqueue instead of kthread to > schedule the asynchronous reclamation work. Add corresponding work item and > function definitions for EPC cgroup. > > In sgx_cgroup_try_charge(), if caller does not allow synchronous > reclamation, queue an asynchronous work into the workqueue. > > The current global reclaimer, ksgxd, maintains a threshold for the > minimal free EPC pages to avoid thrashing when allocating EPC pages. > Similarly, only reclaiming EPC pages from the current cgroup when its > usage actually reaches limit could also cause thrashing. To avoid that, > define a similar "per-cgroup usage threshold" and actively trigger > asynchronous per-cgroup EPC reclamation when the usage reaches the > threshold after try_charge() is successful. > > Co-developed-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > Signed-off-by: Kristen Carlson Accardi <kristen@xxxxxxxxxxxxxxx> > Co-developed-by: Haitao Huang <haitao.huang@xxxxxxxxxxxxxxx> > Signed-off-by: Haitao Huang <haitao.huang@xxxxxxxxxxxxxxx> > Tested-by: Jarkko Sakkinen <jarkko@xxxxxxxxxx> Reviewed-by: Jarkko Sakkinen <jarkko@xxxxxxxxxx> BR, Jarkko