mbox

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

Message ID 20160418140003.GA23567@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_v1

Message

Christophe Milard April 18, 2016, 2 p.m. UTC
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 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

  validation: scheduler: correct pause/resume sequence (2016-04-18 15:03:22 +0300)

are available in the git repository at:

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

for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

  helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423 ++++++++++++++-------
 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                    |   6 +-
 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                        |   6 +-
 test/validation/pool/pool.h                        |   2 +-
 test/validation/pool/pool_main.c                   |   4 +-
 test/validation/queue/queue.c                      |   6 +-
 test/validation/queue/queue.h                      |   2 +-
 test/validation/queue/queue_main.c                 |   4 +-
 test/validation/random/random.c                    |   6 +-
 test/validation/random/random.h                    |   2 +-
 test/validation/random/random_main.c               |   4 +-
 test/validation/scheduler/scheduler.c              |  14 +-
 test/validation/scheduler/scheduler.h              |   2 +-
 test/validation/scheduler/scheduler_main.c         |   4 +-
 test/validation/shmem/shmem.c                      |  12 +-
 test/validation/shmem/shmem.h                      |   2 +-
 test/validation/shmem/shmem_main.c                 |   4 +-
 test/validation/std_clib/std_clib.c                |   6 +-
 test/validation/std_clib/std_clib.h                |   2 +-
 test/validation/std_clib/std_clib_main.c           |   4 +-
 test/validation/system/system.c                    |   6 +-
 test/validation/system/system.h                    |   2 +-
 test/validation/system/system_main.c               |   4 +-
 test/validation/thread/thread.c                    |  10 +-
 test/validation/thread/thread.h                    |   2 +-
 test/validation/thread/thread_main.c               |   4 +-
 test/validation/time/time.c                        |   6 +-
 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, 1080 insertions(+), 697 deletions(-)
 rename helper/test/{thread.c => odpthreads.c} (68%)
 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

Maxim Uvarov April 19, 2016, 7:39 a.m. UTC | #1
Similar changes can go to one patch. Like the same patches that change 
args for unit tests.

Is that patches sequence buildable?

I think we also need to send this to mailing list. But it's huge number 
of small patches which probably might be reasonable
to split on 2 or 3 logical patch sets if that possible.

Maxim.

On 19.04.2016 10:19, Savolainen, Petri (Nokia - FI/Espoo) wrote:
> Hi,
>
> Looks reasonable. There are some style / coding guideline faults (like should introduce all variables in the beginning of a code block). Also pure process and pthread helpers should remain (suggesting to leave out "helper: removing dead code"), since not all apps want to obscure whether process or pthread is used. Opaque thread type helps our purposes to test everything on both pthread and process models, but other apps are likely to care only one model.
>
> -Petri
>
>
>
>> -----Original Message-----
>> From: EXT Christophe Milard [mailto:christophe.milard@linaro.org]
>> Sent: Monday, April 18, 2016 5:00 PM
>> To: lng-odp@lists.linaro.org; Savolainen, Petri (Nokia - FI/Espoo)
>> <petri.savolainen@nokia.com>
>> Cc: mike.holmes@linaro.org
>> Subject: [GIT PULL ODP] running things in process mode
>>
>> 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
>> 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:
>>
>>    validation: scheduler: correct pause/resume sequence (2016-04-18
>> 15:03:22 +0300)
>>
>> are available in the git repository at:
>>
>>    https://git.linaro.org/people/christophe.milard/odp.git
>> test_in_process_mode_v1
>>
>> for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:
>>
>>    helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423 ++++++++++++++--
>> -----
>>   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                    |   6 +-
>>   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                        |   6 +-
>>   test/validation/pool/pool.h                        |   2 +-
>>   test/validation/pool/pool_main.c                   |   4 +-
>>   test/validation/queue/queue.c                      |   6 +-
>>   test/validation/queue/queue.h                      |   2 +-
>>   test/validation/queue/queue_main.c                 |   4 +-
>>   test/validation/random/random.c                    |   6 +-
>>   test/validation/random/random.h                    |   2 +-
>>   test/validation/random/random_main.c               |   4 +-
>>   test/validation/scheduler/scheduler.c              |  14 +-
>>   test/validation/scheduler/scheduler.h              |   2 +-
>>   test/validation/scheduler/scheduler_main.c         |   4 +-
>>   test/validation/shmem/shmem.c                      |  12 +-
>>   test/validation/shmem/shmem.h                      |   2 +-
>>   test/validation/shmem/shmem_main.c                 |   4 +-
>>   test/validation/std_clib/std_clib.c                |   6 +-
>>   test/validation/std_clib/std_clib.h                |   2 +-
>>   test/validation/std_clib/std_clib_main.c           |   4 +-
>>   test/validation/system/system.c                    |   6 +-
>>   test/validation/system/system.h                    |   2 +-
>>   test/validation/system/system_main.c               |   4 +-
>>   test/validation/thread/thread.c                    |  10 +-
>>   test/validation/thread/thread.h                    |   2 +-
>>   test/validation/thread/thread_main.c               |   4 +-
>>   test/validation/time/time.c                        |   6 +-
>>   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, 1080 insertions(+), 697 deletions(-)
>>   rename helper/test/{thread.c => odpthreads.c} (68%)
>>   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
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
Christophe Milard April 19, 2016, 7:40 a.m. UTC | #2
Thanks for your comment, Petri. You are welcome to point out the coding
guideline faults you have seen, so I don't miss them. I will review for the
variable declaration position.
Regarding your other comments, wouldn't it be better to add a fifth
parameter to odph_linux_odpthreads_create() like this:

+int odph_linux_odpthreads_create(odph_linux_odpthread_t *thread_tbl,
+                                const odp_cpumask_t *mask,
+                                int (*start_routine)(void *), void *arg,
+                                odp_thread_type_t thr_type,
+                                odph_thread_implementation_e imp);

where odph_thread_implementation_e would be an enum: {
ANY (i.e. helpers decide according to command line)
FORCE_PTHREAD
FORCE_PROCESS
}

platform agnostic tests would then only be allowed to use ANY. tests on the
platform side could pick what they want.
And we can remove the dead code.

Make sense?


On 19 April 2016 at 09:19, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolainen@nokia.com> wrote:

> Hi,

>

> Looks reasonable. There are some style / coding guideline faults (like

> should introduce all variables in the beginning of a code block). Also pure

> process and pthread helpers should remain (suggesting to leave out "helper:

> removing dead code"), since not all apps want to obscure whether process or

> pthread is used. Opaque thread type helps our purposes to test everything

> on both pthread and process models, but other apps are likely to care only

> one model.

>

> -Petri

>

>

>

> > -----Original Message-----

> > From: EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> > Sent: Monday, April 18, 2016 5:00 PM

> > To: lng-odp@lists.linaro.org; Savolainen, Petri (Nokia - FI/Espoo)

> > <petri.savolainen@nokia.com>

> > Cc: mike.holmes@linaro.org

> > Subject: [GIT PULL ODP] running things in process mode

> >

> > 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

> > 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

> >

> >   validation: scheduler: correct pause/resume sequence (2016-04-18

> > 15:03:22 +0300)

> >

> > are available in the git repository at:

> >

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

> > test_in_process_mode_v1

> >

> > for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

> >

> >   helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423

> ++++++++++++++--

> > -----

> >  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                    |   6 +-

> >  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                        |   6 +-

> >  test/validation/pool/pool.h                        |   2 +-

> >  test/validation/pool/pool_main.c                   |   4 +-

> >  test/validation/queue/queue.c                      |   6 +-

> >  test/validation/queue/queue.h                      |   2 +-

> >  test/validation/queue/queue_main.c                 |   4 +-

> >  test/validation/random/random.c                    |   6 +-

> >  test/validation/random/random.h                    |   2 +-

> >  test/validation/random/random_main.c               |   4 +-

> >  test/validation/scheduler/scheduler.c              |  14 +-

> >  test/validation/scheduler/scheduler.h              |   2 +-

> >  test/validation/scheduler/scheduler_main.c         |   4 +-

> >  test/validation/shmem/shmem.c                      |  12 +-

> >  test/validation/shmem/shmem.h                      |   2 +-

> >  test/validation/shmem/shmem_main.c                 |   4 +-

> >  test/validation/std_clib/std_clib.c                |   6 +-

> >  test/validation/std_clib/std_clib.h                |   2 +-

> >  test/validation/std_clib/std_clib_main.c           |   4 +-

> >  test/validation/system/system.c                    |   6 +-

> >  test/validation/system/system.h                    |   2 +-

> >  test/validation/system/system_main.c               |   4 +-

> >  test/validation/thread/thread.c                    |  10 +-

> >  test/validation/thread/thread.h                    |   2 +-

> >  test/validation/thread/thread_main.c               |   4 +-

> >  test/validation/time/time.c                        |   6 +-

> >  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, 1080 insertions(+), 697 deletions(-)

> >  rename helper/test/{thread.c => odpthreads.c} (68%)

> >  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

>
Maxim Uvarov April 19, 2016, 7:46 a.m. UTC | #3
On 19.04.2016 10:40, Christophe Milard wrote:
> Thanks for your comment, Petri. You are welcome to point out the 
> coding guideline faults you have seen, so I don't miss them. I will 
> review for the variable declaration position.
> Regarding your other comments, wouldn't it be better to add a fifth 
> parameter to odph_linux_odpthreads_create() like this:
>
> +int odph_linux_odpthreads_create(odph_linux_odpthread_t *thread_tbl,
> +                                const odp_cpumask_t *mask,
> +                                int (*start_routine)(void *), void *arg,
> +                                odp_thread_type_t thr_type,
> +  odph_thread_implementation_e imp);
>
> where odph_thread_implementation_e would be an enum: {
> ANY (i.e. helpers decide according to command line)
> FORCE_PTHREAD
> FORCE_PROCESS
> }
>
> platform agnostic tests would then only be allowed to use ANY. tests 
> on the platform side could pick what they want.
> And we can remove the dead code.
>
> Make sense?
>
odph_instance_type_t
{
   THREAD_PTHREAD,
   THREAD_FORK
}

Maxim.
>
> On 19 April 2016 at 09:19, Savolainen, Petri (Nokia - FI/Espoo) 
> <petri.savolainen@nokia.com <mailto:petri.savolainen@nokia.com>> wrote:
>
>     Hi,
>
>     Looks reasonable. There are some style / coding guideline faults
>     (like should introduce all variables in the beginning of a code
>     block). Also pure process and pthread helpers should remain
>     (suggesting to leave out "helper: removing dead code"), since not
>     all apps want to obscure whether process or pthread is used.
>     Opaque thread type helps our purposes to test everything on both
>     pthread and process models, but other apps are likely to care only
>     one model.
>
>     -Petri
>
>
>
>     > -----Original Message-----
>     > From: EXT Christophe Milard [mailto:christophe.milard@linaro.org
>     <mailto:christophe.milard@linaro.org>]
>     > Sent: Monday, April 18, 2016 5:00 PM
>     > To: lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>;
>     Savolainen, Petri (Nokia - FI/Espoo)
>     > <petri.savolainen@nokia.com <mailto:petri.savolainen@nokia.com>>
>     > Cc: mike.holmes@linaro.org <mailto:mike.holmes@linaro.org>
>     > Subject: [GIT PULL ODP] running things in process mode
>     >
>     > 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
>     > 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:
>     >
>     >   validation: scheduler: correct pause/resume sequence (2016-04-18
>     > 15:03:22 +0300)
>     >
>     > are available in the git repository at:
>     >
>     > https://git.linaro.org/people/christophe.milard/odp.git
>     > test_in_process_mode_v1
>     >
>     > for you to fetch changes up to
>     af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:
>     >
>     >   helper: removing dead code (2016-04-18 15:25:48 +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  | 423 ++++++++++++++--
>     > -----
>     >  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 |   6 +-
>     >  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 |   6 +-
>     >  test/validation/pool/pool.h |   2 +-
>     >  test/validation/pool/pool_main.c  |   4 +-
>     >  test/validation/queue/queue.c |   6 +-
>     >  test/validation/queue/queue.h |   2 +-
>     >  test/validation/queue/queue_main.c  |   4 +-
>     >  test/validation/random/random.c |   6 +-
>     >  test/validation/random/random.h |   2 +-
>     >  test/validation/random/random_main.c  |   4 +-
>     >  test/validation/scheduler/scheduler.c |  14 +-
>     >  test/validation/scheduler/scheduler.h |   2 +-
>     >  test/validation/scheduler/scheduler_main.c  |   4 +-
>     >  test/validation/shmem/shmem.c |  12 +-
>     >  test/validation/shmem/shmem.h |   2 +-
>     >  test/validation/shmem/shmem_main.c  |   4 +-
>     >  test/validation/std_clib/std_clib.c |   6 +-
>     >  test/validation/std_clib/std_clib.h |   2 +-
>     >  test/validation/std_clib/std_clib_main.c  |   4 +-
>     >  test/validation/system/system.c |   6 +-
>     >  test/validation/system/system.h |   2 +-
>     >  test/validation/system/system_main.c  |   4 +-
>     >  test/validation/thread/thread.c |  10 +-
>     >  test/validation/thread/thread.h |   2 +-
>     >  test/validation/thread/thread_main.c  |   4 +-
>     >  test/validation/time/time.c |   6 +-
>     >  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, 1080 insertions(+), 697 deletions(-)
>     >  rename helper/test/{thread.c => odpthreads.c} (68%)
>     >  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
>
>
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
Christophe Milard April 19, 2016, 7:47 a.m. UTC | #4
On 19 April 2016 at 09:39, Maxim Uvarov <maxim.uvarov@linaro.org> wrote:

> Similar changes can go to one patch. Like the same patches that change

> args for unit tests.

>


Not sure  what you mean here. If you mean that the test changes could be
gathered in one single patch I could possibly agree if these changes were
the same. but they differ, sometime. (e.g. init has 3 main functions, pktio
io has wrappers etc...). So ot make sense to have small separated patches
to me. If you meant something else, please explain.

>

> Is that patches sequence buildable?

>


yes.

>

> I think we also need to send this to mailing list. But it's huge number of

> small patches which probably might be reasonable

> to split on 2 or 3 logical patch sets if that possible.

>


Well, I have an issue here: when I send an incomplete series, people
complain they want to see the complete picture. If I send the complete
picture people complain it is too many patches. If I send few large
patches, some other complain they should be split ... :-) it is getting
hard :-)

>

> Maxim.

>

>

> On 19.04.2016 10:19, Savolainen, Petri (Nokia - FI/Espoo) wrote:

>

>> Hi,

>>

>> Looks reasonable. There are some style / coding guideline faults (like

>> should introduce all variables in the beginning of a code block). Also pure

>> process and pthread helpers should remain (suggesting to leave out "helper:

>> removing dead code"), since not all apps want to obscure whether process or

>> pthread is used. Opaque thread type helps our purposes to test everything

>> on both pthread and process models, but other apps are likely to care only

>> one model.

>>

>> -Petri

>>

>>

>>

>> -----Original Message-----

>>> From: EXT Christophe Milard [mailto:christophe.milard@linaro.org]

>>> Sent: Monday, April 18, 2016 5:00 PM

>>> To: lng-odp@lists.linaro.org; Savolainen, Petri (Nokia - FI/Espoo)

>>> <petri.savolainen@nokia.com>

>>> Cc: mike.holmes@linaro.org

>>> Subject: [GIT PULL ODP] running things in process mode

>>>

>>> 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

>>> 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

>>>

>>>    validation: scheduler: correct pause/resume sequence (2016-04-18

>>> 15:03:22 +0300)

>>>

>>> are available in the git repository at:

>>>

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

>>> test_in_process_mode_v1

>>>

>>> for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

>>>

>>>    helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423

>>> ++++++++++++++--

>>> -----

>>>   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                    |   6 +-

>>>   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                        |   6 +-

>>>   test/validation/pool/pool.h                        |   2 +-

>>>   test/validation/pool/pool_main.c                   |   4 +-

>>>   test/validation/queue/queue.c                      |   6 +-

>>>   test/validation/queue/queue.h                      |   2 +-

>>>   test/validation/queue/queue_main.c                 |   4 +-

>>>   test/validation/random/random.c                    |   6 +-

>>>   test/validation/random/random.h                    |   2 +-

>>>   test/validation/random/random_main.c               |   4 +-

>>>   test/validation/scheduler/scheduler.c              |  14 +-

>>>   test/validation/scheduler/scheduler.h              |   2 +-

>>>   test/validation/scheduler/scheduler_main.c         |   4 +-

>>>   test/validation/shmem/shmem.c                      |  12 +-

>>>   test/validation/shmem/shmem.h                      |   2 +-

>>>   test/validation/shmem/shmem_main.c                 |   4 +-

>>>   test/validation/std_clib/std_clib.c                |   6 +-

>>>   test/validation/std_clib/std_clib.h                |   2 +-

>>>   test/validation/std_clib/std_clib_main.c           |   4 +-

>>>   test/validation/system/system.c                    |   6 +-

>>>   test/validation/system/system.h                    |   2 +-

>>>   test/validation/system/system_main.c               |   4 +-

>>>   test/validation/thread/thread.c                    |  10 +-

>>>   test/validation/thread/thread.h                    |   2 +-

>>>   test/validation/thread/thread_main.c               |   4 +-

>>>   test/validation/time/time.c                        |   6 +-

>>>   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, 1080 insertions(+), 697 deletions(-)

>>>   rename helper/test/{thread.c => odpthreads.c} (68%)

>>>   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

>>>

>> _______________________________________________

>> lng-odp mailing list

>> lng-odp@lists.linaro.org

>> https://lists.linaro.org/mailman/listinfo/lng-odp

>>

>

> _______________________________________________

> lng-odp mailing list

> lng-odp@lists.linaro.org

> https://lists.linaro.org/mailman/listinfo/lng-odp

>
Christophe Milard April 19, 2016, 7:55 a.m. UTC | #5
On 19 April 2016 at 09:46, Maxim Uvarov <maxim.uvarov@linaro.org> wrote:

> On 19.04.2016 10:40, Christophe Milard wrote:

>

>> Thanks for your comment, Petri. You are welcome to point out the coding

>> guideline faults you have seen, so I don't miss them. I will review for the

>> variable declaration position.

>> Regarding your other comments, wouldn't it be better to add a fifth

>> parameter to odph_linux_odpthreads_create() like this:

>>

>> +int odph_linux_odpthreads_create(odph_linux_odpthread_t *thread_tbl,

>> +                                const odp_cpumask_t *mask,

>> +                                int (*start_routine)(void *), void *arg,

>> +                                odp_thread_type_t thr_type,

>> +  odph_thread_implementation_e imp);

>>

>> where odph_thread_implementation_e would be an enum: {

>> ANY (i.e. helpers decide according to command line)

>> FORCE_PTHREAD

>> FORCE_PROCESS

>> }

>>

>> platform agnostic tests would then only be allowed to use ANY. tests on

>> the platform side could pick what they want.

>> And we can remove the dead code.

>>

>> Make sense?

>>

>> odph_instance_type_t

>


 yes, "odph_instance_type_t" is shorter than "odph_thread_implementation_e"
but less clear.
As, in practical, only one enum value will be used as parameter to the
function,  I think "odph_thread_implementation_e" is better

{
>   THREAD_PTHREAD,

>   THREAD_FORK

>


THREAD_PROCESS I guess, right?

Christophe.


> }

>

> Maxim.

>

>>

>> On 19 April 2016 at 09:19, Savolainen, Petri (Nokia - FI/Espoo) <

>> petri.savolainen@nokia.com <mailto:petri.savolainen@nokia.com>> wrote:

>>

>>     Hi,

>>

>>     Looks reasonable. There are some style / coding guideline faults

>>     (like should introduce all variables in the beginning of a code

>>     block). Also pure process and pthread helpers should remain

>>     (suggesting to leave out "helper: removing dead code"), since not

>>     all apps want to obscure whether process or pthread is used.

>>     Opaque thread type helps our purposes to test everything on both

>>     pthread and process models, but other apps are likely to care only

>>     one model.

>>

>>     -Petri

>>

>>

>>

>>     > -----Original Message-----

>>     > From: EXT Christophe Milard [mailto:christophe.milard@linaro.org

>>     <mailto:christophe.milard@linaro.org>]

>>     > Sent: Monday, April 18, 2016 5:00 PM

>>     > To: lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org>;

>>     Savolainen, Petri (Nokia - FI/Espoo)

>>     > <petri.savolainen@nokia.com <mailto:petri.savolainen@nokia.com>>

>>     > Cc: mike.holmes@linaro.org <mailto:mike.holmes@linaro.org>

>>     > Subject: [GIT PULL ODP] running things in process mode

>>     >

>>     > 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

>>     > 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

>>     >

>>     >   validation: scheduler: correct pause/resume sequence (2016-04-18

>>     > 15:03:22 +0300)

>>     >

>>     > are available in the git repository at:

>>     >

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

>>     > test_in_process_mode_v1

>>     >

>>     > for you to fetch changes up to

>>     af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

>>     >

>>     >   helper: removing dead code (2016-04-18 15:25:48 +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  | 423 ++++++++++++++--

>>     > -----

>>     >  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 |   6 +-

>>     >  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 |   6 +-

>>     >  test/validation/pool/pool.h |   2 +-

>>     >  test/validation/pool/pool_main.c  |   4 +-

>>     >  test/validation/queue/queue.c |   6 +-

>>     >  test/validation/queue/queue.h |   2 +-

>>     >  test/validation/queue/queue_main.c  |   4 +-

>>     >  test/validation/random/random.c |   6 +-

>>     >  test/validation/random/random.h |   2 +-

>>     >  test/validation/random/random_main.c  |   4 +-

>>     >  test/validation/scheduler/scheduler.c |  14 +-

>>     >  test/validation/scheduler/scheduler.h |   2 +-

>>     >  test/validation/scheduler/scheduler_main.c  |   4 +-

>>     >  test/validation/shmem/shmem.c |  12 +-

>>     >  test/validation/shmem/shmem.h |   2 +-

>>     >  test/validation/shmem/shmem_main.c  |   4 +-

>>     >  test/validation/std_clib/std_clib.c |   6 +-

>>     >  test/validation/std_clib/std_clib.h |   2 +-

>>     >  test/validation/std_clib/std_clib_main.c  |   4 +-

>>     >  test/validation/system/system.c |   6 +-

>>     >  test/validation/system/system.h |   2 +-

>>     >  test/validation/system/system_main.c  |   4 +-

>>     >  test/validation/thread/thread.c |  10 +-

>>     >  test/validation/thread/thread.h |   2 +-

>>     >  test/validation/thread/thread_main.c  |   4 +-

>>     >  test/validation/time/time.c |   6 +-

>>     >  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, 1080 insertions(+), 697 deletions(-)

>>     >  rename helper/test/{thread.c => odpthreads.c} (68%)

>>     >  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

>>

>>

>>

>>

>> _______________________________________________

>> lng-odp mailing list

>> lng-odp@lists.linaro.org

>> https://lists.linaro.org/mailman/listinfo/lng-odp

>>

>

> _______________________________________________

> lng-odp mailing list

> lng-odp@lists.linaro.org

> https://lists.linaro.org/mailman/listinfo/lng-odp

>
Christophe Milard April 19, 2016, 8:09 a.m. UTC | #6
hmmm.
OK. so you want to leave the old functions because they give the
possibility to pass pointers to threads (and get pointer back), whereas
processes would just return an int?
(and by doing the change I did, I had to lower all these to the lowest
common denominator, returning an int in both cases).
Possibly makes sense. The question is really if we want to see that in the
helper code, or if this is so rare so that the tests willing to do so can
use fork and pthread directely...
No platform agnostic test should be allowed to do so, actually. And the
single platform dependent test we have today does nor create odpthreads.
Not sure I really like the idea to leave unused code "just in case", but If
I get your blessings for the lot except the last patch, I am an happy man.
:-)
We can delay and see for the "removing dead code", if you want

If which case my proposal for a fifth parameter should be delayed as well.

Christophe

On 19 April 2016 at 09:58, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolainen@nokia.com> wrote:

> Actually, it’s not the control of thread/process creation but the

> representation of those. With pthread create, user expects to give void

> *(*start)(void *) function pointer for thread starting point (with void*

> return type) and with processes there’s no entry point, but current thread

> of execution is forked. Also parameters are different (pid_t, status,

> pthread_attr_t, …)

>

>

>

> -Petri

>

>

>

>

>

> *From:* EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> *Sent:* Tuesday, April 19, 2016 10:40 AM

> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com>

> *Cc:* lng-odp@lists.linaro.org; mike.holmes@linaro.org

> *Subject:* Re: [GIT PULL ODP] running things in process mode

>

>

>

> Thanks for your comment, Petri. You are welcome to point out the coding

> guideline faults you have seen, so I don't miss them. I will review for the

> variable declaration position.

>

> Regarding your other comments, wouldn't it be better to add a fifth

> parameter to odph_linux_odpthreads_create() like this:

>

>

>

> +int odph_linux_odpthreads_create(odph_linux_odpthread_t *thread_tbl,

>

> +                                const odp_cpumask_t *mask,

>

> +                                int (*start_routine)(void *), void *arg,

>

> +                                odp_thread_type_t thr_type,

>

> +                                odph_thread_implementation_e imp);

>

>

>

> where odph_thread_implementation_e would be an enum: {

>

> ANY (i.e. helpers decide according to command line)

>

> FORCE_PTHREAD

>

> FORCE_PROCESS

>

> }

>

>

>

> platform agnostic tests would then only be allowed to use ANY. tests on

> the platform side could pick what they want.

>

> And we can remove the dead code.

>

>

>

> Make sense?

>

>

>

>

>

> On 19 April 2016 at 09:19, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@nokia.com> wrote:

>

> Hi,

>

> Looks reasonable. There are some style / coding guideline faults (like

> should introduce all variables in the beginning of a code block). Also pure

> process and pthread helpers should remain (suggesting to leave out "helper:

> removing dead code"), since not all apps want to obscure whether process or

> pthread is used. Opaque thread type helps our purposes to test everything

> on both pthread and process models, but other apps are likely to care only

> one model.

>

> -Petri

>

>

>

>

> > -----Original Message-----

> > From: EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> > Sent: Monday, April 18, 2016 5:00 PM

> > To: lng-odp@lists.linaro.org; Savolainen, Petri (Nokia - FI/Espoo)

> > <petri.savolainen@nokia.com>

> > Cc: mike.holmes@linaro.org

> > Subject: [GIT PULL ODP] running things in process mode

> >

> > 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

> > 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

> >

> >   validation: scheduler: correct pause/resume sequence (2016-04-18

> > 15:03:22 +0300)

> >

> > are available in the git repository at:

> >

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

> > test_in_process_mode_v1

> >

> > for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

> >

> >   helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423

> ++++++++++++++--

> > -----

> >  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                    |   6 +-

> >  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                        |   6 +-

> >  test/validation/pool/pool.h                        |   2 +-

> >  test/validation/pool/pool_main.c                   |   4 +-

> >  test/validation/queue/queue.c                      |   6 +-

> >  test/validation/queue/queue.h                      |   2 +-

> >  test/validation/queue/queue_main.c                 |   4 +-

> >  test/validation/random/random.c                    |   6 +-

> >  test/validation/random/random.h                    |   2 +-

> >  test/validation/random/random_main.c               |   4 +-

> >  test/validation/scheduler/scheduler.c              |  14 +-

> >  test/validation/scheduler/scheduler.h              |   2 +-

> >  test/validation/scheduler/scheduler_main.c         |   4 +-

> >  test/validation/shmem/shmem.c                      |  12 +-

> >  test/validation/shmem/shmem.h                      |   2 +-

> >  test/validation/shmem/shmem_main.c                 |   4 +-

> >  test/validation/std_clib/std_clib.c                |   6 +-

> >  test/validation/std_clib/std_clib.h                |   2 +-

> >  test/validation/std_clib/std_clib_main.c           |   4 +-

> >  test/validation/system/system.c                    |   6 +-

> >  test/validation/system/system.h                    |   2 +-

> >  test/validation/system/system_main.c               |   4 +-

> >  test/validation/thread/thread.c                    |  10 +-

> >  test/validation/thread/thread.h                    |   2 +-

> >  test/validation/thread/thread_main.c               |   4 +-

> >  test/validation/time/time.c                        |   6 +-

> >  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, 1080 insertions(+), 697 deletions(-)

> >  rename helper/test/{thread.c => odpthreads.c} (68%)

> >  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

>

>

>
Mike Holmes April 19, 2016, 12:30 p.m. UTC | #7
I have a thought about odph_linux_odpthreads_create() and odph_linux_
odpthreads_join()

Should these be

odph_odpthreads_create() and odph_odpthreads_join()


That way we create the notion of an odpthread that is OS independent and
then the tests possibly extend to another OS without modification.



On 19 April 2016 at 05:02, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolainen@nokia.com> wrote:

> As I said, our test need to be thread agnostic (because we must test both

> model) but those helpers would be for other apps (that are not agnostic).

> Only pthread/process validation test cases would be needed (as any other

> helper code). Thread creation is so common task for any app that those are

> surely needed. Implementation of the agnostic and not agnostic functions

> may share the core parts of the code.

>

>

>

> -Petri

>

>

>

>

>

> *From:* EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> *Sent:* Tuesday, April 19, 2016 11:10 AM

>

> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com>

> *Cc:* lng-odp@lists.linaro.org; mike.holmes@linaro.org

> *Subject:* Re: [GIT PULL ODP] running things in process mode

>

>

>

> hmmm.

>

> OK. so you want to leave the old functions because they give the

> possibility to pass pointers to threads (and get pointer back), whereas

> processes would just return an int?

>

> (and by doing the change I did, I had to lower all these to the lowest

> common denominator, returning an int in both cases).

>

> Possibly makes sense. The question is really if we want to see that in the

> helper code, or if this is so rare so that the tests willing to do so can

> use fork and pthread directely...

>

> No platform agnostic test should be allowed to do so, actually. And the

> single platform dependent test we have today does nor create odpthreads.

>

> Not sure I really like the idea to leave unused code "just in case", but

> If I get your blessings for the lot except the last patch, I am an happy

> man. :-)

>

> We can delay and see for the "removing dead code", if you want

>

>

>

> If which case my proposal for a fifth parameter should be delayed as well.

>

>

>

> Christophe

>

>

>

> On 19 April 2016 at 09:58, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@nokia.com> wrote:

>

> Actually, it’s not the control of thread/process creation but the

> representation of those. With pthread create, user expects to give void

> *(*start)(void *) function pointer for thread starting point (with void*

> return type) and with processes there’s no entry point, but current thread

> of execution is forked. Also parameters are different (pid_t, status,

> pthread_attr_t, …)

>

>

>

> -Petri

>

>

>

>

>

> *From:* EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> *Sent:* Tuesday, April 19, 2016 10:40 AM

> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com>

> *Cc:* lng-odp@lists.linaro.org; mike.holmes@linaro.org

> *Subject:* Re: [GIT PULL ODP] running things in process mode

>

>

>

> Thanks for your comment, Petri. You are welcome to point out the coding

> guideline faults you have seen, so I don't miss them. I will review for the

> variable declaration position.

>

> Regarding your other comments, wouldn't it be better to add a fifth

> parameter to odph_linux_odpthreads_create() like this:

>

>

>

> +int odph_linux_odpthreads_create(odph_linux_odpthread_t *thread_tbl,

>

> +                                const odp_cpumask_t *mask,

>

> +                                int (*start_routine)(void *), void *arg,

>

> +                                odp_thread_type_t thr_type,

>

> +                                odph_thread_implementation_e imp);

>

>

>

> where odph_thread_implementation_e would be an enum: {

>

> ANY (i.e. helpers decide according to command line)

>

> FORCE_PTHREAD

>

> FORCE_PROCESS

>

> }

>

>

>

> platform agnostic tests would then only be allowed to use ANY. tests on

> the platform side could pick what they want.

>

> And we can remove the dead code.

>

>

>

> Make sense?

>

>

>

>

>

> On 19 April 2016 at 09:19, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@nokia.com> wrote:

>

> Hi,

>

> Looks reasonable. There are some style / coding guideline faults (like

> should introduce all variables in the beginning of a code block). Also pure

> process and pthread helpers should remain (suggesting to leave out "helper:

> removing dead code"), since not all apps want to obscure whether process or

> pthread is used. Opaque thread type helps our purposes to test everything

> on both pthread and process models, but other apps are likely to care only

> one model.

>

> -Petri

>

>

>

>

> > -----Original Message-----

> > From: EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> > Sent: Monday, April 18, 2016 5:00 PM

> > To: lng-odp@lists.linaro.org; Savolainen, Petri (Nokia - FI/Espoo)

> > <petri.savolainen@nokia.com>

> > Cc: mike.holmes@linaro.org

> > Subject: [GIT PULL ODP] running things in process mode

> >

> > 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

> > 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

> >

> >   validation: scheduler: correct pause/resume sequence (2016-04-18

> > 15:03:22 +0300)

> >

> > are available in the git repository at:

> >

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

> > test_in_process_mode_v1

> >

> > for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

> >

> >   helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423

> ++++++++++++++--

> > -----

> >  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                    |   6 +-

> >  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                        |   6 +-

> >  test/validation/pool/pool.h                        |   2 +-

> >  test/validation/pool/pool_main.c                   |   4 +-

> >  test/validation/queue/queue.c                      |   6 +-

> >  test/validation/queue/queue.h                      |   2 +-

> >  test/validation/queue/queue_main.c                 |   4 +-

> >  test/validation/random/random.c                    |   6 +-

> >  test/validation/random/random.h                    |   2 +-

> >  test/validation/random/random_main.c               |   4 +-

> >  test/validation/scheduler/scheduler.c              |  14 +-

> >  test/validation/scheduler/scheduler.h              |   2 +-

> >  test/validation/scheduler/scheduler_main.c         |   4 +-

> >  test/validation/shmem/shmem.c                      |  12 +-

> >  test/validation/shmem/shmem.h                      |   2 +-

> >  test/validation/shmem/shmem_main.c                 |   4 +-

> >  test/validation/std_clib/std_clib.c                |   6 +-

> >  test/validation/std_clib/std_clib.h                |   2 +-

> >  test/validation/std_clib/std_clib_main.c           |   4 +-

> >  test/validation/system/system.c                    |   6 +-

> >  test/validation/system/system.h                    |   2 +-

> >  test/validation/system/system_main.c               |   4 +-

> >  test/validation/thread/thread.c                    |  10 +-

> >  test/validation/thread/thread.h                    |   2 +-

> >  test/validation/thread/thread_main.c               |   4 +-

> >  test/validation/time/time.c                        |   6 +-

> >  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, 1080 insertions(+), 697 deletions(-)

> >  rename helper/test/{thread.c => odpthreads.c} (68%)

> >  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

>

>

>

>

>




-- 
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
"Work should be fun and collaborative, the rest follows"
Christophe Milard April 19, 2016, 1:11 p.m. UTC | #8
On 19 April 2016 at 14:30, Mike Holmes <mike.holmes@linaro.org> wrote:

> I have a thought about odph_linux_odpthreads_create() and odph_linux_

> odpthreads_join()

>

> Should these be

>

> odph_odpthreads_create() and odph_odpthreads_join()

>

>

> That way we create the notion of an odpthread that is OS independent and

> then the tests possibly extend to another OS without modification.

>

>

>

+1
I'd be very happy to take these names!: my feeling is that we eventually
want the helpers to hide these things. The linux helpers create ODP threads
their way. the <whatever other OS> creates them their way. This "linux"
should eventually be removed so that helpers becomes an absrtation of any
OS. I am happy to do it now, if we can agree on that!

Christophe

>

> On 19 April 2016 at 05:02, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@nokia.com> wrote:

>

>> As I said, our test need to be thread agnostic (because we must test both

>> model) but those helpers would be for other apps (that are not agnostic).

>> Only pthread/process validation test cases would be needed (as any other

>> helper code). Thread creation is so common task for any app that those are

>> surely needed. Implementation of the agnostic and not agnostic functions

>> may share the core parts of the code.

>>

>>

>>

>> -Petri

>>

>>

>>

>>

>>

>> *From:* EXT Christophe Milard [mailto:christophe.milard@linaro.org]

>> *Sent:* Tuesday, April 19, 2016 11:10 AM

>>

>> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com>

>> *Cc:* lng-odp@lists.linaro.org; mike.holmes@linaro.org

>> *Subject:* Re: [GIT PULL ODP] running things in process mode

>>

>>

>>

>> hmmm.

>>

>> OK. so you want to leave the old functions because they give the

>> possibility to pass pointers to threads (and get pointer back), whereas

>> processes would just return an int?

>>

>> (and by doing the change I did, I had to lower all these to the lowest

>> common denominator, returning an int in both cases).

>>

>> Possibly makes sense. The question is really if we want to see that in

>> the helper code, or if this is so rare so that the tests willing to do so

>> can use fork and pthread directely...

>>

>> No platform agnostic test should be allowed to do so, actually. And the

>> single platform dependent test we have today does nor create odpthreads.

>>

>> Not sure I really like the idea to leave unused code "just in case", but

>> If I get your blessings for the lot except the last patch, I am an happy

>> man. :-)

>>

>> We can delay and see for the "removing dead code", if you want

>>

>>

>>

>> If which case my proposal for a fifth parameter should be delayed as well.

>>

>>

>>

>> Christophe

>>

>>

>>

>> On 19 April 2016 at 09:58, Savolainen, Petri (Nokia - FI/Espoo) <

>> petri.savolainen@nokia.com> wrote:

>>

>> Actually, it’s not the control of thread/process creation but the

>> representation of those. With pthread create, user expects to give void

>> *(*start)(void *) function pointer for thread starting point (with void*

>> return type) and with processes there’s no entry point, but current thread

>> of execution is forked. Also parameters are different (pid_t, status,

>> pthread_attr_t, …)

>>

>>

>>

>> -Petri

>>

>>

>>

>>

>>

>> *From:* EXT Christophe Milard [mailto:christophe.milard@linaro.org]

>> *Sent:* Tuesday, April 19, 2016 10:40 AM

>> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com>

>> *Cc:* lng-odp@lists.linaro.org; mike.holmes@linaro.org

>> *Subject:* Re: [GIT PULL ODP] running things in process mode

>>

>>

>>

>> Thanks for your comment, Petri. You are welcome to point out the coding

>> guideline faults you have seen, so I don't miss them. I will review for the

>> variable declaration position.

>>

>> Regarding your other comments, wouldn't it be better to add a fifth

>> parameter to odph_linux_odpthreads_create() like this:

>>

>>

>>

>> +int odph_linux_odpthreads_create(odph_linux_odpthread_t *thread_tbl,

>>

>> +                                const odp_cpumask_t *mask,

>>

>> +                                int (*start_routine)(void *), void *arg,

>>

>> +                                odp_thread_type_t thr_type,

>>

>> +                                odph_thread_implementation_e imp);

>>

>>

>>

>> where odph_thread_implementation_e would be an enum: {

>>

>> ANY (i.e. helpers decide according to command line)

>>

>> FORCE_PTHREAD

>>

>> FORCE_PROCESS

>>

>> }

>>

>>

>>

>> platform agnostic tests would then only be allowed to use ANY. tests on

>> the platform side could pick what they want.

>>

>> And we can remove the dead code.

>>

>>

>>

>> Make sense?

>>

>>

>>

>>

>>

>> On 19 April 2016 at 09:19, Savolainen, Petri (Nokia - FI/Espoo) <

>> petri.savolainen@nokia.com> wrote:

>>

>> Hi,

>>

>> Looks reasonable. There are some style / coding guideline faults (like

>> should introduce all variables in the beginning of a code block). Also pure

>> process and pthread helpers should remain (suggesting to leave out "helper:

>> removing dead code"), since not all apps want to obscure whether process or

>> pthread is used. Opaque thread type helps our purposes to test everything

>> on both pthread and process models, but other apps are likely to care only

>> one model.

>>

>> -Petri

>>

>>

>>

>>

>> > -----Original Message-----

>> > From: EXT Christophe Milard [mailto:christophe.milard@linaro.org]

>> > Sent: Monday, April 18, 2016 5:00 PM

>> > To: lng-odp@lists.linaro.org; Savolainen, Petri (Nokia - FI/Espoo)

>> > <petri.savolainen@nokia.com>

>> > Cc: mike.holmes@linaro.org

>> > Subject: [GIT PULL ODP] running things in process mode

>> >

>> > 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

>> > 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

>> >

>> >   validation: scheduler: correct pause/resume sequence (2016-04-18

>> > 15:03:22 +0300)

>> >

>> > are available in the git repository at:

>> >

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

>> > test_in_process_mode_v1

>> >

>> > for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

>> >

>> >   helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423

>> ++++++++++++++--

>> > -----

>> >  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                    |   6 +-

>> >  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                        |   6 +-

>> >  test/validation/pool/pool.h                        |   2 +-

>> >  test/validation/pool/pool_main.c                   |   4 +-

>> >  test/validation/queue/queue.c                      |   6 +-

>> >  test/validation/queue/queue.h                      |   2 +-

>> >  test/validation/queue/queue_main.c                 |   4 +-

>> >  test/validation/random/random.c                    |   6 +-

>> >  test/validation/random/random.h                    |   2 +-

>> >  test/validation/random/random_main.c               |   4 +-

>> >  test/validation/scheduler/scheduler.c              |  14 +-

>> >  test/validation/scheduler/scheduler.h              |   2 +-

>> >  test/validation/scheduler/scheduler_main.c         |   4 +-

>> >  test/validation/shmem/shmem.c                      |  12 +-

>> >  test/validation/shmem/shmem.h                      |   2 +-

>> >  test/validation/shmem/shmem_main.c                 |   4 +-

>> >  test/validation/std_clib/std_clib.c                |   6 +-

>> >  test/validation/std_clib/std_clib.h                |   2 +-

>> >  test/validation/std_clib/std_clib_main.c           |   4 +-

>> >  test/validation/system/system.c                    |   6 +-

>> >  test/validation/system/system.h                    |   2 +-

>> >  test/validation/system/system_main.c               |   4 +-

>> >  test/validation/thread/thread.c                    |  10 +-

>> >  test/validation/thread/thread.h                    |   2 +-

>> >  test/validation/thread/thread_main.c               |   4 +-

>> >  test/validation/time/time.c                        |   6 +-

>> >  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, 1080 insertions(+), 697 deletions(-)

>> >  rename helper/test/{thread.c => odpthreads.c} (68%)

>> >  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

>>

>>

>>

>>

>>

>

>

>

> --

> Mike Holmes

> Technical Manager - Linaro Networking Group

> Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs

> "Work should be fun and collaborative, the rest follows"

>

>

>
Christophe Milard April 19, 2016, 1:16 p.m. UTC | #9
Not sure I like the idea to write code that is not used.
Everything that could be written in a platform agnostic way should be done
this way. The presence of these process/threads specific functions may just
suggest to use them.
Nothing of what we have been doing so far needed this distinction.
This can be looked at if this problem araise.

Christophe.

On 19 April 2016 at 11:02, Savolainen, Petri (Nokia - FI/Espoo) <
petri.savolainen@nokia.com> wrote:

> As I said, our test need to be thread agnostic (because we must test both

> model) but those helpers would be for other apps (that are not agnostic).

> Only pthread/process validation test cases would be needed (as any other

> helper code). Thread creation is so common task for any app that those are

> surely needed. Implementation of the agnostic and not agnostic functions

> may share the core parts of the code.

>

>

>

> -Petri

>

>

>

>

>

> *From:* EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> *Sent:* Tuesday, April 19, 2016 11:10 AM

>

> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com>

> *Cc:* lng-odp@lists.linaro.org; mike.holmes@linaro.org

> *Subject:* Re: [GIT PULL ODP] running things in process mode

>

>

>

> hmmm.

>

> OK. so you want to leave the old functions because they give the

> possibility to pass pointers to threads (and get pointer back), whereas

> processes would just return an int?

>

> (and by doing the change I did, I had to lower all these to the lowest

> common denominator, returning an int in both cases).

>

> Possibly makes sense. The question is really if we want to see that in the

> helper code, or if this is so rare so that the tests willing to do so can

> use fork and pthread directely...

>

> No platform agnostic test should be allowed to do so, actually. And the

> single platform dependent test we have today does nor create odpthreads.

>

> Not sure I really like the idea to leave unused code "just in case", but

> If I get your blessings for the lot except the last patch, I am an happy

> man. :-)

>

> We can delay and see for the "removing dead code", if you want

>

>

>

> If which case my proposal for a fifth parameter should be delayed as well.

>

>

>

> Christophe

>

>

>

> On 19 April 2016 at 09:58, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@nokia.com> wrote:

>

> Actually, it’s not the control of thread/process creation but the

> representation of those. With pthread create, user expects to give void

> *(*start)(void *) function pointer for thread starting point (with void*

> return type) and with processes there’s no entry point, but current thread

> of execution is forked. Also parameters are different (pid_t, status,

> pthread_attr_t, …)

>

>

>

> -Petri

>

>

>

>

>

> *From:* EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> *Sent:* Tuesday, April 19, 2016 10:40 AM

> *To:* Savolainen, Petri (Nokia - FI/Espoo) <petri.savolainen@nokia.com>

> *Cc:* lng-odp@lists.linaro.org; mike.holmes@linaro.org

> *Subject:* Re: [GIT PULL ODP] running things in process mode

>

>

>

> Thanks for your comment, Petri. You are welcome to point out the coding

> guideline faults you have seen, so I don't miss them. I will review for the

> variable declaration position.

>

> Regarding your other comments, wouldn't it be better to add a fifth

> parameter to odph_linux_odpthreads_create() like this:

>

>

>

> +int odph_linux_odpthreads_create(odph_linux_odpthread_t *thread_tbl,

>

> +                                const odp_cpumask_t *mask,

>

> +                                int (*start_routine)(void *), void *arg,

>

> +                                odp_thread_type_t thr_type,

>

> +                                odph_thread_implementation_e imp);

>

>

>

> where odph_thread_implementation_e would be an enum: {

>

> ANY (i.e. helpers decide according to command line)

>

> FORCE_PTHREAD

>

> FORCE_PROCESS

>

> }

>

>

>

> platform agnostic tests would then only be allowed to use ANY. tests on

> the platform side could pick what they want.

>

> And we can remove the dead code.

>

>

>

> Make sense?

>

>

>

>

>

> On 19 April 2016 at 09:19, Savolainen, Petri (Nokia - FI/Espoo) <

> petri.savolainen@nokia.com> wrote:

>

> Hi,

>

> Looks reasonable. There are some style / coding guideline faults (like

> should introduce all variables in the beginning of a code block). Also pure

> process and pthread helpers should remain (suggesting to leave out "helper:

> removing dead code"), since not all apps want to obscure whether process or

> pthread is used. Opaque thread type helps our purposes to test everything

> on both pthread and process models, but other apps are likely to care only

> one model.

>

> -Petri

>

>

>

>

> > -----Original Message-----

> > From: EXT Christophe Milard [mailto:christophe.milard@linaro.org]

> > Sent: Monday, April 18, 2016 5:00 PM

> > To: lng-odp@lists.linaro.org; Savolainen, Petri (Nokia - FI/Espoo)

> > <petri.savolainen@nokia.com>

> > Cc: mike.holmes@linaro.org

> > Subject: [GIT PULL ODP] running things in process mode

> >

> > 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

> > 1f58a8fd51ab0304c0ae767e225abfec8448ac0b:

> >

> >   validation: scheduler: correct pause/resume sequence (2016-04-18

> > 15:03:22 +0300)

> >

> > are available in the git repository at:

> >

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

> > test_in_process_mode_v1

> >

> > for you to fetch changes up to af9f80c6e9faaaed0c26b0825c25b5d5bb8ef028:

> >

> >   helper: removing dead code (2016-04-18 15:25:48 +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                                     | 423

> ++++++++++++++--

> > -----

> >  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                    |   6 +-

> >  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                        |   6 +-

> >  test/validation/pool/pool.h                        |   2 +-

> >  test/validation/pool/pool_main.c                   |   4 +-

> >  test/validation/queue/queue.c                      |   6 +-

> >  test/validation/queue/queue.h                      |   2 +-

> >  test/validation/queue/queue_main.c                 |   4 +-

> >  test/validation/random/random.c                    |   6 +-

> >  test/validation/random/random.h                    |   2 +-

> >  test/validation/random/random_main.c               |   4 +-

> >  test/validation/scheduler/scheduler.c              |  14 +-

> >  test/validation/scheduler/scheduler.h              |   2 +-

> >  test/validation/scheduler/scheduler_main.c         |   4 +-

> >  test/validation/shmem/shmem.c                      |  12 +-

> >  test/validation/shmem/shmem.h                      |   2 +-

> >  test/validation/shmem/shmem_main.c                 |   4 +-

> >  test/validation/std_clib/std_clib.c                |   6 +-

> >  test/validation/std_clib/std_clib.h                |   2 +-

> >  test/validation/std_clib/std_clib_main.c           |   4 +-

> >  test/validation/system/system.c                    |   6 +-

> >  test/validation/system/system.h                    |   2 +-

> >  test/validation/system/system_main.c               |   4 +-

> >  test/validation/thread/thread.c                    |  10 +-

> >  test/validation/thread/thread.h                    |   2 +-

> >  test/validation/thread/thread_main.c               |   4 +-

> >  test/validation/time/time.c                        |   6 +-

> >  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, 1080 insertions(+), 697 deletions(-)

> >  rename helper/test/{thread.c => odpthreads.c} (68%)

> >  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

>

>

>

>

>