Improving GHC Haskell NUMA Profiling
summary
Experimental profiling on a 64‑core, 8‑region Togian server measures GHC 8.2 with nofib benchmarks (prsa, sum Euler data‑parallel and divide‑and‑conquer). Results show 100% local allocation for sparks and GC gen1/2 threads with good locality, but a single unpinned main thread pins nowhere and allocates heavily into one region producing a persistent hot column = region 3 of remote traffic. Extensions to numaprof record per‑thread allocations; a weighted distance×bytes access rate compares NUMA load and points to GC/static object placement as optimization opportunities.
AI-written summary · about
chapters (10)
- 0:00Start
- 2:13Profiling Numa
- 6:00Memory Management in Parallel Haskell
- 16:24Analyzing the Data
- 22:42Ghc Garbage Collection
- 24:09Results
- 25:35Locality of the Objects Touched by the Garbage Collection Threads
- 29:18Thread Locality
- 32:47Could the Type System Be Leveraged To Determine that a Type Slash Array Is Used Only by the Thread That Allocates It and To Give Hints To Gc To Keep the Type Numa
- 34:42Does Haskell Need Its Own Metric for Comparing Numer Loads
related talks
59mBeyond pprof, Hardware Performance Counters
01h 02mProfiling with Heaptrack and Hotspot on Embedded Linux
43mLive in a world with multiple memory types
48mProfiling data structures
45mgprofng: The Next Generation GNU Profiling Tool
45mUsing hardware hints for optimal page placement
45mFast and Safe Production Monitoring of JVM Applications with BPF Magic
20mRevisiting Partial Tracing for Safe, Efficient, and Concurrent Garbage Collection in(…)
