Linux 中是否有任何工具可以跟踪过去一小时内对块设备的读/写请求量?

Linux 中是否有任何工具可以跟踪过去一小时内对块设备的读/写请求量?

我正在对 Linux 程序进行性能实验,该程序获取输入数据,对其进行处理并将数据写入块设备

尽管我知道输入有多少数据(例如1GB),但我不知道到底有多少数据写入块设备,因为程序会处理它(包括删除一些中间数据,写入额外数据)。所以这不利于计算块设备的整个吞吐量。

我曾经使用过blktrace,但它可以轻松获取大量数据,我不确定这是否能够在过去的 1 小时内工作。

我知道FIO能够对 IO 设备进行基准测试,但我特别想测试该程序下的块 IO 设备行为。所以基本上我实际上是在测试块 IO 设备和程序的组合,而不仅仅是块 IO 设备。

du -sh我也考虑过这种方法,但du -sh无法捕获删除的数据量。另外,能否du -sh捕获写入物理设备的数据?我的意思是,不是文件系统。

还有其他工具可以使用吗?

答案1

如果您需要每小时读/写的总字节数,iostat可以为您提供。

$ iostat sda -tdyh 10
Linux 4.12.14-122.136-default (hostname)       05/22/2023      _x86_64_        (18 CPU)

05/22/2023 12:56:22 PM
      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
     2.30         0.0k        14.8k       0.0k     148.0k sda

05/22/2023 12:56:32 PM
      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
   412.00         0.0k       102.5M       0.0k       1.0G sda

05/22/2023 12:56:42 PM
      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
   420.80       102.4M       104.8k       1.0G       1.0M sda

kB_readkB_wrtn分别显示读取或写入的块总数。首先,它表明:

  • 之间12:56:2212:56:321GB 已写入磁盘。
  • 之间12:56:3212:56:42从磁盘读取了 1GB。

(我使用dd命令将 1G 文件写入/读取到磁盘来创建这些数字并确保报告正确)

我使用过的标志:

  • -t- 打印显示的每个报告的时间。
  • -d- 仅显示设备报告(没有它,iostat也会显示CPU利用率)
  • -y- 省略系统启动后的第一份统计报告。仅报告间隔之间的利用率。
  • -h- 使设备利用率报告更易于人类阅读(如果需要,MB/GB,而不仅仅是 kB)
  • 10- 是间隔(以秒为单位),在本例中为每 10 秒。如果您想每小时检查一次,请使用 3600。

相关内容