Version 0.6

NUMA Status

This document contains the current status of NUMA-related programs and patches. These items are divided into three categories:
  1. Default actions. These are programs and patches that seek to improve performance and usability of Linux on NUMA hardware systems in absence of any NUMA-awareness in the applications.
  2. Simple binding. These are programs and patches that allow simple manual control of what processes run where and where memory is placed. These are expected to be useful in benchmarking situations and for simple production workloads.
  3. Abstract binding. These are programs and patches that allow more abstract specification of the relationships between elements of a complex application and the underlying hardware. SGI's "memory locality domains" is one example of abstract binding, as are the features in the DYNIX/ptx, Digital Unix, and AIX operating systems that allow processes to be attached to each other (so that they migrate as a set).
Some of these items are already in the Linux 2.4 kernel, look for code under CONFIG_NUMA.

Status Summary

This section lists the status of various features, programs, and patches for NUMA on Linux.  Please note that an item's appearance in this table does not necessarily mean that it will appear in the Linux kernel.  In fact, in some cases, a given item may have a place in these tables only to track the discussion showing that it is a Bad Idea.  As such, there may be items in these tables that conflict with each other and with common sense.

Default Actions

Item Patches ARM Compaq Wildfire Fujitsu IA64
DiG
IA64
SN1
IBM NUMA-Q Intel IA32 NEC Azusa SGI MIPS64
CONFIG_DISCONTIGMEM
         generic support
(in 2.4)
-
-
-
-
-
-
-
-
-*
Patch available for 2.4.
See discontig-devel mailing list for more info.
-
-
-
-*
-
-
-
-
-<
CONFIG_NONLINEAR is under development
-
-
-
-
-
-
-
-
-<
         arch support (in 2.4)
Y
   
Patch available
discontig-devel
Y
Patch available
Pat Gaughen
   
Y*
Memory Classes: User Memory (in 2.4)        
Y
     
Y*
Memory Classes: kmalloc()                    
Memory Classes: kmem_cache_alloc() (node-aware slab allocator) In development
Tony Luck
                 
Default Memory Binding (in 2.4)                
Y*
Replication
         Kernel Text        
Patch available
         
         Kernel Modules                    
         User Text                    
         User Libraries                    
         Read-Only Mappings        
Patch available
         
         Read-Mostly Mappings                    
Per-Node kswapd
Samuel Ortiz                  
Bill Irwin (for rmap kernels)                  
Per-Node reclaimd                    
NUMA-Aware Scheduler
O(1) scheduler (in 2.5)
-
-
-
-
-
-
-
-
-
Andrea Arcangeli
-
-
-
-
-
-
-
-
-
Hubertus Franke
-
-
-
-
-
-
-
-
-
Erich Focht
-
-
-
-*
-
-
-
-
-
Davide Libenzi
-
-
-
-
-
-
-
-
-
Kernel-Subsystem NUMA-ization                    
Multipath I/O (related code in 2.4, device-specific patches available)                  
Migration
         Page                    
         Process                    
         I/O-Based                    
NUMA-Aware Locking Patch available      
Y*
   
Y
   
Tools
         NUMA-Aware                    
         NUMA-Aware Development                    
         Performance Monitoring                    

Simple Binding

Item Patches ARM Compaq Wildfire Fujitsu IA64
DiG
IA64
SN1
IBM NUMA-Q Intel IA32 NEC Azusa SGI MIPS64
Topology Discovery
         Kernel level  Kanoj          
In development
Paul Dorwin
   
Y*
         userlevel API            
In development
Paul Dorwin
     
         Dynamic Reconfiguration                    
Bind Tasks to CPU(s)
         sched_setaffinity()/sched_getaffinity() syscalls in 2.5
-
-
-
-
-
-
-
-
-
         numa api patch available
Matt Dobson
-
-
-
-
-
-*
-
-
-
         sysmp() syscall avail. for 2.2             Y    
Bind Tasks to Node(s)                    
         numa api patch available
Matt Dobson
-
-
-
-
-
-*
-
-
-
Bind Memory to Node(s) (first touch, stripe, etc.)                    
         numa api patch available
Matt Dobson
-
-
-
-
-
-*
-
-
-
Bind Tasks to I/O Devices                    
Bind Memory to I/O Devices                    
Tools and Commands               pset
avail. for 2.2
   
Create a NUMA API                    
         numa api patch available
Matt Dobson
-
-
-
-
-
-*
-
-
-

Abstract Binding

Item Patches ARM Compaq Wildfire Fujitsu IA64
DiG
IA64
SN1
IBM NUMA-Q Intel IA32 NEC Azusa SGI MIPS64
Specify Memory Locality Domains Cpumemsets patch is available for 2.4. There is also a design doc availablefor cpumemsets.                  
Link Tasks Together                    
Virtualize Resource Names                    
Linking/Binding Hints                    

* = item was developed on this platform


This document is maintained by Pat Gaughen, please send email to Pat (gaughen at users.sourceforge.net) with modifications/deletions/additions for this page.