linux内核内置trace工具使用简介

使用内核内置的trace工具,可以跟踪具体某个进程的内核函数调用过程,并且可以统计到每个函数的运行时间,对优化系统性能有一定的帮助

内核trace工具使用方法如下:

1.修改内核配置,支持trace
Kernel hacking  --->  [*] Tracers  --->[*]   Kernel Function Tracer                                                         
                                       [*]     Kernel Function Graph Tracer
                                       [*]   Trace syscalls
                                       [*]   enable/disable function tracing dynamically
                                       [*]   Kernel function profiler




2.挂载trace目录
# mkdir /debug 
# mount -t debugfs nodev /debug
/debug 目录下看到 tracing 目录


3.设备trace
#echo function > /debug/tracing/current_tracer  //function为追踪的类型
#echo [pid] > /debug/tracing/set_ftrace_pid   //设置要追踪的进程
#echo 1 > /debug/tracing/tracing_on  //开启追踪


4.查看结果
#cd /debug/tracing

#cat trace

截取HBX_COMMON进程部分trace如下:

# tracer: function
#
# entries-in-buffer/entries-written: 11059/11059   #P:2
#
#                              _-------=> irqs-off          
#                            /  _------=> need-resched      
#                            |/  _-----=> need-resched_lazy 
#                            ||/  _----=> hardirq/softirq   
#                            |||/  _---=> preempt-depth     
#                            ||||/  _--=> preempt-lazy-depth
#                            ||||| / _-=> migrate-disable   
#                            |||||| /     delay
#           TASK-PID   CPU#  ||||||  TIMESTAMP  FUNCTION
#              | |       |   ||||||     |         |
 HBX_COMMON_T-3017  [000] d...3..  1381.116699: .finish_task_switch <-.__schedule
 HBX_COMMON_T-3017  [000] d...3..  1381.116703: .vtime_task_switch <-.finish_task_switch
 HBX_COMMON_T-3017  [000] d...3..  1381.116705: .account_system_time <-.vtime_account_system
 HBX_COMMON_T-3017  [000] d...3..  1381.116706: .account_user_time <-.vtime_account_user
 HBX_COMMON_T-3017  [000] d...3..  1381.116707: ._raw_spin_unlock_irq <-.finish_task_switch
 HBX_COMMON_T-3017  [000] d...3..  1381.116709: .arch_wdt_feed <-.timer_interrupt
 HBX_COMMON_T-3017  [000] d...3..  1381.116710: .wdg_get_ctrl <-.arch_wdt_feed
 HBX_COMMON_T-3017  [000] d...3..  1381.116712: .irq_enter <-.timer_interrupt
 HBX_COMMON_T-3017  [000] d...3..  1381.116713: .rcu_irq_enter <-.irq_enter
 HBX_COMMON_T-3017  [000] d...3..  1381.116714: .vtime_account_irq_enter <-.irq_enter
 HBX_COMMON_T-3017  [000] d...3..  1381.116715: .account_system_time <-.vtime_account_system
 HBX_COMMON_T-3017  [000] d...3..  1381.116717: .add_preempt_count <-.irq_enter
 HBX_COMMON_T-3017  [000] d..h3..  1381.116718: .hrtimer_interrupt <-.timer_interrupt
 HBX_COMMON_T-3017  [000] d..h3..  1381.116719: ._raw_spin_lock <-.hrtimer_interrupt
 HBX_COMMON_T-3017  [000] d..h3..  1381.116720: .__raw_spin_lock <-._raw_spin_lock
 HBX_COMMON_T-3017  [000] d..h3..  1381.116721: .add_preempt_count <-.__raw_spin_lock
 HBX_COMMON_T-3017  [000] d..h4..  1381.116723: .ktime_get_update_offsets <-.hrtimer_interrupt
 HBX_COMMON_T-3017  [000] d..h4..  1381.116724: .hrtimer_rt_defer <-.hrtimer_interrupt
 HBX_COMMON_T-3017  [000] d..h4..  1381.116726: .__run_hrtimer <-.hrtimer_interrupt
 HBX_COMMON_T-3017  [000] d..h4..  1381.116727: .__remove_hrtimer <-.__run_hrtimer
 HBX_COMMON_T-3017  [000] d..h4..  1381.116728: .sub_preempt_count <-.__run_hrtimer
 HBX_COMMON_T-3017  [000] d..h3..  1381.116730: .hrtimer_wakeup <-.__run_hrtimer
 HBX_COMMON_T-3017  [000] d..h3..  1381.116731: .wake_up_process <-.hrtimer_wakeup
 HBX_COMMON_T-3017  [000] d..h3..  1381.116733: .try_to_wake_up <-.wake_up_process
 HBX_COMMON_T-3017  [000] d..h3..  1381.116734: ._raw_spin_lock_irqsave <-.try_to_wake_up
 HBX_COMMON_T-3017  [000] d..h3..  1381.116735: .__raw_spin_lock_irqsave <-._raw_spin_lock_irqsave
 HBX_COMMON_T-3017  [000] d..h3..  1381.116736: .add_preempt_count <-.__raw_spin_lock_irqsave




你可能感兴趣的:(软件测试,常用故障定位方法)