最近在测试nvme性能的时候,发现不稳定,所以进行了绑核操作,简单的说下方法。
1 ,我们要知道每个nvme对应接在哪个node上面。
a .找出nvme对应的busID
[root@localhost ~]# readlink -f /sys/block/nvme0n1
/sys/devices/pci0000:20/0000:20:01.1/0000:21:00.0/nvme/nvme0/nvme0n1
[root@localhost ~]# readlink -f /sys/block/nvme0n1|cut -d '/' -f 6
0000:21:00.0
b. 根据busID找到对应的CPU node
[root@localhost ~]# lspci -s 0000:21:00.0 -vv |grep -i node
NUMA node: 1
c.写成脚本的形式遍历每个nvme对应的node
#!/bin/bash
lscpu |grep -i node
for nvme in `nvme list|sed 1,2d|awk '{print $1}'|awk -F "/" '{print $NF}'`
do
echo $nvme
busid=$(readlink -f /sys/block/$nvme |cut -d '/' -f 6)
echo "busid = $busid"
lspci -s $busid -vv |grep -i node
echo "======================================"
done
结果如图所示
NUMA node(s): 4
NUMA node0 CPU(s): 0-31,128-159
NUMA node1 CPU(s): 32-63,160-191
NUMA node2 CPU(s): 64-95,192-223
NUMA node3 CPU(s): 96-127,224-255
nvme0n1
busid = 0000:21:00.0
NUMA node: 1
======================================
nvme1n1
busid = 0000:22:00.0
NUMA node: 1
======================================
nvme2n1
busid = 0000:23:00.0
NUMA node: 1
======================================
nvme3n1
busid = 0000:24:00.0
NUMA node: 1
======================================
nvme4n1
busid = 0000:e1:00.0
NUMA node: 2
======================================
nvme5n1
busid = 0000:e2:00.0
NUMA node: 2
======================================
2.确定nvme对应的node号以后,我们进行绑核操作,比如每个nvme绑定8个核数,因为nvme0-3对应的node为1,物理核数为32-63,nvme4-5对应的node为2,物理核数为64-95.那我们写绑核脚本的时候要确定所对应的核数是正确的,为了确保脚本方便写,我们要在nvme4的时候,对应的核数从64开始,那么通通过计算nvme0的核数就要从32开始。脚本如下(NVME_Multi_Random.sh 为跑多盘的测试脚本,600是时间600s的意思):
#!/bin/bash
num=32
for nvme in $(nvme list |sed 1,2d|awk '{print $1}'|awk -F "/" '{print $NF}')
do
echo "$num-$(expr $num + 7 )"
nohup taskset -c $num-$(expr $num + 7 ) sh NVME_Multi_Random.sh $nvme 600 &
let num=num+8
done