今回はnuma構成のマシンで、メモリとスレッドの関係を変更して性能評価する方法を書く。
まずは、使用するマシンのnuma構成を取得する。
$ numactl -H
----------------------------------------------------
available: 4 nodes (0-3)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
node 0 size: 262037 MB
node 0 free: 239110 MB
node 1 cpus: 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
node 1 size: 262144 MB
node 1 free: 246338 MB
node 2 cpus: 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
node 2 size: 262144 MB
node 2 free: 240336 MB
node 3 cpus: 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
node 3 size: 262144 MB
node 3 free: 237420 MB
node distances:
node 0 1 2 3
0: 10 21 21 31
1: 21 10 31 21
2: 21 31 10 21
3: 31 21 21 10
----------------------------------------------------
CPU番号とソケットの関係はcpuinfoに記載されているので確認する。
$ cat /proc/cpuinfo
メモリ位置はノード番号で指定し、実行位置はCPU番号で指定する。
メモリはノード0を使用して、CPUの0と1で実行する場合は以下のように指定する。
$ numactl -m 0 -C 0-2 ls
ちなみにperfで測定する場合は、以下のようにする。
$ perf stat numactl -m 0 -C 0-2 ls
前回書いたアンコア部のカウンタを調査するときにnumactlでメモリ位置等を制御すると案外おもしろい値が取れたりするのでやってみてね。