Android下的一些调试手段(含kernel调试办法)

  • Post author:
  • Post category:其他


主要介绍除了常规的kernel的printk和android的DDMS, logcat外的几个调试手段.

包括bugreport, oprofile, traceview, ftrace等.



Bugreport

Bugreport是android平台自带的工具, 收集了device端的详细的状况, 可以在console下直接运行“bugreport > /sdcard/bugreport.log”或者接入USB cable并打开adb debug的状况下运行”adb bugreport > bugreport.log”.

下面是一个抓取的bugreport的参考资料.

相关代码路径

frameworks\base\cmds\bugreport

frameworks\base\cmds\dumpstate

frameworks\base\cmds\dumpsys



oprofile


Oprofie的原理比较简单: 很多CPU都提供一个所谓性能计数器的东西(performance counter),

大致的原理就是程序可以注册告诉CPU对什么event感兴趣(比如CPU_CYCLE, CPU经历了一次时钟周期),

然后CPU在执行了相应的操作后, 就会在性能计数器上加1, 这样程序就可以取出.

所以, 使用OProfile来定位CPU使用率的问题, 就变成了让oprofile收集程序运行过程中哪个可执行程序(或是so)中的哪个function, 消耗的CPU CYCLE最多.

在实际应用中, oprofile可以用来对找出系统的瓶颈并进行优化.

R70中默认的工程中, Oprofile是没有被编译进来的, 需要修改external\oprofile\opcontrol\android.mk和external\oprofile\daemon\android.mk

两个文件中的LOCAL_MODULE_TAGS 属性从debug修改为eng或者user, 从而将oprofile编译进android中.

此外, Oprofile需要kernel中打开相应的compile option来支持, kernel对应代码在kernel\trace目录中. 相应的config如下:

General setup  [*] Profiling Support

CONFIG_PROFILING

General setup <*> OProfile system profiling

CONFIG_OPROFILE

CONFIG_RING_BUFFER

CONFIG_RING_BUFFER_ALLOW_SWAP

CONFIG_RING_BUFFER_BENCHMARK is not set

General setup   Kernel Performance Events And Counters

[*] Kernel performance events and counters

CONFIG_PERF_EVENTS

CONFIG_HW_PERF_EVENTS

Examples:


最后, 在PC端安装oprofile以便对device端生成的结果进行解析.

如果需要得到最后的图形结果, 还需要安装Graphviz.

所有的准备工作就绪后,只要在device端运行如下的命令,即可启动oprofile对device进行检测.

opcontrol–quick     ===>  setup相应的环境和参数

opcontrol–start      ===>  启动oprofile

opcontrol–status   ===>  中途可以查看oprofile的状态

opcontrol–stop      ===>  停止oprofile

opcontrol–dump    ===>  将结果保存至/data/oprofile 路径

最后, 在PC端运行android工程中的external\oprofile下的opimport_pull脚本, 即可生成相应的结果callgraph.txt, load.txt, load2.txt以及callgraph.png(如下).

注意, 在运行脚本前需要设置一些环境变量和device端kernel对应的vmlinux档案.

exportOPROFILE_EVENTS_DIR= {Your Android Source DIR}/prebuilt/linux-x86_64/oprofile/

exportOPROFILE_BIN_DIR=/{Oprofile Bin DIR on Your PC }/

exportOUT= {Your Android Source DIR}/out/target/product/smdkv210

cd

{Your Android Source DIR}

/out/target/product/smdkv210/symbols

ln -s

{Your Kernel Source DIR}

/vmlinux ./vmlinux



traceview

Traceview是android自带的tool,用来分析在android端通过调用Debug.startMethodTracing(“xxxx”);生成的名为xxxx.trace的档案. 这个方法需要在android的代码中添加Debug.startMethodTracing(“xxxx”)和Debug.stopMethodTracing()的代码. 使用者通过在合理地点添加这两个函数, 可以很直观的分析在这个中间过程中, 系统的运行状况, 上到每个进程在什么时候开始跑了多长时间, 下到每个函数跑了多少次, 每次跑了多长时间.



Ftrace


ftrace是内建于Linux内核的跟踪工具, 从2.6.27开始加入主流内核. ftrace的作用是帮助开发人员了解 Linux 内核的运行时行为, 以便进行故障调试或性能分析.

使用ftrace可以对内核函数调用、上下文切换进行跟踪, 还可以查看中断被关闭的时长, 跟踪内核态中的延迟以及性能问题等.

使用ftrace对内核进行跟踪调试, 可以找到内核中出现的问题的根源, 通过ftrace来观察内核中发生的活动, 则可以了解内核的工作机制.

Ftrace可以在device的UI没有反应, 但是console还是active的状况下对kernel进行分析.

Ftrace的功能需要在kernel中打开相应的config. 此外, 打开ftrace会给系统带来额外的overhead, 因此应该在release的版本中尽可能关闭ftrace的功能.



图 1.Kernel hackin

图 1. Kernel hacking



图 2. Tracers



图 3. 内核支持的跟踪器列表

R70的kernel中,Ftrace支持的tracer有 wakeup, preemptirqsoff, preemptoff, irqsoff, function, sched_switch共6种.

具体的使用方法可以参考Reference中的连接以及kernel中的documents\trace下的ftrace.txt

得到的一些结果如下:

# tracer: function
#
#           TASK-PID    CPU#    TIMESTAMP  FUNCTION
#              | |       |          |         |
 InputDispatcher-412   [000] 10173.076687: sub_preempt_count <-mnt_want_write
 InputDispatcher-412   [000] 10173.076690: __mark_inode_dirty <-file_update_time
 InputDispatcher-412   [000] 10173.076692: mnt_drop_write <-file_update_time
 InputDispatcher-412   [000] 10173.076694: add_preempt_count <-mnt_drop_write
 InputDispatcher-412   [000] 10173.076697: sub_preempt_count <-mnt_drop_write
 InputDispatcher-412   [000] 10173.076699: inotify_inode_queue_event <-vfs_write
 InputDispatcher-412   [000] 10173.076701: __fsnotify_parent <-vfs_write
 InputDispatcher-412   [000] 10173.076704: inotify_dentry_parent_queue_event <-vfs_write
 InputDispatcher-412   [000] 10173.076706: fsnotify <-vfs_write
 InputDispatcher-412   [000] 10173.076708: fput <-sys_write
 InputDispatcher-412   [000] 10173.076715: sys_clock_gettime <-ret_fast_syscall
 InputDispatcher-412   [000] 10173.076718: posix_ktime_get_ts <-sys_clock_gettime
 InputDispatcher-412   [000] 10173.076720: ktime_get_ts <-posix_ktime_get_ts
 InputDispatcher-412   [000] 10173.076722: s5p_sched_timer_read <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076725: set_normalized_timespec <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076730: sys_clock_gettime <-ret_fast_syscall
 InputDispatcher-412   [000] 10173.076732: posix_ktime_get_ts <-sys_clock_gettime
 InputDispatcher-412   [000] 10173.076735: ktime_get_ts <-posix_ktime_get_ts
 InputDispatcher-412   [000] 10173.076737: s5p_sched_timer_read <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076739: set_normalized_timespec <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076743: sys_clock_gettime <-ret_fast_syscall
 InputDispatcher-412   [000] 10173.076746: posix_ktime_get_ts <-sys_clock_gettime
 InputDispatcher-412   [000] 10173.076748: ktime_get_ts <-posix_ktime_get_ts
 InputDispatcher-412   [000] 10173.076750: s5p_sched_timer_read <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076752: set_normalized_timespec <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076758: sys_epoll_wait <-ret_fast_syscall
 InputDispatcher-412   [000] 10173.076760: fget <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076763: add_preempt_count <-fget
 InputDispatcher-412   [000] 10173.076765: sub_preempt_count <-fget
 InputDispatcher-412   [000] 10173.076769: _raw_spin_lock_irqsave <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076771: add_preempt_count <-_raw_spin_lock_irqsave
 InputDispatcher-412   [000] 10173.076774: _raw_spin_unlock_irqrestore <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076775: sub_preempt_count <-_raw_spin_unlock_irqrestore
 InputDispatcher-412   [000] 10173.076778: ep_scan_ready_list <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076780: mutex_lock <-ep_scan_ready_list
 InputDispatcher-412   [000] 10173.076782: __might_sleep <-mutex_lock
 InputDispatcher-412   [000] 10173.076785: __mutex_lock_slowpath <-mutex_lock
 InputDispatcher-412   [000] 10173.076787: add_preempt_count <-__mutex_lock_slowpath
 InputDispatcher-412   [000] 10173.076790: sub_preempt_count <-__mutex_lock_slowpath
 InputDispatcher-412   [000] 10173.076792: _raw_spin_lock_irqsave <-ep_scan_ready_list
 InputDispatcher-412   [000] 10173.076794: add_preempt_count <-_raw_spin_lock_irqsave
 InputDispatcher-412   [000] 10173.076797: _raw_spin_unlock_irqrestore <-ep_scan_ready_list
 InputDispatcher-412   [000] 10173.076798: sub_preempt_count <-_raw_spin_unlock_irqrestore
 InputDispatcher-412   [000] 10173.076800: ep_send_events_proc <-ep_scan_ready_list
 InputDispatcher-412   [000] 10173.076803: pipe_poll <-ep_send_events_proc
 InputDispatcher-412   [000] 10173.076805: _raw_spin_lock_irqsave <-ep_scan_ready_list
 InputDispatcher-412   [000] 10173.076808: add_preempt_count <-_raw_spin_lock_irqsave
 InputDispatcher-412   [000] 10173.076810: _raw_spin_unlock_irqrestore <-ep_scan_ready_list
 InputDispatcher-412   [000] 10173.076812: sub_preempt_count <-_raw_spin_unlock_irqrestore
 InputDispatcher-412   [000] 10173.076814: mutex_unlock <-ep_scan_ready_list
 InputDispatcher-412   [000] 10173.076816: __mutex_unlock_slowpath <-mutex_unlock
 InputDispatcher-412   [000] 10173.076819: fput <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076825: sys_clock_gettime <-ret_fast_syscall
 InputDispatcher-412   [000] 10173.076828: posix_ktime_get_ts <-sys_clock_gettime
 InputDispatcher-412   [000] 10173.076830: ktime_get_ts <-posix_ktime_get_ts
 InputDispatcher-412   [000] 10173.076832: s5p_sched_timer_read <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076835: set_normalized_timespec <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076838: sys_clock_gettime <-ret_fast_syscall
 InputDispatcher-412   [000] 10173.076841: posix_ktime_get_ts <-sys_clock_gettime
 InputDispatcher-412   [000] 10173.076843: ktime_get_ts <-posix_ktime_get_ts
 InputDispatcher-412   [000] 10173.076845: s5p_sched_timer_read <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076848: set_normalized_timespec <-ktime_get_ts
 InputDispatcher-412   [000] 10173.076855: sys_epoll_wait <-ret_fast_syscall
 InputDispatcher-412   [000] 10173.076857: fget <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076860: add_preempt_count <-fget
 InputDispatcher-412   [000] 10173.076862: sub_preempt_count <-fget
 InputDispatcher-412   [000] 10173.076864: _raw_spin_lock_irqsave <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076867: add_preempt_count <-_raw_spin_lock_irqsave
 InputDispatcher-412   [000] 10173.076869: _raw_spin_unlock_irqrestore <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076871: sub_preempt_count <-_raw_spin_unlock_irqrestore
 InputDispatcher-412   [000] 10173.076873: schedule_hrtimeout_range <-sys_epoll_wait
 InputDispatcher-412   [000] 10173.076876: schedule_hrtimeout_range_clock <-schedule_hrtimeout_range
 InputDispatcher-412   [000] 10173.076878: schedule <-schedule_hrtimeout_range_clock
 InputDispatcher-412   [000] 10173.076880: add_preempt_count <-schedule
 InputDispatcher-412   [000] 10173.076882: rcu_note_context_switch <-schedule
 InputDispatcher-412   [000] 10173.076884: rcu_sched_qs <-rcu_note_context_switch
 InputDispatcher-412   [000] 10173.076886: _raw_spin_lock_irq <-schedule
 InputDispatcher-412   [000] 10173.076888: add_preempt_count <-_raw_spin_lock_irq
 InputDispatcher-412   [000] 10173.076890: T.1190 <-schedule
 InputDispatcher-412   [000] 10173.076891: dequeue_task <-T.1190
 InputDispatcher-412   [000] 10173.076893: s5p_sched_timer_read <-sched_clock
 InputDispatcher-412   [000] 10173.076895: dequeue_task_fair <-dequeue_task
 InputDispatcher-412   [000] 10173.076897: dequeue_entity <-dequeue_task_fair
 InputDispatcher-412   [000] 10173.076898: update_curr <-dequeue_entity
 InputDispatcher-412   [000] 10173.076900: calc_delta_mine <-update_curr
 InputDispatcher-412   [000] 10173.076902: update_min_vruntime <-update_curr
 InputDispatcher-412   [000] 10173.076904: cpuacct_charge <-update_curr
 InputDispatcher-412   [000] 10173.076905: add_preempt_count <-cpuacct_charge
 InputDispatcher-412   [000] 10173.076907: sub_preempt_count <-cpuacct_charge
 InputDispatcher-412   [000] 10173.076909: clear_buddies <-dequeue_entity
 InputDispatcher-412   [000] 10173.076911: update_min_vruntime <-dequeue_entity
 InputDispatcher-412   [000] 10173.076913: put_prev_task_fair <-schedule
 InputDispatcher-412   [000] 10173.076915: pick_next_task_fair <-schedule
 InputDispatcher-412   [000] 10173.076916: __pick_next_entity <-pick_next_task_fair
 InputDispatcher-412   [000] 10173.076918: clear_buddies <-pick_next_task_fair
 InputDispatcher-412   [000] 10173.076920: set_next_entity <-pick_next_task_fair
 InputDispatcher-412   [000] 10173.076921: __dequeue_entity <-set_next_entity
 InputDispatcher-412   [000] 10173.076924: _raw_spin_unlock_irq <-schedule
 InputDispatcher-412   [000] 10173.076926: sub_preempt_count <-_raw_spin_unlock_irq
 InputDispatcher-412   [000] 10173.076931: atomic_notifier_call_chain <-__switch_to
 InputDispatcher-412   [000] 10173.076932: __atomic_notifier_call_chain <-atomic_notifier_call_chain
 InputDispatcher-412   [000] 10173.076934: add_preempt_count <-__atomic_notifier_call_chain
 InputDispatcher-412   [000] 10173.076936: notifier_call_chain <-__atomic_notifier_call_chain
 InputDispatcher-412   [000] 10173.076938: thumbee_notifier <-notifier_call_chain
 InputDispatcher-412   [000] 10173.076939: vfp_notifier <-notifier_call_chain
 InputDispatcher-412   [000] 10173.076941: sub_preempt_count <-__atomic_notifier_call_chain
 ity.filemanager-713   [000] 10173.076944: T.1196 <-schedule
 ity.filemanager-713   [000] 10173.076947: sub_preempt_count <-schedule
 ity.filemanager-713   [000] 10173.076950: _raw_spin_lock_irqsave <-sys_epoll_wait
 ity.filemanager-713   [000] 10173.076952: add_preempt_count <-_raw_spin_lock_irqsave
 ity.filemanager-713   [000] 10173.076955: _raw_spin_unlock_irqrestore <-sys_epoll_wait
 ity.filemanager-713   [000] 10173.076956: sub_preempt_count <-_raw_spin_unlock_irqrestore
 ity.filemanager-713   [000] 10173.076959: ep_scan_ready_list <-sys_epoll_wait
 ity.filemanager-713   [000] 10173.076961: mutex_lock <-ep_scan_ready_list
 ity.filemanager-713   [000] 10173.076963: __might_sleep <-mutex_lock
 ity.filemanager-713   [000] 10173.076965: __mutex_lock_slowpath <-mutex_lock
 ity.filemanager-713   [000] 10173.076968: add_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.076971: sub_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.076973: _raw_spin_lock_irqsave <-ep_scan_ready_list
 ity.filemanager-713   [000] 10173.076975: add_preempt_count <-_raw_spin_lock_irqsave
 ity.filemanager-713   [000] 10173.076977: _raw_spin_unlock_irqrestore <-ep_scan_ready_list
 ity.filemanager-713   [000] 10173.076979: sub_preempt_count <-_raw_spin_unlock_irqrestore
 ity.filemanager-713   [000] 10173.076981: ep_send_events_proc <-ep_scan_ready_list
 ity.filemanager-713   [000] 10173.076984: pipe_poll <-ep_send_events_proc
 ity.filemanager-713   [000] 10173.076987: _raw_spin_lock_irqsave <-ep_scan_ready_list
 ity.filemanager-713   [000] 10173.076989: add_preempt_count <-_raw_spin_lock_irqsave
 ity.filemanager-713   [000] 10173.076992: _raw_spin_unlock_irqrestore <-ep_scan_ready_list
 ity.filemanager-713   [000] 10173.076994: sub_preempt_count <-_raw_spin_unlock_irqrestore
 ity.filemanager-713   [000] 10173.076996: mutex_unlock <-ep_scan_ready_list
 ity.filemanager-713   [000] 10173.076998: __mutex_unlock_slowpath <-mutex_unlock
 ity.filemanager-713   [000] 10173.077001: fput <-sys_epoll_wait
 ity.filemanager-713   [000] 10173.077018: sys_read <-ret_fast_syscall
 ity.filemanager-713   [000] 10173.077020: fget_light <-sys_read
 ity.filemanager-713   [000] 10173.077023: add_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077026: sub_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077028: vfs_read <-sys_read
 ity.filemanager-713   [000] 10173.077030: rw_verify_area <-vfs_read
 ity.filemanager-713   [000] 10173.077033: do_sync_read <-vfs_read
 ity.filemanager-713   [000] 10173.077035: pipe_read <-do_sync_read
 ity.filemanager-713   [000] 10173.077037: mutex_lock <-pipe_read
 ity.filemanager-713   [000] 10173.077040: __might_sleep <-mutex_lock
 ity.filemanager-713   [000] 10173.077042: __mutex_lock_slowpath <-mutex_lock
 ity.filemanager-713   [000] 10173.077045: add_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077047: sub_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077050: generic_pipe_buf_confirm <-pipe_read
 ity.filemanager-713   [000] 10173.077052: generic_pipe_buf_map <-pipe_read
 ity.filemanager-713   [000] 10173.077054: add_preempt_count <-generic_pipe_buf_map
 ity.filemanager-713   [000] 10173.077057: generic_pipe_buf_unmap <-pipe_read
 ity.filemanager-713   [000] 10173.077059: sub_preempt_count <-generic_pipe_buf_unmap
 ity.filemanager-713   [000] 10173.077061: anon_pipe_buf_release <-pipe_read
 ity.filemanager-713   [000] 10173.077063: mutex_unlock <-pipe_read
 ity.filemanager-713   [000] 10173.077066: __mutex_unlock_slowpath <-mutex_unlock
 ity.filemanager-713   [000] 10173.077068: __wake_up_sync <-pipe_read
 ity.filemanager-713   [000] 10173.077071: __wake_up_sync_key <-__wake_up_sync
 ity.filemanager-713   [000] 10173.077073: _raw_spin_lock_irqsave <-__wake_up_sync_key
 ity.filemanager-713   [000] 10173.077075: add_preempt_count <-_raw_spin_lock_irqsave
 ity.filemanager-713   [000] 10173.077078: __wake_up_common <-__wake_up_sync_key
 ity.filemanager-713   [000] 10173.077080: ep_poll_callback <-__wake_up_common
 ity.filemanager-713   [000] 10173.077081: _raw_spin_lock_irqsave <-ep_poll_callback
 ity.filemanager-713   [000] 10173.077083: add_preempt_count <-_raw_spin_lock_irqsave
 ity.filemanager-713   [000] 10173.077085: _raw_spin_unlock_irqrestore <-ep_poll_callback
 ity.filemanager-713   [000] 10173.077087: sub_preempt_count <-_raw_spin_unlock_irqrestore
 ity.filemanager-713   [000] 10173.077089: _raw_spin_unlock_irqrestore <-__wake_up_sync_key
 ity.filemanager-713   [000] 10173.077090: sub_preempt_count <-_raw_spin_unlock_irqrestore
 ity.filemanager-713   [000] 10173.077093: kill_fasync <-pipe_read
 ity.filemanager-713   [000] 10173.077095: touch_atime <-pipe_read
 ity.filemanager-713   [000] 10173.077098: current_fs_time <-touch_atime
 ity.filemanager-713   [000] 10173.077100: current_kernel_time <-current_fs_time
 ity.filemanager-713   [000] 10173.077102: timespec_trunc <-current_fs_time
 ity.filemanager-713   [000] 10173.077104: mnt_want_write <-touch_atime
 ity.filemanager-713   [000] 10173.077109: add_preempt_count <-mnt_want_write
 ity.filemanager-713   [000] 10173.077112: __mnt_is_readonly <-mnt_want_write
 ity.filemanager-713   [000] 10173.077113: sub_preempt_count <-mnt_want_write
 ity.filemanager-713   [000] 10173.077116: __mark_inode_dirty <-touch_atime
 ity.filemanager-713   [000] 10173.077118: mnt_drop_write <-touch_atime
 ity.filemanager-713   [000] 10173.077120: add_preempt_count <-mnt_drop_write
 ity.filemanager-713   [000] 10173.077123: sub_preempt_count <-mnt_drop_write
 ity.filemanager-713   [000] 10173.077125: inotify_inode_queue_event <-vfs_read
 ity.filemanager-713   [000] 10173.077127: __fsnotify_parent <-vfs_read
 ity.filemanager-713   [000] 10173.077130: inotify_dentry_parent_queue_event <-vfs_read
 ity.filemanager-713   [000] 10173.077132: fsnotify <-vfs_read
 ity.filemanager-713   [000] 10173.077135: fput <-sys_read
 ity.filemanager-713   [000] 10173.077139: sys_ioctl <-ret_fast_syscall
 ity.filemanager-713   [000] 10173.077142: fget_light <-sys_ioctl
 ity.filemanager-713   [000] 10173.077144: add_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077146: sub_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077148: do_vfs_ioctl <-sys_ioctl
 ity.filemanager-713   [000] 10173.077151: vfs_ioctl <-do_vfs_ioctl
 ity.filemanager-713   [000] 10173.077153: ashmem_ioctl <-vfs_ioctl
 ity.filemanager-713   [000] 10173.077156: mutex_lock <-ashmem_ioctl
 ity.filemanager-713   [000] 10173.077158: __might_sleep <-mutex_lock
 ity.filemanager-713   [000] 10173.077160: __mutex_lock_slowpath <-mutex_lock
 ity.filemanager-713   [000] 10173.077162: add_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077165: sub_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077167: mutex_unlock <-ashmem_ioctl
 ity.filemanager-713   [000] 10173.077170: __mutex_unlock_slowpath <-mutex_unlock
 ity.filemanager-713   [000] 10173.077173: fput <-sys_ioctl
 ity.filemanager-713   [000] 10173.077240: sys_write <-ret_fast_syscall
 ity.filemanager-713   [000] 10173.077243: fget_light <-sys_write
 ity.filemanager-713   [000] 10173.077246: add_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077248: sub_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077251: vfs_write <-sys_write
 ity.filemanager-713   [000] 10173.077253: rw_verify_area <-vfs_write
 ity.filemanager-713   [000] 10173.077255: do_sync_write <-vfs_write
 ity.filemanager-713   [000] 10173.077258: pipe_write <-do_sync_write
 ity.filemanager-713   [000] 10173.077260: mutex_lock <-pipe_write
 ity.filemanager-713   [000] 10173.077262: __might_sleep <-mutex_lock
 ity.filemanager-713   [000] 10173.077265: __mutex_lock_slowpath <-mutex_lock
 ity.filemanager-713   [000] 10173.077267: add_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077270: sub_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077273: iov_fault_in_pages_read <-pipe_write
 ity.filemanager-713   [000] 10173.077275: add_preempt_count <-pipe_write
 ity.filemanager-713   [000] 10173.077278: pipe_iov_copy_from_user <-pipe_write
 ity.filemanager-713   [000] 10173.077279: sub_preempt_count <-pipe_write
 ity.filemanager-713   [000] 10173.077282: mutex_unlock <-pipe_write
 ity.filemanager-713   [000] 10173.077284: __mutex_unlock_slowpath <-mutex_unlock
 ity.filemanager-713   [000] 10173.077287: __wake_up_sync <-pipe_write
 ity.filemanager-713   [000] 10173.077289: __wake_up_sync_key <-__wake_up_sync
 ity.filemanager-713   [000] 10173.077291: _raw_spin_lock_irqsave <-__wake_up_sync_key
 ity.filemanager-713   [000] 10173.077294: add_preempt_count <-_raw_spin_lock_irqsave
 ity.filemanager-713   [000] 10173.077296: __wake_up_common <-__wake_up_sync_key
 ity.filemanager-713   [000] 10173.077298: ep_poll_callback <-__wake_up_common
 ity.filemanager-713   [000] 10173.077300: _raw_spin_lock_irqsave <-ep_poll_callback
 ity.filemanager-713   [000] 10173.077301: add_preempt_count <-_raw_spin_lock_irqsave
 ity.filemanager-713   [000] 10173.077303: _raw_spin_unlock_irqrestore <-ep_poll_callback
 ity.filemanager-713   [000] 10173.077305: sub_preempt_count <-_raw_spin_unlock_irqrestore
 ity.filemanager-713   [000] 10173.077307: _raw_spin_unlock_irqrestore <-__wake_up_sync_key
 ity.filemanager-713   [000] 10173.077309: sub_preempt_count <-_raw_spin_unlock_irqrestore
 ity.filemanager-713   [000] 10173.077311: kill_fasync <-pipe_write
 ity.filemanager-713   [000] 10173.077313: file_update_time <-pipe_write
 ity.filemanager-713   [000] 10173.077316: current_fs_time <-file_update_time
 ity.filemanager-713   [000] 10173.077318: current_kernel_time <-current_fs_time
 ity.filemanager-713   [000] 10173.077321: timespec_trunc <-current_fs_time
 ity.filemanager-713   [000] 10173.077323: mnt_want_write_file <-file_update_time
 ity.filemanager-713   [000] 10173.077326: mnt_want_write <-mnt_want_write_file
 ity.filemanager-713   [000] 10173.077328: add_preempt_count <-mnt_want_write
 ity.filemanager-713   [000] 10173.077330: __mnt_is_readonly <-mnt_want_write
 ity.filemanager-713   [000] 10173.077332: sub_preempt_count <-mnt_want_write
 ity.filemanager-713   [000] 10173.077334: __mark_inode_dirty <-file_update_time
 ity.filemanager-713   [000] 10173.077337: mnt_drop_write <-file_update_time
 ity.filemanager-713   [000] 10173.077339: add_preempt_count <-mnt_drop_write
 ity.filemanager-713   [000] 10173.077341: sub_preempt_count <-mnt_drop_write
 ity.filemanager-713   [000] 10173.077344: inotify_inode_queue_event <-vfs_write
 ity.filemanager-713   [000] 10173.077346: __fsnotify_parent <-vfs_write
 ity.filemanager-713   [000] 10173.077348: inotify_dentry_parent_queue_event <-vfs_write
 ity.filemanager-713   [000] 10173.077351: fsnotify <-vfs_write
 ity.filemanager-713   [000] 10173.077353: fput <-sys_write
 ity.filemanager-713   [000] 10173.077364: sys_clock_gettime <-ret_fast_syscall
 ity.filemanager-713   [000] 10173.077367: posix_ktime_get_ts <-sys_clock_gettime
 ity.filemanager-713   [000] 10173.077369: ktime_get_ts <-posix_ktime_get_ts
 ity.filemanager-713   [000] 10173.077371: s5p_sched_timer_read <-ktime_get_ts
 ity.filemanager-713   [000] 10173.077374: set_normalized_timespec <-ktime_get_ts
 ity.filemanager-713   [000] 10173.077437: sys_write <-ret_fast_syscall
 ity.filemanager-713   [000] 10173.077440: fget_light <-sys_write
 ity.filemanager-713   [000] 10173.077442: add_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077445: sub_preempt_count <-fget_light
 ity.filemanager-713   [000] 10173.077447: vfs_write <-sys_write
 ity.filemanager-713   [000] 10173.077450: rw_verify_area <-vfs_write
 ity.filemanager-713   [000] 10173.077452: do_sync_write <-vfs_write
 ity.filemanager-713   [000] 10173.077454: pipe_write <-do_sync_write
 ity.filemanager-713   [000] 10173.077457: mutex_lock <-pipe_write
 ity.filemanager-713   [000] 10173.077459: __might_sleep <-mutex_lock
 ity.filemanager-713   [000] 10173.077461: __mutex_lock_slowpath <-mutex_lock
 ity.filemanager-713   [000] 10173.077463: add_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077467: sub_preempt_count <-__mutex_lock_slowpath
 ity.filemanager-713   [000] 10173.077469: iov_fault_in_pages_read <-pipe_write
 ity.filemanager-713   [000] 10173.077472: add_preempt_count <-pipe_write
 ity.filemanager-713   [000] 10173.077474: pipe_iov_copy_from_user <-pipe_write
 ity.filemanager-713   [000] 10173.077476: sub_preempt_count <-pipe_write
 ity.filemanager-713   [000] 10173.077478: mutex_unlock <-pipe_write
 ity.filemanager-713   [000] 10173.077481: __mutex_unlock_slowpath <-mutex_unlock
 ity.filemanager-713   [000] 10173.077484: __wake_up_sync <-pipe_write
 ity.filemanager-713   [000] 10173.077486: __wake_up_sync_key <-__wake_up_sync
 



版权声明:本文为jackjones_008原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。