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 系统调用

  • 相关阅读:
    go 基础(二)
    go 基础(一)
    小程序生成带有多参数的太阳码
    php 3.2 生成压缩文件,并下载
    layer confirm 三种选择按钮
    无限级分类,抓取某元素的所有下级id
    bootstrap 自带字体颜色
    ajaxSubmit 页面生成的html 中含有表单提交表单方式
    php 保留2位小数
    日期范围
  • 原文地址:https://www.cnblogs.com/asver/p/13895663.html
Copyright © 2011-2022 走看看