eal/linux: skip attaching to external memory chunk

Message ID 1649075577-67300-1-git-send-email-deepak.khandelwal@intel.com (mailing list archive)
State Superseded, archived
Delegated to: David Marchand
Headers
Series eal/linux: skip attaching to external memory chunk |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/github-robot: build success github build: passed
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS

Commit Message

Deepak Khandelwal April 4, 2022, 12:32 p.m. UTC
  when secondary process is initialized(rte_eal_init),
external memroy segments should not be attached.
These segments will be attached by explicitly invoking
rte_malloc_heap_memory_attach API

Fixes: ff3619d6244b ("malloc: allow attaching to external memory chunks")
Cc: stable@dpdk.org

Signed-off-by: Deepak Khandelwal <deepak.khandelwal@intel.com>
Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 lib/eal/linux/eal_memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Anatoly Burakov April 20, 2022, 3:26 p.m. UTC | #1
On 04-Apr-22 1:32 PM, Deepak Khandelwal wrote:
> when secondary process is initialized(rte_eal_init),
> external memroy segments should not be attached.
> These segments will be attached by explicitly invoking
> rte_malloc_heap_memory_attach API
> 
> Fixes: ff3619d6244b ("malloc: allow attaching to external memory chunks")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Deepak Khandelwal <deepak.khandelwal@intel.com>
> Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>   lib/eal/linux/eal_memory.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
> index ee1a9e6..18d2176 100644
> --- a/lib/eal/linux/eal_memory.c
> +++ b/lib/eal/linux/eal_memory.c
> @@ -1875,7 +1875,7 @@ void numa_error(char *where)
>   		msl = &mcfg->memsegs[msl_idx];
>   
>   		/* skip empty memseg lists */
> -		if (msl->memseg_arr.len == 0)
> +		if (msl->memseg_arr.len == 0 || msl->external)
>   			continue;
>   
>   		if (rte_fbarray_attach(&msl->memseg_arr)) {

Suggested rewording of commit message:

Currently, EAL init in secondary processes will attach all fbarrays in 
the memconfig to have access to primary process' page tables. However, 
fbarrays corresponding to external memory segments should not be 
attached at initialization, because this will happen as part of 
`rte_extmem_attach` or `rte_malloc_heap_memory_attach` calls.

Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>

Both external memory API's document this:

rte_malloc: 
http://doc.dpdk.org/api/rte__malloc_8h.html#af6360dea35bdf162feeb2b62cf149fd3

rte_extmem: 
http://doc.dpdk.org/api/rte__memory_8h.html#a2796da68de6825f8edf53759f8e4d230
  
Anatoly Burakov April 20, 2022, 3:32 p.m. UTC | #2
On 04-Apr-22 1:32 PM, Deepak Khandelwal wrote:
> when secondary process is initialized(rte_eal_init),
> external memroy segments should not be attached.
> These segments will be attached by explicitly invoking
> rte_malloc_heap_memory_attach API
> 
> Fixes: ff3619d6244b ("malloc: allow attaching to external memory chunks")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Deepak Khandelwal <deepak.khandelwal@intel.com>
> Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>   lib/eal/linux/eal_memory.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
> index ee1a9e6..18d2176 100644
> --- a/lib/eal/linux/eal_memory.c
> +++ b/lib/eal/linux/eal_memory.c
> @@ -1875,7 +1875,7 @@ void numa_error(char *where)
>   		msl = &mcfg->memsegs[msl_idx];
>   
>   		/* skip empty memseg lists */
> -		if (msl->memseg_arr.len == 0)
> +		if (msl->memseg_arr.len == 0 || msl->external)
>   			continue;
>   
>   		if (rte_fbarray_attach(&msl->memseg_arr)) {

Actually, this needs to be implemented for BSD as well. Windows doesn't 
have support for secondary processes yet, so it's not applicable to 
Windows as far as i can tell.
  

Patch

diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
index ee1a9e6..18d2176 100644
--- a/lib/eal/linux/eal_memory.c
+++ b/lib/eal/linux/eal_memory.c
@@ -1875,7 +1875,7 @@  void numa_error(char *where)
 		msl = &mcfg->memsegs[msl_idx];
 
 		/* skip empty memseg lists */
-		if (msl->memseg_arr.len == 0)
+		if (msl->memseg_arr.len == 0 || msl->external)
 			continue;
 
 		if (rte_fbarray_attach(&msl->memseg_arr)) {