34

I have a HP DL380 G7 with 2 mismatched CPUs in it. One is a quad core CPU with faster cores, and one is a 6 core CPU with slower cores.

On this box I run an application that due to licensing reasons will only use CPU0-CPU3.

For me it would be desirable for the faster cores on the quad core CPU to enumerate to CPU0-CPU3 in the operating system, giving me a performance bonus for a) using faster clocked cores, and b) keeping all threads on the same physical CPU.

Is there a way to make this happen, either within the BIOS, or in a configuration file or boot option in Linux?

The specific CPU models are:

Intel(R) Xeon(R) CPU E5649 @ 2.53GHz (hex core)

Intel(R) Xeon(R) CPU E5640 @ 2.67GHz (quad core)

ewwhite
  • 201,205
paulos
  • 1,704

1 Answers1

27

Wut?!?

This is crazy, you know? It's unsupported and likely not good for your hardware. You should be using equally-spec'd processors in your server.

I suppose you couple simply execute your application in a cgroup or shield (or via taskset) that only contains the CPU cores you wish to use. You can also pin memory access to that CPU with numactl. But really, why wouldn't you either remove the slower CPU entirely or pay what it takes to bring the system into spec.

Maybe the obvious thing, if your application is hardcoded to use CPU0-CPU3, is to physically swap the sockets... but really, just run with one CPU here.

If you're referring to ProLiant DL380 G7 hardware, your "faster" CPU is likely a Nehalem 5500-series proc, with the slower hex-core CPU being a Westmere. Have you benchmarked at all? Which specific CPUs are installed?

Edit:

Okay, so these are at least CPUs of the same generation/stepping. But it's still a bad idea... The difference in CPU spec isn't even that great (versus something like an Intel X5690 at 3.47GHz).

ewwhite
  • 201,205