如何让 blktrace 工具显示 D 发出的动作
How to get the blktrace tool to show the D - issued action
这个问题是关于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]
这显示了排队和完成的操作,但没有显示我感兴趣的 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)?
只要您的 nvme 设备具有块设备接口,您就应该能够看到 D。在 fio
和 运行 中尝试 libaio
引擎 random write
。确保在 /sys/block/nvme../scheduler
中设置 NOOP IO 调度程序
这个问题是关于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]
这显示了排队和完成的操作,但没有显示我感兴趣的 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)?
只要您的 nvme 设备具有块设备接口,您就应该能够看到 D。在 fio
和 运行 中尝试 libaio
引擎 random write
。确保在 /sys/block/nvme../scheduler