.. _optimization_tools:

Optimization Tools
##################

.. _footprint_tools:

Footprint and Memory Usage
**************************

The build system offers 3 targets to view and analyse RAM, ROM and stack usage
in generated images. The tools run on the final image and give information
about size of symbols and code being used in both RAM and ROM. Additionally,
with features available through the compiler, we can also generate worst-case
stack usage analysis:

Tools that are available as build system targets:

Build Target: puncover
======================

This target uses a 3rd party tools called puncover which can be found `here
<https://github.com/HBehrens/puncover>`_. When this target is built, it will
launch a local web server which will allow you to open a web client and browse
the files and view their ROM, RAM and stack usage. Before you can use this
target, you will have to install the puncover python module::

    pip3 install git+https://github.com/HBehrens/puncover --user


Then:

.. zephyr-app-commands::
    :tool: all
    :app: samples/hello_world
    :board: reel_board
    :goals: puncover


To view worst-case stack usage analysis, build this with the
:option:`CONFIG_STACK_USAGE` enabled.

.. zephyr-app-commands::
    :tool: all
    :app: samples/hello_world
    :board: reel_board
    :goals: puncover
    :gen-args: -DCONFIG_STACK_USAGE=y


Build Target: ram_report
========================

List all compiled objects and their RAM usage in a tabular form with bytes
per symbol and the percentage it uses. The data is grouped based on the file
system location of the object in the tree and the file containing the symbol.

Use the ``ram_report`` target with your board:

.. zephyr-app-commands::
    :tool: all
    :app: samples/hello_world
    :board: reel_board
    :goals: ram_report

which will generate something similar to the output below::

    Path                                                                                    Size       %
    ==============================================================================================================
    ...
    ...
    SystemCoreClock                                                                          4     0.08%
    _kernel                                                                                 48     0.99%
    _sw_isr_table                                                                          384     7.94%
    cli.10544                                                                               16     0.33%
    gpio_initialized.9765                                                                    1     0.02%
    on.10543                                                                                 4     0.08%
    poll_out_lock.9764                                                                       4     0.08%
    z_idle_threads                                                                         128     2.65%
    z_interrupt_stacks                                                                    2048    42.36%
    z_main_thread                                                                          128     2.65%
    arch                                                                                       1     0.02%
    arm                                                                                      1     0.02%
        core                                                                                   1     0.02%
        aarch32                                                                              1     0.02%
            cortex_m                                                                           1     0.02%
            mpu                                                                              1     0.02%
                arm_mpu.c                                                                      1     0.02%
                static_regions_num                                                           1     0.02%
    drivers                                                                                  536    11.09%
    clock_control                                                                          100     2.07%
        nrf_power_clock.c                                                                    100     2.07%
        __device_clock_nrf                                                                  16     0.33%
        data                                                                                80     1.65%
        hfclk_users                                                                          4     0.08%
    ...
    ...


Build Target: rom_report
========================

List all compiled objects and their ROM usage in a tabular form with bytes
per symbol and the percentage it uses. The data is grouped based on the file
system location of the object in the tree and the file containing the symbol.

Use the ``rom_report`` to get the ROM report:

.. zephyr-app-commands::
    :tool: all
    :app: samples/hello_world
    :board: reel_board
    :goals: rom_report

which will generate something similar to the output below::

    Path                                                                                    Size       %
    ==============================================================================================================
    ...
    ...
    CSWTCH.5                                                                                 4     0.02%
    SystemCoreClock                                                                          4     0.02%
    __aeabi_idiv0                                                                            2     0.01%
    __udivmoddi4                                                                           702     3.37%
    _sw_isr_table                                                                          384     1.85%
    delay_machine_code.9114                                                                  6     0.03%
    levels.8826                                                                             20     0.10%
    mpu_config                                                                               8     0.04%
    transitions.10558                                                                       12     0.06%
    arch                                                                                    1194     5.74%
    arm                                                                                   1194     5.74%
        core                                                                                1194     5.74%
        aarch32                                                                           1194     5.74%
            cortex_m                                                                         852     4.09%
            fault.c                                                                        400     1.92%
                bus_fault.isra.0                                                              60     0.29%
                mem_manage_fault.isra.0                                                       56     0.27%
                usage_fault.isra.0                                                            36     0.17%
                z_arm_fault                                                                  232     1.11%
                z_arm_fault_init                                                              16     0.08%
            irq_init.c                                                                      24     0.12%
                z_arm_interrupt_init                                                          24     0.12%
            mpu                                                                            352     1.69%
                arm_core_mpu.c                                                                56     0.27%
                z_arm_configure_static_mpu_regions                                          56     0.27%
                arm_mpu.c                                                                    296     1.42%
                __init_sys_init_arm_mpu_init0                                                8     0.04%
                arm_core_mpu_configure_static_mpu_regions                                   20     0.10%
                arm_core_mpu_disable                                                        16     0.08%
                arm_core_mpu_enable                                                         20     0.10%
                arm_mpu_init                                                                92     0.44%
                mpu_configure_regions                                                      140     0.67%
            thread_abort.c                                                                  76     0.37%
                z_impl_k_thread_abort
                76     0.37%
    ...
    ...


Data Structures
****************


Build Target: pahole
=====================

Poke-a-hole (pahole) is an object-file analysis tool to find the size of
the data structures, and the holes caused due to aligning the data
elements to the word-size of the CPU by the compiler.

Poke-a-hole (pahole) must be installed prior to using this target. It can be
obtained from https://git.kernel.org/pub/scm/devel/pahole/pahole.git and is
available in the dwarves package in both fedora and ubuntu::

    sudo apt-get install dwarves

or in fedora::

    sudo dnf install dwarves


.. zephyr-app-commands::
    :tool: all
    :app: samples/hello_world
    :board: reel_board
    :goals: pahole


After running this target, pahole will output the results to the console::

    /* Used at: zephyr/isr_tables.c */
    /* <80> ../include/sw_isr_table.h:30 */
    struct _isr_table_entry {
            void *                     arg;                  /*     0     4 */
            void                       (*isr)(void *);       /*     4     4 */

            /* size: 8, cachelines: 1, members: 2 */
            /* last cacheline: 8 bytes */
    };
    /* Used at: zephyr/isr_tables.c */
    /* <eb> ../include/arch/arm/aarch32/cortex_m/mpu/arm_mpu_v7m.h:134 */
    struct arm_mpu_region_attr {
            uint32_t                   rasr;                 /*     0     4 */

            /* size: 4, cachelines: 1, members: 1 */
            /* last cacheline: 4 bytes */
    };
    /* Used at: zephyr/isr_tables.c */
    /* <112> ../include/arch/arm/aarch32/cortex_m/mpu/arm_mpu.h:24 */
    struct arm_mpu_region {
            uint32_t                   base;                 /*     0     4 */
            const char  *              name;                 /*     4     4 */
            arm_mpu_region_attr_t      attr;                 /*     8     4 */

            /* size: 12, cachelines: 1, members: 3 */
            /* last cacheline: 12 bytes */
    };
    ...
    ...
