[v1,0/7] support reinit flow

Message ID 20230815013826.1288972-1-okaya@kernel.org (mailing list archive)
Headers
Series support reinit flow |

Message

Sinan Kaya Aug. 15, 2023, 1:38 a.m. UTC
  From: Sinan Kaya <okaya@kernel.org>

We want to be able to call rte_eal_init() and rte_eal_cleanup()
APIs back to back for maintanance reasons.

Here is a summary of the code we have seen so far:

1. some code support getting called multiple times by keeping
a static variable.
2. some code initializes once but never clean up after them and
don't have a cleanup API.
3. some code assumes that they only get called once during the
lifecycle of the process.

Most changes in this patch center around following the #1 design
principle.

Graham Whyte (1):
  eal: fixes for re-initialization issues

Sinan Kaya (6):
  tailq: skip init if already initialized
  eal_memzone: bail out on initialized
  memseg: init once
  eal_memory: skip initialization
  eal_interrupts: don't reinitialize threads
  eal: initialize worker threads once

 lib/eal/common/eal_common_memory.c  |  5 ++
 lib/eal/common/eal_common_memzone.c |  6 +++
 lib/eal/common/eal_common_options.c |  7 +++
 lib/eal/common/eal_common_tailqs.c  | 21 ++++++---
 lib/eal/common/malloc_heap.c        |  6 +++
 lib/eal/linux/eal.c                 | 72 ++++++++++++++++-------------
 lib/eal/linux/eal_interrupts.c      |  5 ++
 lib/eal/linux/eal_memory.c          | 11 ++++-
 8 files changed, 92 insertions(+), 41 deletions(-)
  

Comments

Stephen Hemminger Aug. 15, 2023, 2:12 a.m. UTC | #1
On Mon, 14 Aug 2023 21:38:19 -0400
okaya@kernel.org wrote:

> From: Sinan Kaya <okaya@kernel.org>
> 
> We want to be able to call rte_eal_init() and rte_eal_cleanup()
> APIs back to back for maintanance reasons.

Why?
This change exposes lots of drivers, API's and other things to untested code paths.
If you just want to do a hard restart, maybe just reexecing the same application would
be better.
  
Sinan Kaya Aug. 15, 2023, 3:12 a.m. UTC | #2
On Mon, 2023-08-14 at 19:12 -0700, Stephen Hemminger wrote:
> On Mon, 14 Aug 2023 21:38:19 -0400
> 
> okaya@kernel.org wrote:
> 
> 
> 
> > From: Sinan Kaya <okaya@kernel.org>
> > We want to be able to call rte_eal_init() and rte_eal_cleanup()
> > APIs back to back for maintanance reasons.
> 
> 
> Why?
> 
> This change exposes lots of drivers, API's and other things to
> untested code paths.
> 
> If you just want to do a hard restart, maybe just reexecing the same
> application would
> 
> be better.

It is not always ideal to reinitialize a DPDK process. Memory needs
to be reinitialized, hugetables need to warm up etc.

Given the cost of change is not huge, I believe this will be
important contribution for certain application types.
Changeset is not doing anything different from what already exists.
  
Stephen Hemminger Aug. 15, 2023, 9:49 p.m. UTC | #3
On Mon, 14 Aug 2023 21:38:19 -0400
okaya@kernel.org wrote:

> From: Sinan Kaya <okaya@kernel.org>
> 
> We want to be able to call rte_eal_init() and rte_eal_cleanup()
> APIs back to back for maintanance reasons.

One other note:
This sequence could only be done by main lcore, and never ever in a signal handler.
Do not try and trap signals like abort, bus error, illegal instruction and try to
use this for recovery. It is a recipe for failure.