Haskell.org GSOC: Ticket Queryhttp://ghc.haskell.org/trac/summer-of-code/query?status=!closed&cc=~rrnewton&order=type
Haskell.org Google Summer of Codeen-USHaskell.org GSOC/images/summerlambda.pnghttp://ghc.haskell.org/trac/summer-of-code/query?status=!closed&cc=~rrnewton&order=type
Trac 1.0.1http://ghc.haskell.org/trac/summer-of-code/ticket/1618
http://ghc.haskell.org/trac/summer-of-code/ticket/1618#1618: Add NUMA-supporting features to GHCMon, 26 Mar 2012 14:49:46 GMTacfoltzer<p>
This ticket is an adaptation of <a class="ext-link" href="http://www.haskell.org/pipermail/glasgow-haskell-users/2012-March/022199.html"><span class="icon">​</span>Sajith Sasidharan's mailing list post</a>.
</p>
<p>
Broadly, idea is to improve support for NUMA systems. Specifically:
</p>
<ul><li><strong>Thread pinning</strong> Real physical processor affinity with <a class="ext-link" href="http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent.html#v:forkOn"><span class="icon">​</span>forkOn</a>. We need to pin to specific CPUs if we want to. (Currently, the number passed to forkOn is interpreted as number modulo the value returned by <a class="ext-link" href="http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent.html#v:getNumCapabilities"><span class="icon">​</span>getNumCapabilities</a>).
</li></ul><ul><li><strong>Process pinning</strong>: when launching processes, we might want to specify a list of CPUs rather than the number of CPUs, so that we can pin a process to a particular NUMA node. Say, a -N <a class="missing source" title="No default repository defined">[0,1,3]</a> flag rather than -N 3 flag.
</li></ul><p>
</p>
<ul><li><strong>Memory locality</strong>: From a very recent <a class="ext-link" href="http://groups.google.com/group/parallel-haskell/browse_thread/thread/7ec1ebc73dde8bbd"><span class="icon">​</span>discussion on parallel-haskell</a>, we learned that there is a clear path to improving the storage manager's NUMA support. The hypothesis is that allocating <em>node-local</em> nurseries per Capability will improve performance over the bump-pointer approach in <tt>allocate</tt>. We might use the NUMA-aware allocation primitives from the <a class="ext-link" href="http://www.open-mpi.org/projects/hwloc/"><span class="icon">​</span>Portable Hardware Locality (hwloc)</a> library for this.
</li></ul><ul><li><strong>Logging and tracing</strong> Add NUMA-specific event logging and profiling information to support performance analysis and debugging of user-level NUMA-aware programs.
</li></ul><h2 id="InterestedMentors">Interested Mentors</h2>
<blockquote>
<p>
<strong>Needed</strong>! I ([acfoltzer@… Adam Foltzer]) know the outlines of the problems fairly well, but have no experience hacking on RTS code. I would be willing to take on a supporting role, but such experience seems necessary to mentor this project.
</p>
</blockquote>
<h2 id="InterestedStudentsIncludeenoughidentifyinginfotofindreachyou">Interested Students (Include enough identifying info to find/reach you!)</h2>
<ul><li>[sasasidh@… Sajith Sasidharan]
</li></ul>Resultshttp://ghc.haskell.org/trac/summer-of-code/ticket/1618#changelog