【问题标题】:Information about perf block events有关 perf 块事件的信息
【发布时间】:2020-07-22 20:39:18
【问题描述】:

我需要有关 perf 中可用的以下块(磁盘 I/O)事件的信息。您能告诉我在哪里可以获得有关每个活动的详细信息吗?

  block:block_bio_backmerge                          
  block:block_bio_bounce                            
  block:block_bio_complete                          
  block:block_bio_frontmerge                         
  block:block_bio_queue                              
  block:block_bio_remap                            
  block:block_dirty_buffer                           
  block:block_getrq                                
  block:block_plug                                  
  block:block_rq_complete                           
  block:block_rq_insert                             
  block:block_rq_issue                              
  block:block_rq_remap                               
  block:block_rq_requeue                             
  block:block_sleeprq                                
  block:block_split                                 
  block:block_touch_buffer                           
  block:block_unplug

请帮帮我。

【问题讨论】:

标签: linux-kernel perf


【解决方案1】:

正如@osgx 已经提到的,这些是软件跟踪点事件,在内核源代码中的许多预定义跟踪点事件中,您可以在运行时看到这些事件 -

sudo perf list | grep Tracepoint

当您运行某些命令时,基于块的跟踪点事件可以提供存储设备正在做什么的详细信息。

sudo perf record -e block:block_rq_complete -a sleep 10
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.412 MB perf.data (340 samples) ]

block_rq_complete 跟踪点跟踪已完全或部分完成的 I/O 请求。

sudo perf script
         swapper     0 [006] 205791.409875: block:block_rq_complete: 8,16 RM () 390439208 + 8 [0]
         swapper     0 [006] 205791.410439: block:block_rq_complete: 8,16 RM () 390439256 + 8 [0]
          chrome  9526 [006] 205793.149462: block:block_rq_complete: 8,16 W () 424979920 + 8 [0]
          chrome  9526 [006] 205793.149781: block:block_rq_complete: 8,16 W () 490387000 + 352 [0]
         swapper     0 [006] 205794.547686: block:block_rq_complete: 8,16 WS () 432636024 + 1344 [0]
         swapper     0 [006] 205794.558292: block:block_rq_complete: 8,16 WS () 432637368 + 1344 [0]
         swapper     0 [006] 205794.566718: block:block_rq_complete: 8,16 WS () 432638712 + 544 [0]
         swapper     0 [006] 205794.599791: block:block_rq_complete: 8,16 FF () 18446744073709551615 + 0 [0]
         swapper     0 [006] 205794.599868: block:block_rq_complete: 8,16 WS () 432639256 + 8 [0]
         swapper     0 [006] 205794.600792: block:block_rq_complete: 8,16 FF () 18446744073709551615 + 0 [0]
         swapper     0 [006] 205794.600798: block:block_rq_complete: 8,16 WS () 432639256 + 0 [0]
         swapper     0 [006] 205798.268989: block:block_rq_complete: 8,16 W () 462924840 + 8 [0]
         swapper     0 [006] 205798.269079: block:block_rq_complete: 8,16 W () 462934720 + 8 [0]
         swapper     0 [006] 205798.269118: block:block_rq_complete: 8,16 W () 462934752 + 8 [0]
         swapper     0 [006] 205798.269158: block:block_rq_complete: 8,16 W () 462935416 + 8 [0]
         swapper     0 [006] 205798.269195: block:block_rq_complete: 8,16 W () 462935592 + 8 [0]
         swapper     0 [006] 205798.269241: block:block_rq_complete: 8,16 W () 476143872 + 8 [0]
         swapper     0 [006] 205798.269265: block:block_rq_complete: 8,16 W () 476144624 + 8 [0]
         swapper     0 [006] 205798.269283: block:block_rq_complete: 8,16 W () 476145360 + 8 [0]

输出的前 5 列很好理解 - (进程名称/命令、pid、CPU、时间戳、已完成采样的事件名称),所以我们将从第 6 列开始 -

8,16 指的是设备的主次编号。

ls -l /dev/sdb
brw-rw---- 1 root disk 8, 16 Apr  8 07:52 /dev/sdb

字符 R,W,B,S,F 描述正在执行的 I/O 操作,其中“R”表示读取,“W”表示写入,“D”表示丢弃块,“M”表示元数据,“S”指同步,“F”指刷新。

空括号() 后面的数字指的是从完成I/O 操作的设备开始的偏移量和完成的I/O 扇区数。

[0] 表示错误数。

可以在此处获得有关大多数其他事件的一些信息 - block events summary

请注意,这些事件的 API 会不断变化,并且可能因您使用的 linux 内核而异。我已附上内核版本 5.6 的摘要。

【讨论】:

    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多