All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Haitao Huang" <haitao.huang@linux.intel.com>
To: "hpa@zytor.com" <hpa@zytor.com>,
	"tim.c.chen@linux.intel.com" <tim.c.chen@linux.intel.com>,
	"linux-sgx@vger.kernel.org" <linux-sgx@vger.kernel.org>,
	"x86@kernel.org" <x86@kernel.org>,
	"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
	"jarkko@kernel.org" <jarkko@kernel.org>,
	"cgroups@vger.kernel.org" <cgroups@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"mkoutny@suse.com" <mkoutny@suse.com>,
	"tglx@linutronix.de" <tglx@linutronix.de>,
	"Mehta, Sohil" <sohil.mehta@intel.com>,
	"tj@kernel.org" <tj@kernel.org>,
	"mingo@redhat.com" <mingo@redhat.com>,
	"bp@alien8.de" <bp@alien8.de>, "Huang, Kai" <kai.huang@intel.com>
Cc: "mikko.ylinen@linux.intel.com" <mikko.ylinen@linux.intel.com>,
	"seanjc@google.com" <seanjc@google.com>,
	"anakrish@microsoft.com" <anakrish@microsoft.com>,
	"Zhang, Bo" <zhanb@microsoft.com>,
	"kristen@linux.intel.com" <kristen@linux.intel.com>,
	"yangjie@microsoft.com" <yangjie@microsoft.com>,
	"Li, Zhiquan1" <zhiquan1.li@intel.com>,
	"chrisyan@microsoft.com" <chrisyan@microsoft.com>
Subject: Re: [PATCH v10 12/14] x86/sgx: Turn on per-cgroup EPC reclamation
Date: Mon, 08 Apr 2024 13:03:41 -0500	[thread overview]
Message-ID: <op.2lw8gfg2wjvjmi@hhuan26-mobl.amr.corp.intel.com> (raw)
In-Reply-To: <d25dbe76d48a0b6c74fa09b06f1ca3fdf234a190.camel@intel.com>

On Mon, 08 Apr 2024 07:20:23 -0500, Huang, Kai <kai.huang@intel.com> wrote:

>
>> --- a/arch/x86/kernel/cpu/sgx/epc_cgroup.h
>> +++ b/arch/x86/kernel/cpu/sgx/epc_cgroup.h
>> @@ -28,6 +28,10 @@ static inline int sgx_cgroup_try_charge(struct  
>> sgx_cgroup *sgx_cg, enum sgx_recl
>>  static inline void sgx_cgroup_uncharge(struct sgx_cgroup *sgx_cg) { }
>>
>>  static inline void sgx_cgroup_init(void) { }
>> +
>> +static inline void sgx_cgroup_reclaim_pages(struct misc_cg *root,  
>> struct mm_struct *charge_mm)
>> +{
>> +}
>>  #else
>>  struct sgx_cgroup {
>>  	struct misc_cg *cg;
>> @@ -65,6 +69,9 @@ static inline void sgx_put_cg(struct sgx_cgroup  
>> *sgx_cg)
>>
>>  int sgx_cgroup_try_charge(struct sgx_cgroup *sgx_cg, enum sgx_reclaim  
>> reclaim);
>>  void sgx_cgroup_uncharge(struct sgx_cgroup *sgx_cg);
>> +bool sgx_cgroup_lru_empty(struct misc_cg *root);
>> +bool sgx_cgroup_should_reclaim(struct sgx_cgroup *sgx_cg);
>> +void sgx_cgroup_reclaim_pages(struct misc_cg *root,  struct mm_struct  
>> *charge_mm);
>
> Seems the decision to choose whether to implement a stub function for  
> some
> function is quite random to me.
>
> My impression is people in general don't like #ifdef in the C file but  
> prefer to
> implementing it in the header in some helper function.
>
> I guess you might want to just implement a stub function for each of the  
> 3
> functions exposed, so that we can eliminate some #ifdefs in the  
> sgx/main.c (see
> below).
>
>>  void sgx_cgroup_init(void);
>>
>>  #endif
>> diff --git a/arch/x86/kernel/cpu/sgx/main.c  
>> b/arch/x86/kernel/cpu/sgx/main.c
>> index 7f92455d957d..68f28ff2d5ef 100644
>> --- a/arch/x86/kernel/cpu/sgx/main.c
>> +++ b/arch/x86/kernel/cpu/sgx/main.c
>> @@ -34,6 +34,16 @@ static struct sgx_epc_lru_list sgx_global_lru;
>>
>>  static inline struct sgx_epc_lru_list *sgx_lru_list(struct  
>> sgx_epc_page *epc_page)
>>  {
>> +#ifdef CONFIG_CGROUP_SGX_EPC
>> +	if (epc_page->sgx_cg)
>> +		return &epc_page->sgx_cg->lru;
>> +
>> +	/*
>> +	 * This should not happen when cgroup is enabled: Every page belongs
>> +	 * to a cgroup, or the root by default.
>> +	 */
>> +	WARN_ON_ONCE(1);
>
> In the case MISC cgroup is enabled in Kconfig but disabled by command  
> line, I
> think this becomes legal now?
>

I'm not sure actually. Never saw the warning even if I set  
"cgroup_disable=misc" in commandlibe. Tried both v1 and v2. Anyway, I  
think we can remove this warning and we handle the NULL sgx_cg now.

>> +#endif
>>  	return &sgx_global_lru;
>>  }
>>
>> @@ -42,7 +52,11 @@ static inline struct sgx_epc_lru_list  
>> *sgx_lru_list(struct sgx_epc_page *epc_pag
>>   */
>>  static inline bool sgx_can_reclaim(void)
>>  {
>> +#ifdef CONFIG_CGROUP_SGX_EPC
>> +	return !sgx_cgroup_lru_empty(misc_cg_root());
>> +#else
>>  	return !list_empty(&sgx_global_lru.reclaimable);
>> +#endif
>>  }
>>
>
> Here you are using #ifdef  CONFIG_CGRUP_SGX_EPC, but ...
>
>>  static atomic_long_t sgx_nr_free_pages = ATOMIC_LONG_INIT(0);
>> @@ -404,7 +418,10 @@ static bool sgx_should_reclaim(unsigned long  
>> watermark)
>>
>>  static void sgx_reclaim_pages_global(struct mm_struct *charge_mm)
>>  {
>> -	sgx_reclaim_pages(&sgx_global_lru, charge_mm);
>> +	if (IS_ENABLED(CONFIG_CGROUP_SGX_EPC))
>> +		sgx_cgroup_reclaim_pages(misc_cg_root(), charge_mm);
>> +	else
>> +		sgx_reclaim_pages(&sgx_global_lru, charge_mm);
>>  }
>
> ... here you are using IS_ENABLED(CONFIG_CGROUP_SGX_EPC).
>
> Any reason they are not consistent?

I was hesitant to expose sgx_global_lru needed for implementing  
sgx_cgroup_lru_empty() stub which would also be a random decision and  
overkill to just remove couple of #ifdefs in short functions.

>
> Also, in the case where MISC cgroup is disabled via commandline, I think  
> it
> won't work, because misc_cg_root() should be NULL in this case while
> IS_ENABLED(CONFIG_CGROUP_SGX_EPC) is true.
>
>>

The misc root cgroup is a static similar to sgx_cg_root. So  
misc_cg_root()  won't be NULL
However, based on how css_misc() was check NULL, I suppose  
sgx_get_current_cg() may be NULL when cgroup is disabled (again not 100%  
sure but we handle it anyway)

>>  /*
>> @@ -414,6 +431,16 @@ static void sgx_reclaim_pages_global(struct  
>> mm_struct *charge_mm)
>>   */
>>  void sgx_reclaim_direct(void)
>>  {
>> +#ifdef CONFIG_CGROUP_SGX_EPC
>> +	struct sgx_cgroup *sgx_cg = sgx_get_current_cg();
>> +
>> +	/* Make sure there are some free pages at cgroup level */
>> +	if (sgx_cg && sgx_cgroup_should_reclaim(sgx_cg)) {
>> +		sgx_cgroup_reclaim_pages(sgx_cg->cg, current->mm);
>> +		sgx_put_cg(sgx_cg);
>> +	}
>> +#endif
>
> This #ifdef CONFIG_CGROUP_SGX_EPC can be removed if we implement a stub  
> function
> for sgx_cgroup_should_reclaim().
>
Yes.
>> +	/* Make sure there are some free pages at global level */
>>  	if (sgx_should_reclaim(SGX_NR_LOW_PAGES))
>>  		sgx_reclaim_pages_global(current->mm);
>>  }
>

Thanks
Haitao

  reply	other threads:[~2024-04-08 18:03 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-28  0:22 [PATCH v10 00/14] Add Cgroup support for SGX EPC memory Haitao Huang
2024-03-28  0:22 ` [PATCH v10 01/14] x86/sgx: Replace boolean parameters with enums Haitao Huang
2024-03-28  0:22 ` [PATCH v10 02/14] cgroup/misc: Add per resource callbacks for CSS events Haitao Huang
2024-03-28  0:22 ` [PATCH v10 03/14] cgroup/misc: Export APIs for SGX driver Haitao Huang
2024-03-28  0:22 ` [PATCH v10 04/14] cgroup/misc: Add SGX EPC resource type Haitao Huang
2024-03-28  0:22 ` [PATCH v10 05/14] x86/sgx: Implement basic EPC misc cgroup functionality Haitao Huang
2024-03-28 12:53   ` Huang, Kai
2024-03-30 11:17     ` Jarkko Sakkinen
2024-04-01  9:29       ` Huang, Kai
2024-04-01 14:30         ` Jarkko Sakkinen
2024-04-05  1:24     ` Haitao Huang
2024-04-05  2:55       ` Huang, Kai
2024-03-28  0:22 ` [PATCH v10 06/14] x86/sgx: Add sgx_epc_lru_list to encapsulate LRU list Haitao Huang
2024-03-28  0:22 ` [PATCH v10 07/14] x86/sgx: Abstract tracking reclaimable pages in LRU Haitao Huang
2024-03-28  0:22 ` [PATCH v10 08/14] x86/sgx: Add basic EPC reclamation flow for cgroup Haitao Huang
2024-04-03 13:08   ` Huang, Kai
2024-04-04 17:05     ` Haitao Huang
2024-04-05  2:59       ` Huang, Kai
2024-04-05  3:07       ` Huang, Kai
2024-04-13 20:56         ` Jarkko Sakkinen
2024-03-28  0:22 ` [PATCH v10 09/14] x86/sgx: Implement async reclamation " Haitao Huang
2024-04-04 11:16   ` Huang, Kai
2024-04-04 15:39     ` Haitao Huang
2024-03-28  0:22 ` [PATCH v10 10/14] x86/sgx: Charge mem_cgroup for per-cgroup reclamation Haitao Huang
2024-03-28  0:22 ` [PATCH v10 11/14] x86/sgx: Abstract check for global reclaimable pages Haitao Huang
2024-03-28  0:22 ` [PATCH v10 12/14] x86/sgx: Turn on per-cgroup EPC reclamation Haitao Huang
2024-04-08 12:20   ` Huang, Kai
2024-04-08 18:03     ` Haitao Huang [this message]
2024-04-08 22:37       ` Huang, Kai
2024-04-09  4:23         ` Haitao Huang
2024-04-09  9:03           ` Michal Koutný
2024-04-09 15:34             ` Haitao Huang
2024-04-10 18:28               ` Haitao Huang
2024-03-28  0:22 ` [PATCH v10 13/14] Docs/x86/sgx: Add description for cgroup support Haitao Huang
2024-03-28  0:22 ` [PATCH v10 14/14] selftests/sgx: Add scripts for EPC cgroup testing Haitao Huang
2024-03-30 11:29   ` Jarkko Sakkinen
2024-03-31 17:44     ` [PATCH] selftests/sgx: Improve cgroup test scripts Haitao Huang
2024-04-01 14:22       ` Jarkko Sakkinen
2024-04-01 22:55         ` Haitao Huang
2024-04-02  7:37           ` Jarkko Sakkinen
2024-04-02  1:42         ` [PATCH v2] " Haitao Huang
2024-04-02  7:43           ` Jarkko Sakkinen
2024-04-02 17:31             ` Haitao Huang
2024-04-03 15:34               ` Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=op.2lw8gfg2wjvjmi@hhuan26-mobl.amr.corp.intel.com \
    --to=haitao.huang@linux.intel.com \
    --cc=anakrish@microsoft.com \
    --cc=bp@alien8.de \
    --cc=cgroups@vger.kernel.org \
    --cc=chrisyan@microsoft.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jarkko@kernel.org \
    --cc=kai.huang@intel.com \
    --cc=kristen@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sgx@vger.kernel.org \
    --cc=mikko.ylinen@linux.intel.com \
    --cc=mingo@redhat.com \
    --cc=mkoutny@suse.com \
    --cc=seanjc@google.com \
    --cc=sohil.mehta@intel.com \
    --cc=tglx@linutronix.de \
    --cc=tim.c.chen@linux.intel.com \
    --cc=tj@kernel.org \
    --cc=x86@kernel.org \
    --cc=yangjie@microsoft.com \
    --cc=zhanb@microsoft.com \
    --cc=zhiquan1.li@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.