README.markdown 1.81 KB
Newer Older
1 2
AML: Building Blocks for Memory Management
=========================================
3

4 5 6
AML is a library to manage byte-addressable memory devices. The library
is designed as a collection of building blocks, so that users can create custom
memory management policies for allocation and placement of data across devices.
7

8
This library is still in the prototyping phase. APIs might break often.
9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
# General Architecture

The architecture of the library relies on two principles: type-specific
initialization functions, and generic interfaces to each building block.

The type-specific initialization functions include:
  - `_DECL` macros to declare a typed building block on the stack.
  - `_create_` functions to allocate a building block and return its pointer.
  - `_init_` functions to initialize stack-allocated building blocks.

Generic interfaces all take a pointer to a building block.

# Low-Level Building Blocks

Low-level building blocks provide the basic mechanisms required to implement
any high-level memory management policy. This include:
  - *arenas:* allocation policies inside a memory region
  - *areas:* actual memory reservation on devices
  - *bindings:* mapping pages/tiles of memory unto multiple devices
  - *tilings:* chunking data

# High-Level Building Blocks

High-level building blocks use the low-level ones to provide fancier memory
management facilities, including:
  - *dmas:* moving data across areas
  - *scratchpads:* using an area as an explicitly managed cache of another one
37 38 39 40 41 42 43 44

# Version Management
AML versionning is similar to [semantic versionning](https://semver.org/).
AML version is a string composed of 3 integers separated by a dot: "0.1.0"
The first integer is the major version and all versions with the same
major version are supposed ABI compatible except for major version 0 which is
considered unstable.