zephyr/tests/benchmarks/posix/threads
..
src
CMakeLists.txt
Kconfig
prj-assert.conf
prj.conf
README.rst
testcase.yaml

POSIX Thread Benchmark
######################

Overview
********

This benchmark creates and joins as many threads as possible within a configurable time window.
It provides a rough comparison Zephyr's POSIX threads (pthreads) with Zephyr's kernel threads
(k_threads) API, highlighting the overhead of the POSIX. Ideally, this overhead would shrink over
time.

Sample output of the benchmark::

    *** Booting Zephyr OS build v4.0.0-1410-gfca33facee37 ***
    ASSERT: y
    BOARD: qemu_riscv64
    NUM_CPUS: 1
    TEST_DELAY_US: 0
    TEST_DURATION_S: 5
    SMP: n
    API, Thread ID, time(s), threads, cores, rate (threads/s/core)
    k_thread, ALL, 5, 47663, 1, 9532
    pthread, ALL, 5, 28180, 1, 5636
    PROJECT EXECUTION SUCCESSFUL

To observe periodic statistics on a per-thread basis in addition to the summary of statistics
printed at the end of execution, use CONFIG_TEST_PERIODIC_STATS.

Several other options can be tuned on an as-needed basis:

- CONFIG_MP_MAX_NUM_CPUS - Number of CPUs to use in parallel.
- CONFIG_TEST_DURATION_S - Number of seconds to run the test.
- CONFIG_TEST_DELAY_US - Microseconds to delay between pthread join and create.
- CONFIG_TEST_KTHREADS - Exercise k_threads in the test app.
- CONFIG_TEST_PTHREADS - Exercise pthreads in the test app.
- CONFIG_TEST_STACK_SIZE - Size of each thread stack in this test.

The following table summarizes the purposes of the different extra
configuration files that are available to be used with this benchmark.
A tester may mix and match them allowing them different scenarios to
be easily compared the default.

+-----------------------------+----------------------------------------+
| prj-assert.conf             | Enable assertions for API verification |
+-----------------------------+----------------------------------------+