libc - Add poor man's cache coloring optimization to nmalloc module.
authorMatthew Dillon <dillon@apollo.backplane.com>
Fri, 4 Jan 2013 22:24:12 +0000 (14:24 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Fri, 4 Jan 2013 22:24:12 +0000 (14:24 -0800)
commit8120f5e2a46e669c06a7afdd7de60fa6d6996f9d
tree34cd3a7f0a7fa606d5f4cfaf43e80f1010f4b26c
parent65221c72be1ddbfce1a59d3179656c3e059b79e8
libc - Add poor man's cache coloring optimization to nmalloc module.

* A series of large allocations in excess of 32KB will be offset by 4K from
  each other.  This fixes performance issues on SandyBridge and later cpus
  related to large matrix operations.

  This eats an extra 4K of VM for such allocations but does not eat any
  additional real memory.

* Greatly improves large FP matrix benchmarks.  Real-world effects are more
  questionable.

* The Sandybridge and later cpus use a virtually indexed, physically tagged
  L1 cache, and tend to be sensitive to substantially different memory
  addresses winding up on the same cache line.  Matrix operations (primarily
  benchmarks) can cause these sorts of effects.

Reported-by: alexh
lib/libc/stdlib/nmalloc.c