如何让 blktrace 工具显示 D 发出的动作

Posted

技术标签:

【中文标题】如何让 blktrace 工具显示 D 发出的动作【英文标题】:How to get the blktrace tool to show the D - issued action 【发布时间】:2015-09-19 01:43:47 【问题描述】:

这个问题是关于 blktrace 工具的。在我们实验室的几台 Ubuntu 3.16.0 机器上,我需要跟踪软件与设备块 IO 的性能。我们有时使用我们的自定义 nvme 驱动程序,有时使用标准驱动程序。这是 blkparse 输出的摘录(使用标准 nvme 驱动程序):

259,0    2   189505     9.997188463  8160  Q   R 126875648 + 248 [fio]
259,0    2   189506     9.997191290  8160  Q   R 126875896 + 8 [fio]
259,0    2   189507     9.997215574  8160  Q   R 363057152 + 248 [fio]
259,0    2   189508     9.997218444  8160  Q   R 363057400 + 8 [fio]
259,0    2   189509     9.997219210  8160  C   R 216536568 + 8 [0]
259,0    2   189510     9.997220497  8160  C   R 126875896 + 8 [0]
259,0    2   189511     9.997230160  8160  C   R 363057400 + 8 [0]
259,0    2   189512     9.997248050  8160  Q   R 147316736 + 248 [fio]
259,0    2   189513     9.997250930  8160  Q   R 147316984 + 8 [fio]
259,0    2   189514     9.997277161     0  C   R 147316984 + 8 [0]

这显示了我感兴趣的 Queued 和 Complete 操作,而不是 D - 发出的操作。这就是问题所在。我需要显示更多操作(事件)。这是来自

blktrace /dev/nvme0n1

同时,它可以在其他 Linux 机器上运行,如果我跟踪不同的设备,甚至可以在同一台机器上运行

blktrace /dev/sda

如这段摘录所示:

  8,0   18       69    17.778827207  8538  Q  RA 306186592 + 8 [ls]
  8,0   18       70    17.778827767  8538  G  RA 306186592 + 8 [ls]
  8,0   18       71    17.778828037  8538  I   R 306186592 + 8 [ls]
  8,0   18       72    17.778828284  8538  D   R 306186592 + 8 [ls]
  8,0   18       73    17.778832181  8538  A  RA 306186600 + 8 <- (8,1) 306184552
  8,0   18       74    17.778832397  8538  Q  RA 306186600 + 8 [ls]
  8,0   18       75    17.778832951  8538  G  RA 306186600 + 8 [ls]
  8,0   18       76    17.778833221  8538  I   R 306186600 + 8 [ls]
  8,0   18       77    17.778833441  8538  D   R 306186600 + 8 [ls]
  8,0   18       78    17.778837161  8538  A  RA 306186608 + 8 <- (8,1) 306184560

最后一个(使用 /dev/sda)显示了所有不同的操作,这很棒。 那么如何获取 nvme0n1 设备的详细 blktrace 呢?为什么它不自动显示其他动作(除了 Q 和 C)?

【问题讨论】:

【参考方案1】:

只要您的 nvme 设备具有块设备接口,您就应该能够看到 D。在fio 中尝试libaio 引擎并运行random write。确保在/sys/block/nvme../scheduler中设置NOOP IO调度器

【讨论】:

感谢您的提示。它现在正在工作。将 Ubuntu 升级到 15.04 可能也有帮助,我一次做了几处更改。

以上是关于如何让 blktrace 工具显示 D 发出的动作的主要内容,如果未能解决你的问题,请参考以下文章

利用blktrace分析磁盘I/O

利用blktrace分析磁盘I/O

通过blktrace, debugfs分析磁盘IO

blktrace 只能跟踪一个特定的进程吗?

如何以编程方式在android中使用blktrace命令执行shell脚本?

如何在目标板上实现blktrace