I learned to use PMU tools here to monitor the memory bandwidth on each channel of each socket. It was a great way of monitoring the read and write memory bandwidth of your application in real time.
To begin with, I really like to use TMUX (pleas a previous short post on how to use TMUX’s basic functions) to split the session. So that you can run your application on one session and monitor tools on the other session. This is one of the many tricks my cool officemate/mentor Vladimir taught me.
Specifically, I used
/pmu-tools/ucevent/ucevent.py (encore events), and the relevant events are
To understand what the events are doing, please see a previous post on uncore events, which details what these counters correspond to in Intel’s manual.
you can use -scale GB/MB to switch between different scales.
An example command would be the following
python pathToPMU/pmu-tools/ucevent/ucevent.py iMC.MEM_BW_READS –scale GB
I have previously wrote a post on how to use perf to measure memory bandwidth
Hope this helps!