A NUMA memory profiling tool to track memory accesses
Find where you make remote, local and MCDRAM memory accesses and where you pin the memory by making first touch accesses.

NUMAPROF is a memory access profiling tool based on pintool. It helps to detect remote NUMA and un-pinned memory accesses. On Intel KNL it also tracks accesses to the MCDRAM. The tool profide a nice web interface to explore the extracted profile by annotating the source code.

MALT is developped to support C, C++, Fortran, Rust.

It is the first published version. Of course there are plenty of things to fix. Thank you for your understanding and to report bugs. Feel free to contribute to improving it.

Features

Code annotation

NUMAPROF provides code annotations to map allocation metrics directly onto your source code.

Thread statistics

You get some statistics about memory accesses over threads.

Thread pinning history

Track all the thread pinning history and statistics to better understand your profile.

Access matrix

Provide a global and per thread access matrix to better understand the global balancing over your nodes.

Report on allocation site

Report remote/local accesses on access site and on allocation site to quickly find segments generating remote accesses.

Per-line details

When you put your mouse on access line you get all the details on this line with charts.


NUMAPROF use pintool to make on the fly binary instrumentation. It intercepts all calls to malloc/mmap... to capture memory allocations and track their NUMA mapping via move_pages. It then instrument all the memory accesses (read/write) to determine remote/local accesses. Finally, it tracks the thread pinning to match with the memory accesses.
NUMAPROF provides a web GUI based on new technologies like D3JS and python Flask. Thanks to this it might be easier for you to run NUMAPROF on a remote node by forwarding the connection via SSH.



numaprof-pintool ./my_program

numaprof-webview \
	./numaprof-my_program-1588.json

browser http://localhost:8080
NUMAPROF is used by running the profiling tool on your command just as you do with valgrind. Then, open the profile file with the NUMAPROF webserver and connect to it with your browser by using http://localhost:8080.

NUMAPROF is now OpenSource on GitHub and was developed in 2017 at CERN by Fellow Sébastien Valat after some exchanges with a research engineer (Othman Bouizi) from the Exascale Computing Research Lab. A significant part of the code came directly from MALT which is hosted side to this project.


Valat, S., Bouizi, O. (2019). NUMAPROF, A NUMA Memory Profiler. In: Mencagli, G., et al. Euro-Par 2018: Parallel Processing Workshops. Euro-Par 2018. Lecture Notes in Computer Science(), vol 11339. Springer, Cham.
https://doi.org/10.1007/978-3-030-10549-5_13

If you encounter some troubles, have feedbacks, needs or ideas, please contact me at memtt@progranet.ovh. I will be pleased to answer.