예를 들어 기본적으로 IO 완료 추적 지점인 /sys/kernel/debug/tracing/events/block/block_bio_complete
and가 있다고 생각합니다 . 이를 사용하면 다음과 같은 줄을 볼 수 있습니다.block_rq_complete
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
두 메커니즘의 각 추적점이 커널 소스와 어떻게 관련되는지 알 수 없습니다. 추적 지점을 소스 코드에 매핑하는 쉬운 방법이 있습니까?