.. _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
:kconfig:`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 */
    };
    ...
    ...
