summaryrefslogtreecommitdiff
path: root/testsuite/config
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2016-04-23 21:14:49 +0100
committerSimon Marlow <marlowsd@gmail.com>2016-06-10 21:25:54 +0100
commit9e5ea67e268be2659cd30ebaed7044d298198ab0 (patch)
treec395e74ee772ae0d59c852b3cbde743784b08d09 /testsuite/config
parentb9fa72a24ba2cc3120912e6afedc9280d28d2077 (diff)
downloadhaskell-9e5ea67e268be2659cd30ebaed7044d298198ab0.tar.gz
NUMA support
Summary: The aim here is to reduce the number of remote memory accesses on systems with a NUMA memory architecture, typically multi-socket servers. Linux provides a NUMA API for doing two things: * Allocating memory local to a particular node * Binding a thread to a particular node When given the +RTS --numa flag, the runtime will * Determine the number of NUMA nodes (N) by querying the OS * Assign capabilities to nodes, so cap C is on node C%N * Bind worker threads on a capability to the correct node * Keep a separate free lists in the block layer for each node * Allocate the nursery for a capability from node-local memory * Allocate blocks in the GC from node-local memory For example, using nofib/parallel/queens on a 24-core 2-socket machine: ``` $ ./Main 15 +RTS -N24 -s -A64m Total time 173.960s ( 7.467s elapsed) $ ./Main 15 +RTS -N24 -s -A64m --numa Total time 150.836s ( 6.423s elapsed) ``` The biggest win here is expected to be allocating from node-local memory, so that means programs using a large -A value (as here). According to perf, on this program the number of remote memory accesses were reduced by more than 50% by using `--numa`. Test Plan: * validate * There's a new flag --debug-numa=<n> that pretends to do NUMA without actually making the OS calls, which is useful for testing the code on non-NUMA systems. * TODO: I need to add some unit tests Reviewers: erikd, austin, rwbarton, ezyang, bgamari, hvr, niteria Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D2199
Diffstat (limited to 'testsuite/config')
-rw-r--r--testsuite/config/ghc6
1 files changed, 5 insertions, 1 deletions
diff --git a/testsuite/config/ghc b/testsuite/config/ghc
index 355535153c..678cc56bc5 100644
--- a/testsuite/config/ghc
+++ b/testsuite/config/ghc
@@ -26,7 +26,7 @@ config.run_ways = ['normal', 'hpc']
config.other_ways = ['prof', 'normal_h',
'prof_hc_hb','prof_hb',
'prof_hd','prof_hy','prof_hr',
- 'threaded1_ls', 'threaded2_hT',
+ 'threaded1_ls', 'threaded2_hT', 'debug_numa',
'llvm', 'debugllvm',
'profllvm', 'profoptllvm', 'profthreadedllvm',
'debug',
@@ -87,6 +87,8 @@ config.way_flags = lambda name : {
'normal' : [],
'normal_h' : [],
'g1' : [],
+ 'nursery_chunks' : [],
+ 'debug_numa' : ['-threaded', '-debug'],
'optasm' : ['-O', '-fasm'],
'llvm' : ['-fllvm'],
'optllvm' : ['-O', '-fllvm'],
@@ -119,6 +121,8 @@ config.way_rts_flags = {
'normal' : [],
'normal_h' : ['-h'], # works without -prof
'g1' : ['-G1'],
+ 'nursery_chunks' : ['-n32k'],
+ 'debug_numa' : ['-N2', '--debug-numa=2'],
'optasm' : [],
'llvm' : [],
'optllvm' : [],