zoukankan      html  css  js  c++  java
  • perf原理

    Perf通过系统调用sys_perf_event_open 陷入到内核中,内核根据perf 提供的信息在PMU(Performance Monitoring Unit)上初始化一个硬件性能计数器****(PMC: Performance Monitoring Counter)
    PMC随着指定硬件事件的发生而自动累加。在PMC 溢出时,PMU 触发一个PMI(Performance Monitoring Interrupt)中断。内核在PMI 中断的处理函数中保存PMC 的计数值,触发中断时的指令地址,当前时间戳以及当前进程的PID,TID,comm 等信息。我们把这些信息统称为一个采样(sample)。内核会将收集到的sample 放入用于跟用户空间通信的Ring Buffer。用户空间里的perf 分析程序采用mmap 机制从ring buffer 中读入采样,并对其解析。(我晕了,你呢

    perf支持两种模式:计算模式和采样模式
    perf stat使用的是计数模式,perf record使用的是采样模式。
    在程序运行中发生的,可能影响到程序性能的软硬件件事件,使用perf list命令可以显示当前软硬件环境下支持的所有事件,大致可以分为三种:
    Hardware Event由PMU部件产生,在特定的条件下探测性能事件是否发生以及发生的次数。比如CPU周期、分支指令、TLB重填例外、Cache缺失等。
    Software Event是内核产生的事件,分布在各个功能模块中,统计和操作系统相关性能事件。比如系统调用次数、上下文切换次数、任务迁移次数、缺页例外次数等。
    Tracepoint Event是内核中静态tracepoint所触发的事件,这些tracepoint用来判断程序运行期间内核的行为细节,比如slab分配器的分配次数等。

    基于ftrace框架实现,内核中的所有tracepoint都可以作为perf都性能事件cat /sys/kernel/debug/tracing/available_events,可查看当前系统的所有tracepoint分成了几大类:
    ext4 文件系统的tracepoint events,如果是其它文件系统,比如XFS,也有对应的tracepoint event;
    jbd2 文件日志的tracepoint events;
    skb 内存的tracepoint events;
    net,napi,sock,udp:网络的tracepoint events;
    scsi, block, writeback 磁盘IO
    kmem 内存
    sched 调度
    syscalls 系统调用

  • 相关阅读:
    HDU 6071
    HDU 6073
    HDU 2124 Repair the Wall(贪心)
    HDU 2037 今年暑假不AC(贪心)
    HDU 1257 最少拦截系统(贪心)
    HDU 1789 Doing Homework again(贪心)
    HDU 1009 FatMouse' Trade(贪心)
    HDU 2216 Game III(BFS)
    HDU 1509 Windows Message Queue(队列)
    HDU 1081 To The Max(动态规划)
  • 原文地址:https://www.cnblogs.com/asver/p/13895663.html
Copyright © 2011-2022 走看看