blktrace - 区分顺序 io 和随机 io

blktrace - 区分顺序 io 和随机 io

我正在寻找一种方法来确定应用程序是执行顺序 I/O 还是随机 I/O。是否可以查看 blktrace 捕获并判断 I/O 是顺序的还是随机的?如果是,我应该寻找什么模式的任何例子?

答案1

似乎可以使用blktrace+blkparse来获取此信息。看一下我在 U&L 问答中包含的图表:Linux 内核与性能工具图?,特别是本节。

SS#1

blktrace似乎它的定位就是向您显示此类数据。在查看手册页时,blkparse它表明您可以sector在输出中包含该数字。

摘自 blkparse 手册页
OUTPUT DESCRIPTION AND FORMATTING
       The output from blkparse can be tailored for specific use -- in 
       particular, to ease parsing of output, and/or limit output fields
       to  those the user wants to see. The data for fields which can be 
       output include:

       a   Action, a (small) string (1 or 2 characters) -- see table below 
           for more details
       c   CPU id
       C   Command
...
       s   Sequence numbers
       S   Sector number

例子

$ sudo blktrace /dev/sda
Ctrl + C

然后用以下方法进行分析blkparse

$ blkparse sda -f "%-10S %D %2c %8s %5T.%9t %5p %2a %3d\n" | head -10
4064336      8,0    3        1     0.000000000  2779  A   R
5090384      8,0    3        2     0.000000404  2779  A   R
5090384      8,0    3        3     0.000001656  2779  Q   R
5090384      8,0    3        4     0.000010042  2779  G   R
5090384      8,0    3        5     0.000013714  2779  I   R
  8,0    3        0     0.000019067     0  m   N cfq2779SN / insert_request
  8,0    3        0     0.000021085     0  m   N cfq2779SN / add_to_rr
  8,0    3        0     0.000026848     0  m   N cfq2779SN / set_active wl_class:2 wl_type:1
  8,0    3        0     0.000029175     0  m   N cfq2779SN / fifo=          (null)
  8,0    3        0     0.000030077     0  m   N cfq2779SN / dispatch_insert

当有扇区需要报告时,它们会显示为不带逗号的数字,即4064336。因此理论上您可以确认扇区号是连续的还是随机的。

困难的部分是确定哪个应用程序在较低级别引起了哪个 I/O 事件。为了解决这个问题,您可以使用fatrace我在 U&L 问答中详细介绍的工具,标题为:确定负责高 I/O 的特定文件

参考

相关内容