zephyr/lib/os/Kconfig.heap

154 lines
5.2 KiB
Plaintext

# Copyright (c) 2021 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
menu "Heap and Memory Allocation"
config SYS_HEAP_VALIDATE
bool "Internal heap validity checking"
help
The sys_heap implementation is instrumented for extensive
internal validation. Leave this off by default, unless
modifying the heap code or (maybe) when running in
environments that require sensitive detection of memory
corruption.
config SYS_HEAP_ALLOC_LOOPS
int "Number of tries in the inner heap allocation loop"
default 3
help
The sys_heap allocator bounds the number of tries from the
smallest chunk level (the one that might not fit the
requested allocation) to maintain constant time performance.
Setting this to a high level will cause the heap to return
more successful allocations in situations of high
fragmentation, at the cost of potentially significant
(linear time) searching of the free list. The default is
three, which results in an allocator with good statistical
properties ("most" allocations that fit will succeed) but
keeps the maximum runtime at a tight bound so that the heap
is useful in locked or ISR contexts.
config SYS_HEAP_RUNTIME_STATS
bool "System heap runtime statistics"
help
Gather system heap runtime statistics.
config SYS_HEAP_LISTENER
bool "sys_heap event notifications"
select HEAP_LISTENER
help
This allows application to listen for sys_heap events,
such as memory allocation and de-allocation.
config HEAP_LISTENER
bool
help
Hidden option to enable API for registering and notifying
listeners of certain events related to a heap usage,
such as the heap resize.
choice
prompt "Supported heap sizes"
depends on !64BIT
default SYS_HEAP_SMALL_ONLY if (SRAM_SIZE <= 256)
default SYS_HEAP_AUTO
help
Heaps using reduced-size chunk headers can accommodate so called
"small" heaps with a total size of 262136 bytes or less.
Heaps using full-size chunk headers can have a total size up to
16383 megabytes. The overhead is of course bigger.
On 32-bit system the tradeoff is selectable between:
- "small" heaps with low memory and runtime overhead;
- "big" heaps with bigger memory overhead even for small heaps;
- "auto" providing optimal memory overhead in all cases but with
a higher runtime overhead and somewhat bigger code footprint.
On 64-bit systems the "big" chunk header size conveniently provides
the needed alignment on returned memory allocations. Small chunk
headers would require alignment padding up to the big header size
anyway so "big" heap is the only option in that case.
config SYS_HEAP_SMALL_ONLY
bool "Support for small heaps only"
help
Select this to optimize the code and memory usage if all your
heaps are 262136 bytes or less.
config SYS_HEAP_BIG_ONLY
bool "Support for big heaps only"
help
Select this to optimize the code for big heaps only. This can
accommodate any heap size but memory usage won't be as
efficient with small sized heaps.
config SYS_HEAP_AUTO
bool "Support for both small and big heaps at run time"
help
This option optimizes memory usage for each heap according to
their size albeit with some overhead in code size and execution.
endchoice
config SHARED_MULTI_HEAP
bool "Shared multi-heap manager"
help
Enable support for a shared multi-heap manager that uses the
multi-heap allocator to manage a set of reserved memory regions with
different capabilities / attributes (cacheable, non-cacheable,
etc...) defined in the DT.
config SYS_MEM_BLOCKS
bool "(Yet Another) Memory Blocks Allocator"
help
This enables support for memory block allocator where:
() All memory blocks have a single fixed size.
() Multiple blocks can be allocated or freed at the same time.
() A group of blocks allocated together may not be contiguous.
This is useful for operations such as scatter-gather DMA
transfers.
() Bookkeeping of allocated blocks is done outside of
the associated buffer (unlike memory slab). This allows
the buffer to reside in memory regions where these can be
powered down to conserve energy.
config SYS_MEM_BLOCKS_LISTENER
bool "Memory Blocks Allocator event notifications"
depends on SYS_MEM_BLOCKS
select HEAP_LISTENER
help
This allows application to listen for memory blocks allocator
events, such as memory allocation and de-allocation.
config SYS_MEM_BLOCKS_RUNTIME_STATS
bool "Memory blocks runtime statistics"
depends on SYS_MEM_BLOCKS
help
This option enables the tracking and reporting of the memory
blocks statistics related to the current and maximum number
of allocations in a given memory block.
config OBJ_CORE_SYS_MEM_BLOCKS
bool "Kernel object for memory blocks"
depends on SYS_MEM_BLOCKS && OBJ_CORE
default y if SYS_MEM_BLOCKS && OBJ_CORE
help
This option allows object cores to be integrated into memory block
objects.
config OBJ_CORE_STATS_SYS_MEM_BLOCKS
bool "Object core statistics for memory blocks"
depends on SYS_MEM_BLOCKS && OBJ_CORE_STATS
default y if SYS_MEM_BLOCKS && OBJ_CORE_STATS
select SYS_MEM_BLOCKS_RUNTIME_STATS
help
This option integrates the object core statistics framework into
the memory blocks.
endmenu