Skip to content

Numa: Use Generic Per-cpu Variables for numa_*_id()

Lee Schermerhorn linux-arch linux-mm linux-numa 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest8 patches 20 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8numa: add generic percpu var numa_node_id() implementationinclude/linux/topology.h mm/page_alloc.c+33 -54 replies
2/8numa: x86_64: use generic percpu var numa_node_id() implementationarch/x86/Kconfig arch/x86/include/asm/topology.h arch/x86/kernel/cpu/common.c +2 more+19 -245 replies
3/8numa: ia64: use generic percpu var numa_node_id() implementationarch/ia64/Kconfig arch/ia64/include/asm/topology.h arch/ia64/kernel/smpboot.c+10 -51 reply
4/8numa: Introduce numa_mem_id()- effective local memory node idinclude/asm-generic/topology.h include/linux/mmzone.h include/linux/topology.h +1 more+71 -11 reply
5/8numa: ia64: support numa_mem_id() for memoryless nodesarch/ia64/Kconfig arch/ia64/kernel/smpboot.c+5 -01 reply
6/8numa: slab: use numa_mem_id() for slab local memory nodemm/slab.c+22 -214 replies
7/8numa: in-kernel profiling: use cpu_to_mem() for per cpu allocationskernel/profile.c+2 -20 replies
8/8numa: update Documentation/vm/numa, add memoryless node infoDocumentation/vm/numa+146 -382 replies

Reviews trailers per patch

3 of 8 patches have a Reviewed-by or Acked-by.

PatchChristoph LameterKAMEZAWA Hiroyuki
1/8R-b R-b
2/8
3/8R-b Reviewd-by
4/8
5/8
6/8
7/8
8/8R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 0/8] Numa: Use Generic Per-cpu Variables for numa_*_id()

Use Generic Per cpu infrastructure for numa_*_id() V4

Series Against: 2.6.34-rc3-mmotm-100405-1609

Background:

V1 of this series resolved a fairly serious performance problem on our ia64 platforms with memoryless nodes because SLAB cannot cache object from a remote node, even tho' that node is the effective "local memory node" for a given cpu. V1 caused no regression in x86_64 [a slight improvement even] for the admittedly few tests that I ran.

Christoph Lameter suggested the approach implemented in V2 and later: define a new function--numa_mem_id()--that returns the "local memory node" for cpus attached to memoryless nodes. Christoph also suggested that, while at it, I could modify the implementation of numa_node_id() [and the related cpu_to_node()] to use the generic percpu variable implementation.

While implementing V2, I encountered a circular header dependency between:

	topology.h -> percpu.h -> slab.h -> gfp.h -> topology.h

I resolved this by moving the generic percpu functions to include/asm-generic/percpu.h so that various arch asm/percpu.h could include that, and topology.h could include asm/percpu.h to avoid including slab.h, breaking the circular dependency. Reviewers didn't like that. Matthew Willcox suggested that I uninline percpu_alloc()/free() for the !SMP config and remove slab.h from percpu.h. I tried that. I broke the build of a LOT of files. Tejun Heo mentioned that percpu-defs.h would be a better place for the generic function definitions. V3 implemented that suggestion.

Later, Tejun decided to jump in and remove slab.h from percpu.h and semi- automagically fix up all of the affected modules. V4 is implemented atop Tejun's series now in mmotm. Again, this solves the slab performance problem on our servers configured with memoryless nodes, and shows no regression with hackbench on x86_64. Of course, more performance testing would be welcome.

The slab changes in patch 6 of the series need review w/rt to node hot plug that could change the effective "local memory node" for a memoryless node by inserting a "nearer" node in the zonelists. An additional patch may be required to address this.

Lee