Hi Martin & Michael, as discussed on the LSE call I played around with a cross-node balancer approach put on top of the miniature NUMA scheduler. The patches are attached and it seems to be clear that we can regain the good performance for hackbench by adding a cross-node balancer. The patches are: 01-minisched-2.5.55.patch : the miniature scheduler from Martin. Balances strictly within a node. Added an inlined function to make the integration of the cross-node balancer easier. The added code is optimised away by the compiler. 02-initial-lb-2.5.55.patch : Michael's initial load balancer at exec(). 03-internode-lb-2.5.55.patch : internode load balancer core. Called after INTERNODE_LB calls of the inter-node load balancer. The most loaded node's cpu-mask is ORed to the own node's cpu-mask and find_busiest_in_mask() finds the most loaded CPU in this set. 04-smooth-node-load-2.5.55.patch : The node load measure is smoothed by adding half of the previous node load (and 1/4 of the one before, etc..., as discussed in the LSE call). This should improve a bit the behavior in case of short timed load peaks and avoid bouncing tasks between nodes. 05-var-intnode-lb2-2.5.55.patch : Replaces the fixed INTERNODE_LB interval (between cross-node balancer calls) by a variable node-specific interval. Currently only two values used. Certainly needs some tweaking and tuning. 01, 02, 03 are enough to produce a working NUMA scheduler, when including all patches the behavior should be better. I made some measurements which I'd like to post in a separate email tomorrow. Comments? Ideas? Regards, Erich