ftrace 和 blktrace 跟踪点有什么区别?

ftrace 和 blktrace 跟踪点有什么区别?

例如,我相信,我们有/sys/kernel/debug/tracing/events/block/block_bio_complete和 ,block_rq_complete这基本上是 的 IO 完成跟踪点。ftrace使用sudo blktrace -d /dev/sdb1 -o - | blkparse -i -我们可能会看到这样的一行:

  8,33   1        3     0.001086286     0  C  RA 1158137880 + 8 [0]
                                           ^ IO completion action

C是根据文档的 IO 完成事件,但这是否相同block_bio_complete或是否有所不同。检查源代码,我可以看到https://elixir.bootlin.com/linux/v5.6/source/block/blk-core.c#L1441:

trace_block_rq_complete(req, blk_status_to_errno(error), nr_bytes);

并且在https://elixir.bootlin.com/linux/v5.6/source/block/bio.c#L1863:

trace_block_bio_complete(bio->bi_disk->queue, bio, blk_status_to_errno(bio->bi_status));

该动作是两者中的哪一个C?或者确实blktrace使用一组单独的操作 - 搜索告诉我ftraceblktrace使用不同的报告机制,但我无法弄清楚这两种机制的每个跟踪点如何与内核源代码相关。有没有一种简单的方法可以将跟踪点映射到源代码?

相关内容