最近为了解决一个技术问题,需要用到内核里中断下半部的tasklet机制,使用过程遇到了非常有趣的问题。在解决问题过程中,也逐步加深了对tasklet机制的理解。本文把这些收获记录下来和大家一起分享,经3.10测试通过
一、问题发生的场景
出于排查磁盘IO方面问题的原因,需要利用内核tracepoint技术详细地监测磁盘IO的明细行为信息,如下git为代码示例。
其中关键部分代码摘要如下。
这里不必对tracepoint机制进行深究,只需要了解blk_add_trace_rq_insert1回调函数对应于linux内核函数中的block_rq_insert静态探针点,block_rq_insert探针点在__elv_add_request内核函数的开头处打点(trace_block_rq_insert处),如下代码所示。每一次__elv_a