off time cpu profile原理(bcc/tools/offcputime.py)

本文介绍了如何利用BCC工具中的offcputime.py来分析程序放弃CPU的情况,以查找吞吐量和响应性能不佳的原因。通过kprobe拦截finish_task_switch,记录线程调度信息并计算等待时间,从而生成有助于优化的分析数据。虽然BCC的栈追踪功能有限,但此方法提供了一个理解off-CPU时间的基础。
摘要由CSDN通过智能技术生成

        常见的profile都on cpu的,也即是程序在CPU上运行时候的情况,例如基于运行时的栈采样输出火焰图。还有一种profile概念,与上述的概念正好相反,记录的是放弃CPU的情况,它的用处一般是拿来查程序为啥吞吐,响应表现不佳,通过off cpu的数据可以定位程序都是什么原因放弃了CPU。

         要拿到on cpu的数据可能方式很多,但是要拿到off cpu的情况就需要从调度着手了,bcc提供了实现off cpu profile的工具,地址:https://github.com/iovisor/bcc/blob/master/tools/offcputime.py

简单看一下其实现原理:

struct key_t {
    u32 pid;
    u32 tgid;
    int user_stack_id;
    int kernel_stack_id;
    char name[TASK_COMM_LEN];
};
BPF_HASH(counts, struct key_t);
BPF_HASH(start, u32);
BPF_STACK_TRACE(stack_traces, STACK_STORAGE_SIZE);

struct warn_event_t {
    u32 pid;
    u32 tgid;
    u32 t_start;
    u32 t_end;
};
BPF_PERF_OUTPUT(warn_events);

int oncpu(struct pt_regs *ctx, struct task_struct *prev) {
    u32 pid = prev->pid;
    u32 tgid = prev->tgid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值