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

1cpu

2cpu

3cpu

4cpu

5cpu

6cpu

7cpu
1180365-----------------可以看到,这个值比其他的队列偏高
8cpu 9cpu 10cpu 11cpu 12cpu 13cpu 14cpu 15cpu 16cpu 17cpu 18cpu 19cpu 20cpu 21cpu 22cpu 23cpu 24cpu 25cpu 26cpu 27cpu 28cpu 29cpu 30cpu 31cpu 32cpu 33cpu 34cpu 35cpu 36cpu 37cpu 38cpu 39cpu 40cpu 41cpu 42cpu 43cpu 44cpu 45cpu 46cpu 47cpu 48cpu 49cpu 50cpu 51cpu 52cpu 53cpu 54cpu 55cpu 56cpu 57cpu 58cpu 59cpu 60cpu 61cpu 62cpu 63cpu 64cpu 65cpu 66cpu 67cpu 68cpu 69cpu 70cpu 71cpu 72cpu 73cpu 74cpu 75cpu 76cpu 77cpu 78cpu 79cpu

由于我们是一个核一个队列,且按照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

linux的nvme驱动需要关心的统计项的更多相关文章

  1. linux的nvme驱动参数调优

    nvme的设备,可以调优的参数比较少,相关的代码如下: blk_sysfs.c static struct queue_sysfs_entry queue_requests_entry = { .at ...

  2. linux 中nvme 的中断申请及处理

    /** * struct irq_desc - interrupt descriptor * @irq_data: per irq and chip data passed down to chip ...

  3. linux lcd设备驱动剖析一

    s3c2440 lcd驱动源码文件是:drivers/video/s3c2410fb.c 看驱动源码首先当然是先看入口函数,这里是s3c2410fb_init函数 [cpp] view plain? ...

  4. Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门

    Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门 转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chines ...

  5. 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)

    要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分.不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI.US ...

  6. linux块设备驱动之实例

    1.注册:向内核注册个块设备驱动,其实就是用主设备号告诉内核这个代表块设备驱动 sbull_major  =  register_blkdev(sbull_major, "sbull&quo ...

  7. Linux 视频设备驱动V4L2最常用的控制命令

    http://blog.csdn.net/shaolyh/article/details/6583226 Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02) 命令 功能 VIDIOC ...

  8. linux 2.6 驱动笔记(一)

    本文作为linux 2.6 驱动笔记,记录环境搭建及linux基本内核模块编译加载. 环境搭建: 硬件:OK6410开发板 目标板操作系统:linux 2.6 交叉编译环境:windows 7 + v ...

  9. 深入理解Linux字符设备驱动

    文章从上层应用访问字符设备驱动开始,一步步地深入分析Linux字符设备的软件层次.组成框架和交互.如何编写驱动.设备文件的创建和mdev原理,对Linux字符设备驱动有全面的讲解.本文整合之前发表的& ...

随机推荐

  1. SpringMVC PathVariable和post、get、put、delete请求

    1.PathVariable 可以映射URL中的占位符到目标方法的参数中. 2.Rest风格的URL 以CRUD为例: 新增:/order POST 修改:/order/id PUT 获取:/orde ...

  2. Dotnet Core Windows Service

    在dotnet 中有topshelf 可以很方便的写windows 服务并且安装也是很方便的,命令行 运行.exe install 就直接把exe 程序安装成windows 服务.当然 代码也要做相应 ...

  3. CDN 边缘规则,三秒部署、支持定制、即时生效,多种规则覆盖常用业务场景

    2017年的最后一周,又拍云进行了一次重要升级,将自定义 Rewrite 升级为"边缘规则".互联网应用场景的日益多样化,简单.方便.快速的根据不同应用场景实现不同的功能变得越来越 ...

  4. android散点技术

    1.怎么实现android虚拟按键(回退和回到主界面) android 中如何模拟back键 2.怎么用局域网的方式(wifi或是网线)来调试android机 参考资料: http://www.ith ...

  5. 什么是TNB?如何买TNB?

    我天天在微博上看到有人吹TNB,今天一起来看下它到底是什么玩意? 什么是TNB? Time New Bank (TNB) 旨在打造精淮的时间价值传输网络.   我们高度认可人们时间付出的商业价值,每个 ...

  6. 【树链剖分】洛谷P3379 树链剖分求LCA

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  7. STM32/GD32芯片信息

    因为需要自动适配芯片进行系统配置,所以我们有必要通过读取一些系统寄存器来获取必要信息.我们的代码需要兼容STM32F1/GD32F1/STM32F0/STM32F4 代码如下: #ifdef STM3 ...

  8. java中注解的使用

    使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...

  9. java_web学习(七) MySQL的配置与安装

    一:下载MySQL 1.进入oracle官网 2. 3. 4. 5. 6. 7. 网址:https://dev.mysql.com/downloads/file/?id=469273 二:配置MySQ ...

  10. MATLAB R2017a 安装与破解

    第一步: 到我的百度网盘下载MatlAB2017a的原安装程序和破解补丁: 链接:https://pan.baidu.com/s/1jJz97DW 提取密码: d59m 第二步: 下载的两个iso文件 ...