zoukankan      html  css  js  c++  java
  • perf的统计模式: 突破口: x86_perf_event_update

    之前一直以为perf的统计模式也是通过中断出发来的,于是会在中断处理函数中做处理,但是如果perf是统计模式,那么perf的寄存器就不会是溢出的模式了,这个时候,就没有pmu的中断发生,所以很奇怪呢,在使用统计模式的时候,perf是怎么做的呢?

    在统计模式下,在每一次发生调度的时候,都会去读寄存器里面的值,然后把调度的值写入到寄存器中去,也就是说,这个时候内核会维护着这么一个虚机的值,然后每一次进程被调度出去的时候,会把这个值给读出来!

    perf_read函数没有发生?

    感觉应该是会在task_ctx_sched_out发生

    看了代码,总觉得应该是在ctx_sched_in和ctx_sched_out发生的读寄存器的时,但是没发现相关的代码,在进程切进去的时候会去设置寄存器,但是在进程出来的时候会去读寄存器的值然后在代码中保存,但是好像根本就抓住这样的函数呢?

    关键函数: x86_perf_event_update

    所以

    loop  0xffffffff81005970 : x86_perf_event_update+0x0/0x90 [kernel]
     0xffffffff81005a58 : x86_pmu_stop+0x58/0xd0 [kernel]
     0xffffffff81005b13 : x86_pmu_del+0x43/0x140 [kernel]
     0xffffffff8117c2c8 : event_sched_out.isra.91+0xb8/0x310 [kernel]
     0xffffffff8117c568 : group_sched_out+0x48/0xc0 [kernel]
     0xffffffff8117c6fc : ctx_sched_out+0x11c/0x160 [kernel]
     0xffffffff8117ffde : __perf_event_task_sched_out+0x17e/0x460 [kernel]
     0xffffffff8181fdf2 : __schedule+0x442/0xa10 [kernel]
     0xffffffff818203f5 : schedule+0x35/0x80 [kernel]
     0xffffffff810031f2 : exit_to_usermode_loop+0x72/0xd0 [kernel]
     0xffffffff81003c08 : prepare_exit_to_usermode+0x18/0x20 [kernel]
     0xffffffff81824fe5 : retint_user+0x8/0x10 [kernel]
    
  • 相关阅读:
    安卓学习-界面-ui-GirdView
    安卓学习-界面-ui-AutoCompleteTextView
    安卓学习-界面-ui-Adapter
    安卓学习-界面-ui-ListView
    安卓学习-界面-ui-ImageView
    安卓学习-界面-ui-AnalogClock、DigitalClock和Chronometer
    clientdataset生成sql
    安卓学习-界面-ui-ToggleButton Switch
    DOM通过ID或NAME获取值
    DOM基本代码二
  • 原文地址:https://www.cnblogs.com/honpey/p/10296856.html
Copyright © 2011-2022 走看看