1.numactl命令可以用来查看numa的状态,如下两种方式:
henry@henry-HX001:~$ numactl -s
policy: default
preferred node: current
physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
cpubind: 0 1
nodebind: 0 1
membind: 0 1
主要可以看到node的数量和拓扑结构组成
henry@henry-HX001:~$ numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16048 MB
node 0 free: 14873 MB
node 1 cpus: 8 9 10 11 12 13 14 15
node 1 size: 16099 MB
node 1 free: 14763 MB
node distances:
node 0 1
0: 10 21
1: 21 10
2.用numastat可以查看当前numa内存使用情况
henry@henry-HX001:~$ numastat
node0 node1
numa_hit 907891 1681986
numa_miss 0 0
numa_foreign 0 0
interleave_hit 28249 28548
local_node 808087 1652306
other_node 99804 29680
henry@henry-HX001:~$ numastat -m
Per-node system memory usage (in MBs):
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Token Node not in hash table.
Node 0 Node 1 Total
--------------- --------------- ---------------
MemTotal 16048.94 16099.89 32148.83
MemFree 14465.81 14260.09 28725.91
MemUsed 1583.12 1839.80 3422.92
Active 808.52 1064.55 1873.06
Inactive 512.63 541.75 1054.38
Active(anon) 619.98 755.34 1375.31
Inactive(anon) 67.32 90.56 157.88
Active(file) 188.54 309.21 497.75
Inactive(file) 445.30 451.19 896.49
Unevictable 0.00 0.00 0.00
Mlocked 0.00 0.00 0.00
Dirty 0.06 0.00 0.06
Writeback 0.00 0.00 0.00
FilePages 702.40 851.80 1554.20
Mapped 313.61 291.92 605.52
AnonPages 618.80 754.52 1373.33
Shmem 68.55 91.41 159.97
KernelStack 5.45 10.91 16.36
PageTables 5.94 14.88 20.82
NFS_Unstable 0.00 0.00 0.00
Bounce 0.00 0.00 0.00
WritebackTmp 0.00 0.00 0.00
Slab 142.05 161.61 303.66
SReclaimable 49.00 73.93 122.93
SUnreclaim 93.05 87.68 180.73
AnonHugePages 0.00 0.00 0.00
HugePages_Total 0.00 0.00 0.00
HugePages_Free 0.00 0.00 0.00
HugePages_Surp 0.00 0.00 0.00
3.为了去除CPU变频的影响,将CPU频率设置为最高频率:
henry@henry-HX001:~$ sudo cpupower frequency-set -g performance
[sudo] henry 的密码:
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
Setting cpu: 4
Setting cpu: 5
Setting cpu: 6
Setting cpu: 7
Setting cpu: 8
Setting cpu: 9
Setting cpu: 10
Setting cpu: 11
Setting cpu: 12
Setting cpu: 13
Setting cpu: 14
Setting cpu: 15
4.查看CPU频率信息,已经达到2.7GHz:
henry@henry-HX001:~$ sudo cpupower frequency-info
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us
hardware limits: 1.20 GHz - 2.70 GHz
available frequency steps: 2.70 GHz, 2.40 GHz, 1.80 GHz, 1.20 GHz
available cpufreq governors: conservative userspace powersave ondemand performance schedutil
current policy: frequency should be within 1.20 GHz and 2.70 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency: 2.70 GHz (asserted by call to hardware)
5.测试需要使用/dev/shm目录,这个目录是使用tmpfs挂载的,也就是内存文件系统,可以看到是16G的空间,使用了1G,但这种文件系统是使用时动态从内存申请的,也就是实际用了1G内存,还可以申请15G:
henry@henry-HX001:~$ df -h | grep shm
tmpfs 16G 1.0G 15G 7% /dev/shm
6.前边可以看到系统内包含两个node,分别用不同node上的CPU向另外两个node写入数据:
a.node0上的CPU向node0上的内存写入1G数据:
henry@henry-HX001:~$ numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.69417 s,1.5 GB/s
b.node0上的CPU向node1上的内存写入1G数据:
henry@henry-HX001:~$ numactl --cpubind=0 --membind=1 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.12628 s,953 MB/s
c.node1上的CPU向node1上的内存写入1G数据:
henry@henry-HX001:~$ numactl --cpubind=1 --membind=1 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.69808 s,1.5 GB/s
d.node1上的CPU向node0上的内存写入1G数据:
henry@henry-HX001:~$ numactl --cpubind=1 --membind=0 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.09069 s,984 MB/s
由上边的测试结果看,cpu向相同node的内存写入数据为1.5GB/s,而向不同node的内存写入数据的速率为950+MB/s,可见写不同node的内存速率差异还是比较大的。
7.读取内存测试同上
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=0 --membind=0 dd if=/dev/shm/A of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.279088 s,3.8 GB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=0 --membind=1 dd if=/dev/shm/A of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.279792 s,3.8 GB/s
henry@henry-HX001:~$ numactl --cpubind=1 --membind=1 dd if=/dev/shm/A of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.845751 s,1.3 GB/s
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=1 --membind=0 dd if=/dev/shm/A of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.871368 s,1.2 GB/s
henry@henry-HX001:~$
由上边的测试发现node0上的cpu读取A 速率为3.8GB/s,而node1上的cpu读取速率只有1.2GB/s,这是因为输入文件/dev/shm/A在node0上。由此可见不同node读取的速率差异要比写入的差异更大。
8.我们在node1上创建一个文件B,用于和node0上的A做比对:
henry@henry-HX001:~$ numactl --cpubind=1 --membind=1 dd if=/dev/zero of=/dev/shm/B bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.700356 s,1.5 GB/s
9.读取node1上的B 文件:
henry@henry-HX001:~$ numactl --cpubind=0 --membind=0 dd if=/dev/shm/B of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.937572 s,1.1 GB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=0 --membind=1 dd if=/dev/shm/B of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.865247 s,1.2 GB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=1 --membind=0 dd if=/dev/shm/B of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.284773 s,3.8 GB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=1 --membind=1 dd if=/dev/shm/B of=/dev/null bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.278215 s,3.9 GB/s
可以同样看到cpu读取相同node上内存内的文件速率要比读取其他node的内存要快很多,因为读取到后就丢弃,所以可以看到的是不受写入影响的速率。
10.我们之前创建的A文件在node0上,B文件在node1上,下边我们就分别在两个node上进行同时读和写交叉测试:
henry@henry-HX001:~$ numactl --cpubind=1 --membind=1 dd if=/dev/shm/B of=/dev/shm/node1 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.852386 s,1.3 GB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=1 --membind=0 dd if=/dev/shm/B of=/dev/shm/node0 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.2857 s,835 MB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=1 --membind=1 dd if=/dev/shm/A of=/dev/shm/node1 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.37011 s,784 MB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=1 --membind=0 dd if=/dev/shm/A of=/dev/shm/node0 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.80115 s,596 MB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=0 --membind=0 dd if=/dev/shm/A of=/dev/shm/node0 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,0.82961 s,1.3 GB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=0 --membind=1 dd if=/dev/shm/B of=/dev/shm/node1 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.83893 s,584 MB/s
henry@henry-HX001:~$ numactl --cpubind=0 --membind=0 dd if=/dev/shm/B of=/dev/shm/node0 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.39441 s,770 MB/s
henry@henry-HX001:~$
henry@henry-HX001:~$
henry@henry-HX001:~$ numactl --cpubind=0 --membind=1 dd if=/dev/shm/A of=/dev/shm/node0 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB,1.0 GiB)已复制,1.25469 s,856 MB/s
由上边的测试结构,我们可以看到:
a.cpu从自己的node上读取内存并写在自己的node上速率最快,可以达到1.3GB/s。
b.cpu从自己的node上读取内存数据并写到其他node上的速率为850MB/s。
c.cpu从其他node内存读取数据再写到自己的node上的速率为780MB/s。
d.cpu从其他node内存读取数据再写到其他node上的速率最慢,为590MB/s。