linux trace API

void trace_irq_handler_entryint 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_exitint 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_entryunsigned int vec_nr)

紧接在 softirq 处理程序之前调用

参数

unsigned int vec_nr

SoftIRQ 向量数

描述

与softirq_exit跟踪点结合使用时 我们可以确定 SoftIRQ 处理程序例程。

void trace_softirq_exitunsigned int vec_nr)

在 softirq 处理程序返回后立即调用

参数

unsigned int vec_nr

SoftIRQ 向量数

描述

与softirq_entry跟踪点结合使用时 我们可以确定 SoftIRQ 处理程序例程。

void trace_softirq_raiseunsigned int vec_nr)

引发 softirq 时立即调用

参数

unsigned int vec_nr

SoftIRQ 向量数

描述

与softirq_entry跟踪点结合使用时 我们可以确定 softirq 提升到运行延迟。

void trace_tasklet_entrystruct tasklet_struct *t, void *func)

在运行任务

参数

struct tasklet_struct *t

Tasklet 指针

void *func

正在运行的 Tasklet 回调或函数

描述

用于查找单个任务的执行时间

void trace_tasklet_exitstruct tasklet_struct *t, void *func)

在 tasklet 运行后立即调用

参数

struct tasklet_struct *t

Tasklet 指针

void *func

正在运行的 Tasklet 回调或函数

描述

用于查找单个任务的执行时间

信号

void trace_signal_generateint 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_deliverint 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_requeuestruct 请求 *rq)

将块 IO 请求放回队列

参数

struct request *rq

块 IO 操作请求

描述

块操作请求 rq 被放回队列 q。由于某种原因,请求未完成,需要 放回队列中。

void trace_block_rq_completestruct 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_errorstruct 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_donestruct 请求 *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_bouncestruct bio *bio)

处理块操作时使用的弹跳缓冲区

参数

struct bio *bio

块操作

描述

弹跳缓冲区用于处理 q 中的块操作 bio。 当硬件限制阻止直接传输 生物数据存储区和 IO 设备之间的数据。使用 退回缓冲区需要额外的数据复制,并且减少 性能。

void trace_block_bio_backmergestruct 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_queuestruct bio *bio)

将新的块 IO 操作放入队列中

参数

struct bio *bio

新建块操作

描述

即将将块 IO 操作 bio 放入队列 q 中。

void trace_block_getrqstruct bio *bio)

在队列中获取块 IO 操作的免费请求条目

参数

struct bio *bio

待处理块 IO 操作(可以是NULL)

描述

已分配一个请求结构来处理块 IO 操作 bio

void trace_block_plugstruct request_queue *q)

将操作请求保留在请求队列中

参数

struct request_queue *q

要插入的请求队列

描述

插入请求队列 q。不允许阻止操作请求 发送到设备驱动程序。相反,将请求累积在 队列,用于提高块设备的吞吐量性能。

void trace_block_unplugstruct request_queue *q, unsigned int depth, bool explicit)

释放请求队列中的操作请求

参数

struct request_queue *q

请求队列以拔出

unsigned int depth

刚刚添加到队列的请求数

bool explicit

这是显式拔出,还是来自 schedule() 的拔出

描述

拔出请求队列 q,因为设备驱动程序已计划工作 on 请求队列中的元素。

void trace_block_splitstruct bio *bio, unsigned int new_sector)

将单个生物结构拆分为两个生物结构

参数

struct bio *bio

正在拆分的块操作

unsigned int new_sector

新生物的起始部门

描述

生物请求 bio 需要拆分为两个生物请求。新 创建的生物请求从 new_sector 开始。由于以下原因,可能需要此拆分 硬件限制,例如在 RAID 中跨设备边界的操作 系统。

void trace_block_bio_remapstruct bio *bio, dev_t dev, sector_t 来自)

将逻辑设备的请求映射到原始设备

参数

struct bio *bio

修订后的操作

dev_t dev

用于操作的原始设备

sector_t from

运营的原始扇区

描述

逻辑设备的操作已映射到 原始块设备。

void trace_block_rq_remapstruct 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_workint 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_workstruct work_struct *work)

在作品被激活时调用

参数

struct work_struct *work

指向结构work_struct的指针

描述

当排队的工作被放入活动队列时,将发生此事件。 除非max_active限制,否则在排队后立即发生 已达到。

void trace_workqueue_execute_startstruct work_struct *work)

在 Workqueue 回调之前立即调用

参数

struct work_struct *work

指向结构work_struct的指针

描述

允许跟踪工作队列的执行。

void trace_workqueue_execute_endstruct work_struct *work, work_func_t 函数)

在 workqueue 回调后立即调用

参数

struct work_struct *work

指向结构work_struct的指针

work_func_t function

指向 worker 函数的指针

描述

允许跟踪工作队列的执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值