void trace_irq_handler_entry(int irq, struct irqaction *操作)
紧接在 IRQ 操作处理程序之前调用
参数
int irq
IRQ 编号
struct irqaction *action
指向
描述
指向的 by action 包含各种 有关处理程序的信息,包括设备名称 action->name 和设备 ID action->dev_id。当用于 结合irq_handler_exit跟踪点,我们可以计算出 输出 IRQ 处理程序延迟。
void trace_irq_handler_exit(int irq, struct irqaction *action, int ret)
在 IRQ 操作处理程序返回后立即调用
参数
int irq
IRQ 编号
struct irqaction *action
指向
int ret
返回值
描述
如果 ret 值设置为 IRQ_HANDLED,那么我们知道相应的 action->handler 成功处理了这个 irq。否则,irq 可能是 共享的 IRQ 线路,或者 IRQ 未成功处理。可用于 与irq_handler_entry结合使用,以了解 IRQ 处理程序延迟。
void trace_softirq_entry(unsigned int vec_nr)
紧接在 softirq 处理程序之前调用
参数
unsigned int vec_nr
SoftIRQ 向量数
描述
与softirq_exit跟踪点结合使用时 我们可以确定 SoftIRQ 处理程序例程。
void trace_softirq_exit(unsigned int vec_nr)
在 softirq 处理程序返回后立即调用
参数
unsigned int vec_nr
SoftIRQ 向量数
描述
与softirq_entry跟踪点结合使用时 我们可以确定 SoftIRQ 处理程序例程。
void trace_softirq_raise(unsigned int vec_nr)
引发 softirq 时立即调用
参数
unsigned int vec_nr
SoftIRQ 向量数
描述
与softirq_entry跟踪点结合使用时 我们可以确定 softirq 提升到运行延迟。
void trace_tasklet_entry(struct tasklet_struct *t, void *func)
在运行任务
参数
struct tasklet_struct *t
Tasklet 指针
void *func
正在运行的 Tasklet 回调或函数
描述
用于查找单个任务的执行时间
void trace_tasklet_exit(struct tasklet_struct *t, void *func)
在 tasklet 运行后立即调用
参数
struct tasklet_struct *t
Tasklet 指针
void *func
正在运行的 Tasklet 回调或函数
描述
用于查找单个任务的执行时间
信号
void trace_signal_generate(int sig, struct kernel_siginfo *info, struct task_struct *task、int 组、int 结果)
生成信号时调用
参数
int sig
信号编号
struct kernel_siginfo *info
指向结构 SIGINFO 的指针
struct task_struct *task
指向结构task_struct的指针
int group
共享或私有
int result
TRACE_SIGNAL_*
描述
当前进程向“任务”进程发送“sig”信号 'info' siginfo。如果“info”是SEND_SIG_NOINFO或SEND_SIG_PRIV, “info”不是指针,您无法访问其字段。相反 SEND_SIG_NOINFO意味着si_code是SI_USER的,并且SEND_SIG_PRIV 表示si_code SI_KERNEL。
void trace_signal_deliver(int sig, struct kernel_siginfo *info, struct k_sigaction *ka)
在传递信号时调用
参数
int sig
信号编号
struct kernel_siginfo *info
指向结构 SIGINFO 的指针
struct k_sigaction *ka
指向结构k_sigaction的指针
描述
“sig”信号通过“info”siginfo传递到当前进程, 它将由“ka”处理。Ka->sa.sa_handler 可以是 SIG_IGN 或 SIG_DFL。 请注意,跟踪点报告的某些信号signal_generate可能是 在命中此跟踪点之前丢失、忽略或修改(由调试器)。 这意味着,这可以显示实际传递了哪些信号,但是 匹配生成的信号和传递的信号可能不正确。
块 IO
void trace_block_touch_buffer(结构体 buffer_head *bh)
标记已访问的缓冲区
参数
struct buffer_head *bh
buffer_head被触摸
描述
从 touch_buffer() 调用。
void trace_block_dirty_buffer(结构buffer_head *bh)
将缓冲区标记为脏
参数
struct buffer_head *bh
buffer_head被弄脏了
描述
调用自 。
void trace_block_rq_requeue(struct 请求 *rq)
将块 IO 请求放回队列
参数
struct request *rq
块 IO 操作请求
描述
块操作请求 rq 被放回队列 q。由于某种原因,请求未完成,需要 放回队列中。
void trace_block_rq_complete(struct request *rq, blk_status_t error, unsigned int nr_bytes)
由设备驱动程序完成的块 IO 操作
参数
struct request *rq
阻止操作请求
blk_status_t error
状态码
unsigned int nr_bytes
完成的字节数
描述
block_rq_complete跟踪点事件指示某些部分 的操作请求已由设备驱动程序完成。如果 RQ->BIO 是 ,那么绝对没有额外的工作 do 为请求。如果 rq->bio 为非 NULL,则有 完成请求所需的其他工作。NULL
void trace_block_rq_error(struct request *rq, blk_status_t error, unsigned int nr_bytes)
设备驱动程序报告的块 IO 操作错误
参数
struct request *rq
阻止操作请求
blk_status_t error
状态码
unsigned int nr_bytes
完成的字节数
描述
block_rq_error跟踪点事件指示某些部分 的操作请求失败,如设备驱动程序所报告的那样。
void trace_block_rq_insert(结构请求 *rq)
将块操作请求插入队列
参数
struct request *rq
块 IO 操作请求
描述
在插入块操作请求 rq 之前立即调用 进入队列 Q。操作请求 rq struct 中的字段可以 进行检查以确定挂起的设备和扇区 操作将访问。
void trace_block_rq_issue(结构请求 *rq)
向设备驱动程序发出挂起的块 IO 请求操作
参数
struct request *rq
块 IO 操作请求
描述
当队列 q 中的块操作请求 rq 发送到 用于处理的设备驱动程序。
void trace_block_rq_merge(结构请求 *rq)
将请求与电梯中的另一个请求合并
参数
struct request *rq
块 IO 操作请求
描述
当队列 q 中的块操作请求 rq 合并到另一个队列时调用 请求在电梯里排队。
void trace_block_io_start(结构请求 *rq)
插入执行请求
参数
struct request *rq
块 IO 操作请求
描述
当块操作请求 rq 排队等待执行时调用
void trace_block_io_done(struct 请求 *rq)
块 IO 操作请求已完成
参数
struct request *rq
块 IO 操作请求
描述
块操作请求 rq 完成时调用
void trace_block_bio_complete(结构体request_queue *q, 结构体生物 *bio)
完成了块操作的所有工作
参数
struct request_queue *q
保留块操作的队列
struct bio *bio
块操作已完成
描述
此跟踪点表明没有进一步的工作可做 块 IO 操作生物。
void trace_block_bio_bounce(struct bio *bio)
处理块操作时使用的弹跳缓冲区
参数
struct bio *bio
块操作
描述
弹跳缓冲区用于处理 q 中的块操作 bio。 当硬件限制阻止直接传输 生物数据存储区和 IO 设备之间的数据。使用 退回缓冲区需要额外的数据复制,并且减少 性能。
void trace_block_bio_backmerge(struct bio *bio)
将块操作合并到现有操作的末尾
参数
struct bio *bio
要合并的新块操作
描述
将块请求 bio 合并到现有块请求的末尾。
void trace_block_bio_frontmerge(struct bio *bio)
merging block operation to the beginning of an existing operation
Parameters
struct bio *bio
new block operation to merge
Description
Merging block IO operation bio to the beginning of an existing block request.
void trace_block_bio_queue(struct bio *bio)
将新的块 IO 操作放入队列中
参数
struct bio *bio
新建块操作
描述
即将将块 IO 操作 bio 放入队列 q 中。
void trace_block_getrq(struct bio *bio)
在队列中获取块 IO 操作的免费请求条目
参数
struct bio *bio
待处理块 IO 操作(可以是NULL
)
描述
已分配一个请求结构来处理块 IO 操作 bio。
void trace_block_plug(struct request_queue *q)
将操作请求保留在请求队列中
参数
struct request_queue *q
要插入的请求队列
描述
插入请求队列 q。不允许阻止操作请求 发送到设备驱动程序。相反,将请求累积在 队列,用于提高块设备的吞吐量性能。
void trace_block_unplug(struct request_queue *q, unsigned int depth, bool explicit)
释放请求队列中的操作请求
参数
struct request_queue *q
请求队列以拔出
unsigned int depth
刚刚添加到队列的请求数
bool explicit
这是显式拔出,还是来自 schedule() 的拔出
描述
拔出请求队列 q,因为设备驱动程序已计划工作 on 请求队列中的元素。
void trace_block_split(struct bio *bio, unsigned int new_sector)
将单个生物结构拆分为两个生物结构
参数
struct bio *bio
正在拆分的块操作
unsigned int new_sector
新生物的起始部门
描述
生物请求 bio 需要拆分为两个生物请求。新 创建的生物请求从 new_sector 开始。由于以下原因,可能需要此拆分 硬件限制,例如在 RAID 中跨设备边界的操作 系统。
void trace_block_bio_remap(struct bio *bio, dev_t dev, sector_t 来自)
将逻辑设备的请求映射到原始设备
参数
struct bio *bio
修订后的操作
dev_t dev
用于操作的原始设备
sector_t from
运营的原始扇区
描述
逻辑设备的操作已映射到 原始块设备。
void trace_block_rq_remap(struct request *rq, dev_t dev, sector_t from)
块操作请求的映射请求
参数
struct request *rq
块 IO 操作请求
dev_t dev
操作装置
sector_t from
运营的原始扇区
描述
q 中的块操作请求 rq 已重新映射。块 操作请求 RQ 保存当前信息,并从保留 原来的扇区。
工作队列
void trace_workqueue_queue_work(int req_cpu, struct pool_workqueue *pwq, struct work_struct *work)
当工作排队时调用
参数
int req_cpu
请求的 CPU
struct pool_workqueue *pwq
指向结构pool_workqueue的指针
struct work_struct *work
指向结构work_struct的指针
描述
当工作立即排队或排队一次时,会发生此事件 延迟的工作实际上是在工作队列上排队的(即:一旦延迟 已达到)。
void trace_workqueue_activate_work(struct work_struct *work)
在作品被激活时调用
参数
struct work_struct *work
指向结构work_struct的指针
描述
当排队的工作被放入活动队列时,将发生此事件。 除非max_active限制,否则在排队后立即发生 已达到。
void trace_workqueue_execute_start(struct work_struct *work)
在 Workqueue 回调之前立即调用
参数
struct work_struct *work
指向结构work_struct的指针
描述
允许跟踪工作队列的执行。
void trace_workqueue_execute_end(struct work_struct *work, work_func_t 函数)
在 workqueue 回调后立即调用
参数
struct work_struct *work
指向结构work_struct的指针
work_func_t function
指向 worker 函数的指针
描述
允许跟踪工作队列的执行。