zephyr/samples/microkernel/benchmark/footprint
Dirk Brandewie ca97c3863d x86: collapse AUTOMATIC_FP_ENABLING into FP_SHARING
This avoids the case where the system has multiple threads using
floating point and the threads were not properly configured to use
floating point. The misconfigured threads will only take the fault on
first use of a floating point instruction.

Change-Id: I2be9f9f145bc4e7659e07154021ccc237774897b
Signed-off-by: Dirk Brandewie <dirk.j.brandewie@intel.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2016-02-05 20:24:20 -05:00
..
src
Makefile
micro_max.mdef
micro_min.mdef
micro_reg.mdef
prj_max_arm.conf arm: remove ENHANCED_SECURITY config from projects 2016-02-05 20:24:20 -05:00
prj_max_x86.conf x86: collapse AUTOMATIC_FP_ENABLING into FP_SHARING 2016-02-05 20:24:20 -05:00
prj_min_arm.conf arm: remove ENHANCED_SECURITY config from projects 2016-02-05 20:24:20 -05:00
prj_min_x86.conf x86: change the default for ENHANCED_SECURITY to no 2016-02-05 20:24:20 -05:00
prj_reg_arm.conf arm: remove ENHANCED_SECURITY config from projects 2016-02-05 20:24:20 -05:00
prj_reg_x86.conf x86: change the default for ENHANCED_SECURITY to no 2016-02-05 20:24:20 -05:00
README.txt Update Title in sample project README.txt files 2016-02-05 20:15:21 -05:00
testcase.ini sanity: do not run footprint-min on galileo 2016-02-05 20:24:19 -05:00

Title: Microkernel Footprint Measurement

Description:

This project is designed to characterize the memory requirements of a
standard microkernel image running on an Atom target.


The project can be built using several configurations:

minimal (a "do nothing" image that has support for few kernel capabilities)
-------
- Idle task is only task in system.
- Microkernel server is only fiber in system.
- No system timer support.
- ISR for the spurious interrupt handling is present.
- IDT and stack memory sizes are very limited.
- Provides support for 2 task priorities.

regular (a "typical" image that has support for some kernel capabilities)
-------
- As for "minimal" configuration, except as noted below.
- Supports larger IDT and utilizes larger stacks.
- A statically linked dummy ISR is present.
- Has "foreground" task that prints a message to the console via printk().
- Provides support for 16 task priorities.
- Supports system timer, along with task scheduler support for time slicing.
- Links in support for EVENT, MUTEX, FIFO, and MAP objects.

maximal (a "complex" image that has support for many kernel capabilities)
-------
- As for "regular" configuration, except as noted below.
- Supports full IDT and utilizes even larger stacks.
- Provides support for 64 task priorities.
- Foreground task dynamically links in the dummy ISR, rather than having
  it statically linked.
- Foreground task prints a message to the console via printf(),
  rather than printk().
- Links in support for SEMAPHORE, PIPE, MAILBOX, and POOL objects.
- Links in support for task device interrupt handling and additional task APIs.
- Adds advanced power management support (including tickless idle).
- Adds floating point support (for x87 FPU, including SSE).


NOTE:
- These configurations utilize standard security only.

--------------------------------------------------------------------------------

Building and Running Project:

This microkernel project does not generate any output in the default case
(TEST=min). In the regular case (TEST=reg) and the maximal case (TEST=max),
it outputs to the console. It can be built and executed on QEMU as follows:

    make TEST=min qemu          (minimal configuration)

    make TEST=reg qemu          (regular configuration)

    make TEST=max qemu          (maximal configuration)

--------------------------------------------------------------------------------

Troubleshooting:

Problems caused by out-dated project information can be addressed by
issuing one of the following commands then rebuilding the project:

    make clean          # discard results of previous builds
                        # but keep existing configuration info
or
    make pristine       # discard results of previous builds
                        # and restore pre-defined configuration info

--------------------------------------------------------------------------------

Sample Output:

The resulting image is bootable for all configurations, but produces different
output in each case.

minimal
-------
This configuration does NOT produce any output. To observe its operation,
invoke it using gdb and observe that:
- the kernel's timer ISR & _k_server fiber increment "K_LowTime" on a regular
  basis
- nano_cpu_idle() is invoked by the idle task each time K_LowTime is incremented

regular
-------
This configuration prints the following message to the console:

  Running regular microkernel configuration

maximal
-------
This configuration prints the following message to the console:

  Running maximal microkernel configuration

--------------------------------------------------------------------------------

Additional notes:

Various host utilities (such as the Unix "size" utility) can be used to
determine the footprint of the resulting outdir/microkernel.elf image.