Gentoo Archives: gentoo-user

From: Rafa Griman <rafagriman@×××××.com>
To: gentoo-user@l.g.o
Subject: Re: [gentoo-user] Dual or Quad CPU complications?
Date: Fri, 14 Dec 2012 10:05:41
Message-Id: CANRt_=aAhYTxdstUQU7mPRFLV+W5FkdYaV2c4BHkbzFb9C05Pg@mail.gmail.com
In Reply to: Re: [gentoo-user] Dual or Quad CPU complications? by Grant
1 On Fri, Dec 14, 2012 at 10:44 AM, Grant <emailgrant@×××××.com> wrote:
2 >> > So if I have 2 physical CPU's with 4 cores each and I enable SMP, I'm
3 >> > using
4 >> > 8 cores? Can NUMA be either enabled or disabled when using more than
5 >> > one
6 >> > physical CPU, or is it required?
7 >>
8 >>
9 >> NUMA is a hardware architecture. It's how you access memory on a
10 >> hardware level: NUMA = Non Uniform Memory Access vs a UMA architecture
11 >> of typical (old/legacy) SMP systems (UMA = Uniform Memory Access).
12 >>
13 >> In a UMA system, all the memory belongs to all the sockets. In a NUMA
14 >> system, each socket has it's "own" local memory. In modern (x86-64)
15 >> processors, each socket has it's own memory controller so each socket
16 >> controls its own local memory. If one socket runs out of memory it can
17 >> ask another socket to lend him some memory. In a UMA system, no socket
18 >> has to ask since memory is global and belongs to all sockets so if one
19 >> socket uses up all the memory ... the rest "starve". In NUMA, there's
20 >> more control over who uses what (be it cores or RAM).
21 >>
22 >> If you have a modern dual or quad (or higher #) socket system ...
23 >> you've got NUMA architecture and you can't get rid of it, it's
24 >> hardware, not software.
25 >
26 > So I must enable CONFIG_NUMA for more than one physical CPU, and disable it
27 > for only one physical CPU?
28
29
30 Yup. But ... Why would you want to disable a socket (CPU)? If you
31 disable a socket (CPU) ... you lose the memory attached to that socket
32 (CPU) not to mention you lose those cores ;)
33
34 A better solution would be to use cgroups or numactl tools to pin a
35 certain process to a set of cores and a memory region.
36
37 If you really want to deactivate cores (but not the whole socket), you can type:
38
39 echo 0 > /sys/devices/system/cpu/cpu1/online
40
41 This would deactivate core #1. You can deactivate as many cores as you
42 wish, except for core #0.
43
44 This can be done without rebooting your server (aka during run time).
45 Your memory will not be affected, but you will have less cores (and
46 theoretically more memory bandwidth). I say "theoretically" because
47 you always have to benchmark these things with YOUR application
48 (remember logic NEVER applies to real life ;)
49
50 If you want to check the # of cores you've got:
51
52 cat /proc/interrupts | grep CPU
53
54 Other possibilities such as cat /proc/cpuinfo or dmesg, ... can be
55 useful too for this: your choice, FLOSS gives you options.
56
57 If you want to activate the previously deactivated core, you can run:
58
59 echo 1 > /sys/devices/system/cpu/cpu1/online
60
61 Now ... be sure your core numbering is the expected core numbering.
62 IOW, not all server vendors follow the same numbering scheme so core
63 #1 in vendor A's server could be core #2 in vendor B's server. Never
64 trust logic ;)
65
66 As I mentioned previously: test/benchmark YOUR software. DON'T trust
67 logic or generic benchmarks or web pages with results. Trust YOUR
68 results only.
69
70 HTH
71
72 Rafa

Replies

Subject Author
Re: [gentoo-user] Dual or Quad CPU complications? Grant <emailgrant@×××××.com>