例如,我相信,我们有/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
使用一组单独的操作 - 搜索告诉我ftrace
并blktrace
使用不同的报告机制,但我无法弄清楚这两种机制的每个跟踪点如何与内核源代码相关。有没有一种简单的方法可以将跟踪点映射到源代码?