irqs跟踪器

        当中断被关闭(俗称关中断)了,CPU就不能响应其他事件,如果这时有一个鼠标中断,要在下一次开中断时才能响应这个鼠标中断,这段延迟称为中断延迟。向current_tracer文件中写入irqoff字符串即可打开offirq来跟中中断延迟。 

# cd /sys/kernel/debug/tracing/
# echo 0 > options/function-trace             //关闭function-trace 可以减少一些延迟
# echo irqoff > current_tracer
# echo 1 > tracing_on
[....] //停顿一小会
# echo 0 > tracing_on
# cat trace

    下面是irqoff跟踪的一个结果:

# tracer:irqoff
# irqoff latency trace v1.1.5 on 4.0.0
  --------------------------------------
# latency:259 us,#4/4,CPU#2 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
  -----------------
# | task : ps-6143 (uid:0 nice:0 policy:0 rt_prio:0)
------------------------------------------------------
# =>start at: __lock_task_sighand
# => ended at : _raw_spin_unlock_irqrestore
#
#                _-------------=> CPU
#                /_------------=> irqs-off
#               |/_------------=> need-resched
#              ||/_------------=> hardirq/softirq
#             |||/_------------=> preempt-depth
#            ||||/_------------=> delay
#     
#    cmd pid            time         caller
      |   |              |             |
     ps-6143     2d...  0us!:       tarce_hardirqs_off <-__lock_task_sighand
     ps-6143     2d...1 259us+:     tarce_hardirqs_on  <- _raw_spin_unlock_irqrestore
     ps-6143     2d...1 263us+:     time_hardirqs_on   <- _raw_spin_unlock_irqrestore
     ps-6143     2d...1 360us:      <stack trace>

# => trace_hardirqs_on_caller
# => trace_hardirqs_on
# => _raw_spin_unlock_irqrestore
# => do_task_stat
# => proc_tgid_stat
# => proc_single_show
# => seq_read
# => vfs_read
# => sys_read
# => system_call_fastpatch

        文件的开头显示了当前跟踪器位irqoff并且显示当前跟踪器的版本号为v1.1.5 ,内核版本4.0。显示当前最大的中断延迟是259us,跟踪条目和总共跟踪条目为4条(#4/4),另外VP,KP,SP,HP值暂时没用到,#P:4表示系统当前可用的CPU个数。task:ps-6143表示当前发生中断的进程PID为6143的进程,命令名称是ps。

       started at 和ended at显示发生中断的开始函数和结束函数分别为:__lock_task_sighand和 _raw_spin_unlock_irqrestore。接下来ftrace信息表示的内容如下:

cmd:进程的名字为ps
pid:进程的pid号
CPU#:该进程运行在哪个CPU上
irqs-off :"d" 表示中断已关闭
need_resched: "N" 表示进程设置了TIF_NEED_RESCHED和PREEMPT_NEED_RESCHED标志位;
              "n" 表示进程仅设置了TIF_NEED_RESCHED标志位;
              "p" 表示进程仅设置了PREEMPT_NEED_RESCHED标志位;
hardirq/softirq: "H" 表示再一次软中断中发生了一个硬件中断;
                 "h" 表示硬件中断
                 "s" 表示软件中断
                 "." 表示没有发生中断
preempt_depth: 表示抢占中断嵌套等级
time:表示时间戳;如果打开latency-format选项,表示事件从开始跟踪算起,这时一个相对时间,方便开发者观察,否则使用系统绝对时间开始计算
delay: 用一些特殊符号来延迟的时间,方便开发者观察。 
       "$" : 表示大于1s
       "#" : 表示大于1000毫秒
       "!" : 表示大于100毫秒
       "+" : 表示大于10毫秒

最后说明的是,文件最开始显示的中断延迟是259us,但是在<stack trace>里显示的是306us,这时因为在记录最大延迟信息时需要花费一些时间。所以参考文件最开始的时间即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值