  Parallel applications are extremely challenging to achieve the optimal
performance on the NUMA architecture, which necessitates the assistance of
profiling tools. However, existing NUMA-profiling tools share some similar
shortcomings, such as portability, effectiveness, and helpfulness issues. This
paper proposes a novel profiling tool - NumaPerf - that overcomes these issues.
NumaPerf aims to identify potential performance issues for any NUMA
architecture, instead of only on the current hardware. To achieve this,
NumaPerf focuses on memory sharing patterns between threads, instead of real
remote accesses. NumaPerf further detects potential thread migrations and load
imbalance issues that could significantly affect the performance but are
omitted by existing profilers. NumaPerf also separates cache coherence issues
that may require different fix strategies. Based on our extensive evaluation,
NumaPerf is able to identify more performance issues than any existing tool,
while fixing these bugs leads to up to 5.94x performance speedup.
