Skip to content

A community-oriented list of useful NUMA-related libraries, tools, and other resources

License

Notifications You must be signed in to change notification settings

domargan/awesome-numa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 

Repository files navigation

Awesome NUMA

A community-oriented list of libraries, tools, and resources aimed to assist with NUMA-aware software development.

Non-Uniform Memory Access (NUMA) refers to multiprocessor systems whose memory is divided into multiple memory nodes.

Contributing

To add, remove or change things on the list: please submit a pull request to the GitHub repository.

NUMA library bindings and interfaces

  • libnuma - The libnuma shared library to control NUMA policy for processes or shared memory on Linux
    • numa-rs - Rust bindings for libnuma
    • go-numa - Go bindings for libnuma
    • jnuma - Java bindings for libnuma
    • py-numa - Python bindings for libnuma
    • ocaml-numa - OCAML bindings for libnuma
  • libNumaAPI - A cross-platform API wrapper for NUMA architecture
  • hwloc - A portable API to detect and exploit the topology of parallel architectures
  • Windows NUMA API - Official Microsoft Win32 NUMA API

NUMA-aware memory placement and scheduling

  • numactl - A program to run other programs with a specific NUMA policy
  • numatool - A wrapper to linux kernels move_pages system call to balance processes' pages across NUMA nodes
  • libtorque - A threaded, continuations-based I/O event library for manycore NUMA machines
  • pgasus - A C++ parallel programming framework for NUMA systems, based on PGAS semantics
  • NUMASK - A skip list designed to exploit the characteristics of NUMA architectures to improve performance
  • golang-numa - A golang utility library for NUMA-aware code
  • NumaAllocator - A simple C++ header NUMA memory allocator
  • numanji - A rustlang Local-affinity first NUMA-aware allocator with optional fallback
  • Tesson - A tool for NUMA-aware sharding with Docker
  • Umpire - An application-focused API for memory management on NUMA & GPU architectures
  • memkind - A heap manager which enables control of memory characteristics and a partitioning of the heap between kinds of memory

Observation and profiling tools

  • numastat - A program display NUMA allocation statistics
  • NUMACC - A golang-based tool to check CPU affinity and NUMA configuration for containers and pods
  • NumaTOP - An observation tool for runtime memory locality characterization and analysis of processes and threads running on a NUMA system
  • SnuMAP - A NUMA performance profiler
  • irqstat - A /proc/interrupts watcher designed for NUMA systems
  • Numa-Trace - A Pin tool to track NUMA memory accesses
  • NUMAPROF - A NUMA memory profliler based on Pintool to track remote memory accesses
  • Numalize - A memory tracing tool to detect communication and page usage of NUMA applications
  • NumaMMA - A lightweight NUMA memory profiler/analyzer and a NUMA application execution engin
  • numap - A Linux library for memory profiling based on hardware performance monitoring unit
  • pcm-numa- A tool to monitor local and remote memory accesses on a NUMA system

Benchmarking

  • Comm|Scope - A NUMA-aware multi-CPU multi-GPU CUDA data transfer benchmarks
  • Numafac - Scripts to calculate the NUMA factor of NUMA machines, based on the stream and lmbench3 benchmarks
  • nurdma - Understanding RDMA behavior in NUMA systems
  • numabench - A NUMA benchmarking tool
  • numa-bench - A NUMA-aware memory allocation benchmark

NUMA-aware data structures

  • Skyhooks - An experimental NUMA-aware, lock-free heap memory allocator
  • rw-numa-locks - A NUMA-aware reader-writer locks
  • NUMA_Black-Box - Black-box concurrent data structures for NUMA architectures

About

This list was compiled by Domagoj Margan with help and resources from the systems community.