linux的nvme驱动需要关心的统计项
blk-mq-sysfs.c生成了一些其他的nvme的统计项,
有多少个online的cpu,在驱动加载的时候会默认生成多少个队列,除非内存不足或者在保留内核中,则会减少。
[root@localhost mq]# ls
0 10 12 14 16 18 2 21 23 25 27 29 30 32 34 36 38 4 41 43 45 47 49 50 52 54 56 58 6 61 63 65 67 69 70 72 74 76 78 8
1 11 13 15 17 19 20 22 24 26 28 3 31 33 35 37 39 40 42 44 46 48 5 51 53 55 57 59 60 62 64 66 68 7 71 73 75 77 79 9
随便进入一个队列,可以看到如下的打印:
[root@localhost mq]# cd 0
[root@localhost 0]# ls
active cpu0 cpu_list dispatched pending queued run tags
比如我们要查看nvme3这个设备的io提交情况:
for i in {0..79} ;do echo $i"cpu";cat /sys/block/nvme3n1/mq/$i/dispatched|awk 'NR==2{print}';done
0cpu 1 394956 1cpu 1 374817 2cpu 1 331803 3cpu 1 305250 4cpu 1 315251 5cpu 1 311434 6cpu 1 304236 7cpu 1 1180365-----------------可以看到,这个值比其他的队列偏高 8cpu 1 317816 9cpu 1 324039 10cpu 1 301696 11cpu 1 308175 12cpu 1 308011 13cpu 1 311117 14cpu 1 302730 15cpu 1 307697 16cpu 1 310814 17cpu 1 303113 18cpu 1 304176 19cpu 1 291003 20cpu 1 429206 21cpu 1 395612 22cpu 1 352658 23cpu 1 324926 24cpu 1 322888 25cpu 1 317867 26cpu 1 307749 27cpu 1 318038 28cpu 1 315220 29cpu 1 316902 30cpu 1 314553 31cpu 1 327750 32cpu 1 323689 33cpu 1 310986 34cpu 1 319291 35cpu 1 313652 36cpu 1 329242 37cpu 1 318131 38cpu 1 314649 39cpu 1 317828 40cpu 1 304262 41cpu 1 271454 42cpu 1 233083 43cpu 1 225090 44cpu 1 216841 45cpu 1 204718 46cpu 1 210182 47cpu 1 208971 48cpu 1 200567 49cpu 1 216085 50cpu 1 205207 51cpu 1 206309 52cpu 1 225562 53cpu 1 206230 54cpu 1 205445 55cpu 1 212910 56cpu 1 223439 57cpu 1 218819 58cpu 1 201218 59cpu 1 213536 60cpu 1 323561 61cpu 1 295333 62cpu 1 256412 63cpu 1 232104 64cpu 1 222467 65cpu 1 216440 66cpu 1 223645 67cpu 1 222626 68cpu 1 223895 69cpu 1 218320 70cpu 1 221901 71cpu 1 229034 72cpu 1 227548 73cpu 1 219187 74cpu 1 216212 75cpu 1 207302 76cpu 1 227482 77cpu 1 213950 78cpu 1 209072 79cpu 1 219765
由于我们是一个核一个队列,且按照nvme的io提交策略,在那个cpu上提交的io,在配置了rq_affinity为2的情况下,则肯定在那个cpu
上完成,这样的话,偏高的那个cpu的iowait将会比其他的盘要高,因为它接受的提交次数最多。
对于应用来说,一般使用nvme的时候都进行了绑核,这样,找出对应绑核的线程,可以strace出它为什么提交的io次数偏多。
0cpu 13949561cpu 13748172cpu 13318033cpu 13052504cpu 13152515cpu 13114346cpu 13042367cpu 111803658cpu 13178169cpu 132403910cpu 130169611cpu 130817512cpu 130801113cpu 131111714cpu 130273015cpu 130769716cpu 131081417cpu 130311318cpu 130417619cpu 129100320cpu 142920621cpu 139561222cpu 135265823cpu 132492624cpu 132288825cpu 131786726cpu 130774927cpu 131803828cpu 131522029cpu 131690230cpu 131455331cpu 132775032cpu 132368933cpu 131098634cpu 131929135cpu 131365236cpu 132924237cpu 131813138cpu 131464939cpu 131782840cpu 130426241cpu 127145442cpu 123308343cpu 122509044cpu 121684145cpu 120471846cpu 121018247cpu 120897148cpu 120056749cpu 121608550cpu 120520751cpu 120630952cpu 122556253cpu 120623054cpu 120544555cpu 121291056cpu 122343957cpu 121881958cpu 120121859cpu 121353660cpu 132356161cpu 129533362cpu 125641263cpu 123210464cpu 122246765cpu 121644066cpu 122364567cpu 122262668cpu 122389569cpu 121832070cpu 122190171cpu 122903472cpu 122754873cpu 121918774cpu 121621275cpu 120730276cpu 122748277cpu 121395078cpu 120907279cpu 1219765