mbox

[GIT,PULL,ODPv2] running things in process mode

Message ID 20160421160722.GA44244@erachmi-ericsson.ki.sw.ericsson.se
State New
Headers show

Pull-request

https://git.linaro.org/people/christophe.milard/odp.git test_in_process_mode_v2

Message

Christophe Milard April 21, 2016, 4:07 p.m. UTC
Since v1:
-variable declaration gathered in function 's head (Petri)
-linux prefix removed from helper's types and function names (Mike, Christophe)

Hi,

This patch series adds the ability to run tests/ exemples / perf-test
in "process mode" (i.e letting OPD threads being linux processes)
It it hence tackling ODP-171.

This is achieved in 2 main steps:

A]
The 2 pairs of helper functions:
odph_linux_pthread_create(), odph_linux_pthread_join()
and
odph_linux_process_fork_n(), odph_linux_process_wait_n()
are replaced by:
odph_linux_odpthreads_create() and odph_linux_odpthreads_join()
The latter's callers are unaware of the actual implementation of the ODP
thread (making test truly platform agnostic).
The helper functions decide at run time whether an odp thread is to be
a linux process or pthread based on the command line argument.

B] each test/example now calls a new helper function,
odph_linux_parse_options(), so that the helper can get its own arguments
out of the command line.
Currentely supported args are: --odph_proc, --odph_thread.
Defaults assumes thread. specifying both options runs in mixed mode.

The changed are first done on the shmem tests, and thereafter propagated
to other helper users.
Note that this patch series enable the option but does not affect
make check at this time: make check still calls the tests with no options
which default to thread mode.

This patch series nicely splits it two groups (you can split your review
there):
1) up to "validation: pktio: adding command line argument parsing", the new
helper functions are introduced, and used in the validation tests.
2) from "helper: adding a function to merge getopt parameters" the ability
to parse command line arguments in subset in added and applied to
the example and performance tests.

Hope this makes sence for you too!

----


The following changes since commit 69d0a401c92807852b503418612812242ba9f8f2:

  configure: default ODP_DEBUG to false (2016-04-20 23:00:59 +0300)

are available in the git repository at:

  https://git.linaro.org/people/christophe.milard/odp.git test_in_process_mode_v2

for you to fetch changes up to 53a81edc1c77dc7aac08d97cd28e8cc5f7d9d842:

  helper: removing dead code (2016-04-21 17:26:26 +0200)

----------------------------------------------------------------
Christophe Milard (56):
      helpers: adding command line argument parsing
      validation: common: adding command line argument parsing
      validation: shmem: adding command line argument parsing
      helpers: linux: creating common entry for process and thread
      helpers: linux: creating functions to handle odpthreads
      helper: test: adding odpthread functions tests
      validation: using implementation agnostic function for ODP threads
      validation: traffic_mngr: adding command line argument parsing
      validation: timer: adding command line argument parsing
      validation: time: adding command line argument parsing
      validation: thread: adding command line argument parsing
      validation: system: adding command line argument parsing
      validation: std_clib: adding command line argument parsing
      validation: scheduler: adding command line argument parsing
      validation: random: adding command line argument parsing
      validation: queue: adding command line argument parsing
      validation: pool: adding command line argument parsing
      validation: packet: adding command line argument parsing
      validation: lock: adding command line argument parsing
      validation: init: adding command line argument parsing
      validation: hash: adding command line argument parsing
      validation: errno: adding command line argument parsing
      validation: crypto: adding command line argument parsing
      validation: cpumask: adding command line argument parsing
      validation: config: adding command line argument parsing
      validation: classification: adding command line argument parsing
      validation: buffer: adding command line argument parsing
      validation: barrier: adding command line argument parsing
      validation: atomic: adding command line argument parsing
      validation: pktio: adding command line argument parsing
      helper: adding a function to merge getopt parameters
      helper: parsing the complete set of options
      performance: odp_scheduling: proc mode done by helper
      performance: odp_pktio_perf: using agnostic function for ODP threads
      performance: odp_pktio_perf: adding helper cmd line parsing
      performance: odp_l2fwd: using agnostic function for ODP threads
      performance: odp_l2fwd: adding helper cmd line parsing
      performance: crypto: using agnostic function for ODP threads
      performance: crypto: adding helper cmd line parsing
      example: classifier: using agnostic function for ODP threads
      example: classifier: adding helper cmd line parsing
      example: generator: using agnostic function for ODP threads
      example: generator: adding helper cmd line parsing
      example: ipsec: using agnostic function for ODP threads
      example: ipsec: adding helper cmd line parsing
      example: l2fwd_simple: using agnostic function for ODP threads
      example: l2fwd_simple: adding helper cmd line parsing
      example: pktio: using agnostic function for ODP threads
      example: pktio: adding helper cmd line parsing
      example: time: using agnostic function for ODP threads
      example: time: adding helper cmd line parsing
      example: timer: using agnostic function for ODP threads
      example: timer: adding helper cmd line parsing
      example: switch: using agnostic function for ODP threads
      example: switch: adding helper cmd line parsing
      helper: removing dead code

 example/classifier/odp_classifier.c                |  39 +-
 example/generator/odp_generator.c                  |  55 +--
 example/ipsec/odp_ipsec.c                          |  26 +-
 example/l2fwd_simple/odp_l2fwd_simple.c            |  47 ++-
 example/packet/odp_pktio.c                         |  47 ++-
 example/switch/odp_switch.c                        |  29 +-
 example/time/time_global_test.c                    |  17 +-
 example/timer/odp_timer_test.c                     |  26 +-
 helper/include/odp/helper/linux.h                  | 170 ++++----
 helper/linux.c                                     | 428 ++++++++++++++-------
 helper/test/.gitignore                             |   3 +-
 helper/test/Makefile.am                            |  14 +-
 helper/test/{thread.c => odpthreads.c}             |  30 +-
 helper/test/odpthreads_as_mixed                    |  15 +
 helper/test/odpthreads_as_processes                |  15 +
 helper/test/odpthreads_as_pthreads                 |  15 +
 helper/test/process.c                              |  86 -----
 platform/linux-generic/test/pktio/pktio_run        |  21 +-
 platform/linux-generic/test/pktio/pktio_run_dpdk   |  17 +-
 platform/linux-generic/test/pktio/pktio_run_netmap |   5 +-
 platform/linux-generic/test/pktio/pktio_run_pcap   |   5 +-
 platform/linux-generic/test/pktio/pktio_run_tap    |   6 +-
 test/performance/odp_crypto.c                      |  28 +-
 test/performance/odp_l2fwd.c                       |  39 +-
 test/performance/odp_pktio_perf.c                  |  36 +-
 test/performance/odp_scheduling.c                  |  85 ++--
 test/validation/atomic/atomic.c                    |  40 +-
 test/validation/atomic/atomic.h                    |   2 +-
 test/validation/atomic/atomic_main.c               |   4 +-
 test/validation/barrier/barrier.c                  |  14 +-
 test/validation/barrier/barrier.h                  |   2 +-
 test/validation/barrier/barrier_main.c             |   4 +-
 test/validation/buffer/buffer.c                    |  10 +-
 test/validation/buffer/buffer.h                    |   2 +-
 test/validation/buffer/buffer_main.c               |   4 +-
 test/validation/classification/classification.c    |  10 +-
 test/validation/classification/classification.h    |   2 +-
 .../classification/classification_main.c           |   4 +-
 test/validation/common/odp_cunit_common.c          |  24 +-
 test/validation/common/odp_cunit_common.h          |   6 +-
 test/validation/config/config.c                    |  10 +-
 test/validation/config/config.h                    |   2 +-
 test/validation/config/config_main.c               |   4 +-
 test/validation/cpumask/cpumask.c                  |  10 +-
 test/validation/cpumask/cpumask.h                  |   2 +-
 test/validation/cpumask/cpumask_main.c             |   4 +-
 test/validation/crypto/crypto.c                    |   6 +-
 test/validation/crypto/crypto.h                    |   2 +-
 test/validation/crypto/crypto_main.c               |   4 +-
 test/validation/errno/errno.c                      |  10 +-
 test/validation/errno/errno.h                      |   2 +-
 test/validation/errno/errno_main.c                 |   4 +-
 test/validation/hash/hash.c                        |  10 +-
 test/validation/hash/hash.h                        |   2 +-
 test/validation/hash/hash_main.c                   |   4 +-
 test/validation/init/init.c                        |  18 +-
 test/validation/init/init.h                        |   6 +-
 test/validation/init/init_main_abort.c             |   4 +-
 test/validation/init/init_main_log.c               |   4 +-
 test/validation/init/init_main_ok.c                |   4 +-
 test/validation/lock/lock.c                        |  50 +--
 test/validation/lock/lock.h                        |   2 +-
 test/validation/lock/lock_main.c                   |   4 +-
 test/validation/packet/packet.c                    |  10 +-
 test/validation/packet/packet.h                    |   2 +-
 test/validation/packet/packet_main.c               |   4 +-
 test/validation/pktio/pktio.c                      |  10 +-
 test/validation/pktio/pktio.h                      |   2 +-
 test/validation/pktio/pktio_main.c                 |   4 +-
 test/validation/pool/pool.c                        |  10 +-
 test/validation/pool/pool.h                        |   2 +-
 test/validation/pool/pool_main.c                   |   4 +-
 test/validation/queue/queue.c                      |  10 +-
 test/validation/queue/queue.h                      |   2 +-
 test/validation/queue/queue_main.c                 |   4 +-
 test/validation/random/random.c                    |  10 +-
 test/validation/random/random.h                    |   2 +-
 test/validation/random/random_main.c               |   4 +-
 test/validation/scheduler/scheduler.c              |  18 +-
 test/validation/scheduler/scheduler.h              |   2 +-
 test/validation/scheduler/scheduler_main.c         |   4 +-
 test/validation/shmem/shmem.c                      |  16 +-
 test/validation/shmem/shmem.h                      |   2 +-
 test/validation/shmem/shmem_main.c                 |   4 +-
 test/validation/std_clib/std_clib.c                |  10 +-
 test/validation/std_clib/std_clib.h                |   2 +-
 test/validation/std_clib/std_clib_main.c           |   4 +-
 test/validation/system/system.c                    |  10 +-
 test/validation/system/system.h                    |   2 +-
 test/validation/system/system_main.c               |   4 +-
 test/validation/thread/thread.c                    |  14 +-
 test/validation/thread/thread.h                    |   2 +-
 test/validation/thread/thread_main.c               |   4 +-
 test/validation/time/time.c                        |  10 +-
 test/validation/time/time.h                        |   2 +-
 test/validation/time/time_main.c                   |   4 +-
 test/validation/timer/timer.c                      |  10 +-
 test/validation/timer/timer.h                      |   2 +-
 test/validation/timer/timer_main.c                 |   4 +-
 test/validation/traffic_mngr/traffic_mngr.c        |   6 +-
 test/validation/traffic_mngr/traffic_mngr.h        |   2 +-
 test/validation/traffic_mngr/traffic_mngr_main.c   |   4 +-
 102 files changed, 1114 insertions(+), 708 deletions(-)
 rename helper/test/{thread.c => odpthreads.c} (69%)
 create mode 100755 helper/test/odpthreads_as_mixed
 create mode 100755 helper/test/odpthreads_as_processes
 create mode 100755 helper/test/odpthreads_as_pthreads
 delete mode 100644 helper/test/process.c

Comments

Brian Brooks April 25, 2016, 7:58 p.m. UTC | #1
On 04/21 18:07:23, Christophe Milard wrote:
> Since v1:
> -variable declaration gathered in function 's head (Petri)
> -linux prefix removed from helper's types and function names (Mike, Christophe)
> 
> Hi,
> 
> This patch series adds the ability to run tests/ exemples / perf-test
> in "process mode" (i.e letting OPD threads being linux processes)
> It it hence tackling ODP-171.
> 
> This is achieved in 2 main steps:
> 
> A]
> The 2 pairs of helper functions:
> odph_linux_pthread_create(), odph_linux_pthread_join()
> and
> odph_linux_process_fork_n(), odph_linux_process_wait_n()
> are replaced by:
> odph_linux_odpthreads_create() and odph_linux_odpthreads_join()
> The latter's callers are unaware of the actual implementation of the ODP
> thread (making test truly platform agnostic).
> The helper functions decide at run time whether an odp thread is to be
> a linux process or pthread based on the command line argument.

This patch series helps simplify the use of mature APIs. The benefit of
this is that ODP becomes easier to port, and the ODP API can be simplified
too. This is a good thing.

> B] each test/example now calls a new helper function,
> odph_linux_parse_options(), so that the helper can get its own arguments
> out of the command line.
> Currentely supported args are: --odph_proc, --odph_thread.
> Defaults assumes thread. specifying both options runs in mixed mode.

And, it seems that existing test code can still be leveraged!

I think shortopts1 can be copied via strcat() as well since you explicitly
added the null terminator before appending the two shortopts. That function
is also ripe for a body of surrounding test cases.

> The changed are first done on the shmem tests, and thereafter propagated
> to other helper users.
> Note that this patch series enable the option but does not affect
> make check at this time: make check still calls the tests with no options
> which default to thread mode.
> 
> This patch series nicely splits it two groups (you can split your review
> there):
> 1) up to "validation: pktio: adding command line argument parsing", the new
> helper functions are introduced, and used in the validation tests.
> 2) from "helper: adding a function to merge getopt parameters" the ability
> to parse command line arguments in subset in added and applied to
> the example and performance tests.
> 
> Hope this makes sence for you too!
> 
> ----
> 
> 
> The following changes since commit 69d0a401c92807852b503418612812242ba9f8f2:
> 
>   configure: default ODP_DEBUG to false (2016-04-20 23:00:59 +0300)
> 
> are available in the git repository at:
> 
>   https://git.linaro.org/people/christophe.milard/odp.git test_in_process_mode_v2
> 
> for you to fetch changes up to 53a81edc1c77dc7aac08d97cd28e8cc5f7d9d842:
> 
>   helper: removing dead code (2016-04-21 17:26:26 +0200)

Just a heads-up, there were conflicts when merging into origin/master.

Reviewed-by: Brian Brooks <brian.brooks@linaro.org>