-
A memory allocator enables applications to transparently allocate data into a file system.
-
From applications, Metall looks like a normal heap allocator.
-
Applications can keep their data beyond single process life cycles and reattach the data in succeeding runs.
-
Leverages the memory-mapped file mechanism (i.e., mmap(2)) to map application data in files to the main memory.
-
-
Employs the API developed by Boost.Interprocess.
- Useful for allocating C++ data structures (including STL containers).
-
Incorporates state-of-the-art allocation algorithms.
-
Provides a space-efficient snapshot/versioning, leveraging the reflink copy mechanism in file systems.
-
See details: Metall overview slides.
Metall consists of only header files and requires some header files in Boost C++ Libraries.
All core files exist under metall/include/metall/.
- Boost C++ Libraries 1.80 or more.
- Build is not required; needs only their header files.
- C++17 compiler
- Tested with GCC 8.1 or more; however, 8.3 or more is recommended due to early implementation of the C++ Filesystem library.
To build your program with Metall, all you have to do is just setting include paths such as '-I' or CPLUS_INCLUDE_PATH.
For example,
# Download Boost (Boost C++ Libraries 1.80 or more is required)
# One can skip this step if Boost is already available.
wget https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz
tar xvf boost_1_80_0.tar.gz
export BOOST_ROOT=$PWD/boost_1_80_0
git clone https://github.com/LLNL/metall
export METALL_INCLUDE=$PWD/metall/include
g++ -std=c++17 your_program.cpp -lstdc++fs -I${BOOST_ROOT} -I${METALL_INCLUDE}
Clang can be used instead of GCC to build Metall. However, we haven't tested it intensively.
Metall package is also available on Spack.
As Metall depends on Boost C++ Libraries, Spack also installs a proper version of Boost C++ Libraries automatically, if needed.
# Install Metall and Boost C++ Libraries
spack install metall
# Sets environment variables: BOOST_ROOT and METALL_ROOT.
# Boost C++ Libraries and Metall are installed at the locations, respectively.
spack load metall
# Build a program that uses Metall
# Please note that one has to put 'include' at the end of BOOST_ROOT and METALL_ROOT
g++ -std=c++17 your_program.cpp -lstdc++fs -I${BOOST_ROOT}/include -I${METALL_ROOT}/include
Metall is also available on Conan, thanks to the DICE research group. Conan Metall package information is here.
To download and/or link Metall package from a CMake project, see example CMake files placed here.
Metall repository contains some example programs under example directory. One can use CMake to build the examples. For more details, see a page here.
A Doxygen configuration file is here.
To generate API document:
cd metall
mkdir build_doc
cd build_doc
doxygen ../docs/Doxyfile.in
Keita Iwabuchi, Karim Youssef, Kaushik Velusamy, Maya Gokhale, Roger Pearce,
Metall: A persistent memory allocator for data-centric analytics,
Parallel Computing, 2022, 102905, ISSN 0167-8191, https://doi.org/10.1016/j.parco.2022.102905.
-
Parallel Computing (journal)
-
arXiv (preprint)
-
GitHub Issues is open.
-
Primary contact: Keita Iwabuchi (LLNL).
Metall is distributed under the terms of both the MIT license and the Apache License (Version 2.0). Users may choose either license, at their option.
All new contributions must be made under both the MIT and Apache-2.0 licenses.
See LICENSE-MIT, LICENSE-APACHE, NOTICE, and COPYRIGHT for details.
SPDX-License-Identifier: (Apache-2.0 OR MIT)
LLNL-CODE-768617