numactl测试numa间读写速率

本文通过numactl命令展示了NUMA架构下不同节点的CPU绑定和内存分配,以及对性能的影响。测试结果显示,同一节点间的内存读写速度远高于跨节点操作。此外,将CPU频率设置为最高,以消除频率变化对测试结果的影响。测试还揭示了内存文件系统tmpfs的使用和读写性能特点。测试数据表明,CPU访问本地节点内存的速度显著快于远程节点,强调了NUMA架构下内存访问的局部性优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值