G=V/AL 是什么公式

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

运动学公式是怎样推导出来的?就是v2平方-v1平方=2al

拍照搜题秒出答案,一键查看所囿搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

v?=2aL请问这个公式是怎么推导出来的

拍照搜题秒出答案,一键查看所有搜题记錄

是由v?-v0?=2ax转换的,令初速度为0,L和x无聊意义一样

系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化

性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码

代码优化的目标是针对具体性能問题而优化代码或编译选项,以改善软件性能

在性能剖析阶段,需要借助于现有的profiling工具如perf等。在代码优化阶段往往需要借助开发者的經验编写简洁高效的代码,甚至在汇编级别合理使用各种指令合理安排各种指令的执行顺序。

perf是一款Linux性能分析工具Linux性能计数器是一個新的基于内核的子系统,它提供一个性能分析框架比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。
通过perf应用程序可以利用PMU、tracepoint和内核Φ的计数器来进行性能统计。它不但可以分析制定应用程序的性能问题(per thread)也可以用来分析内核的性能问题,当然也可以同事分析应用程序和内核从而全面理解应用程序中的性能瓶颈。

perf是一款综合性分析工具大到系统全局性性能,再小到进程线程级别甚至到函数及彙编级别。

perf提供了十八般武器可以拿大刀大卸八块,也可以拿起手术刀细致分析

tracepoints是散落在内核源码中的一些hook,它们可以在特定的代码被执行到时触发这一特定可以被各种trace/debug工具所使用。

perf将tracepoint产生的时间记录下来生成报告,通过分析这些报告条有人缘便可以了解程序运荇期间内核的各种细节,对性能症状做出准确的诊断

内存读写是很快的,但是还是无法和处理器指令执行速度相比为了从内存中读取指令和数据,处理器需要等待用处理器时间来衡量,这种等待非常漫长cache是一种SRAM,读写速度非常快能和处理器相匹配。因此将常用的數据保存在cache中处理器便无需等待,从而提高性能cache的尺寸一般都很小,充分利用cache是软件调优非常重要部分

基于性能分析,可以进行算法优化(空间复杂度和时间复杂度权衡)、代码优化(提高执行速度、减少内存占用)

评估程序对硬件资源的使用情况,例如各级cache的访問次数、各级cache的丢失次数、流水线停顿周期、前端总线访问次数等

评估程序对操作系统资源的使用情况,系统调用次数、上下文切换次數、任务迁移次数

  1. Hardware Event由PMU部件产生,在特定的条件下探测性能事件是否发生以及发生的次数比如cache命中。
  2. Software Event是内核产生的事件分布在各个功能模块中,统计和操作系统相关性能事件比如进程切换,tick数等
  3. Tracepoint Event是内核中静态tracepoint所触发的事件,这些tracepoint用来判断程序运行期间内核的行为细節比如slab分配器的分配次数等。

根据数据文件记录的build-id将所有被采样到的elf文件打包。利用此压缩包可以再任何机器上分析数据文件中记錄的采样数据。
perf中内置的benchmark目前包括两套针对调度器和内存管理子系统的benchmark。
列出数据文件中记录的所有buildid
对比两个数据文件的差异。能够給出每个符号(函数)在热点分析上的具体差异
列出数据文件perf.data中所有性能事件。
该工具读取perf record工具记录的事件流并将其定向到标准输出。在被分析代码中的任何一点都可以向事件流中注入其它事件。
针对内核内存(slab)子系统进行追踪测量的工具
用来追踪测试运行在KVM虚拟機上的Guest OS
列出当前系统支持的所有性能事件。包括硬件性能事件、软件性能事件以及检查点
分析内核中的锁信息,包括锁的争用情况等待延迟等。
收集采样信息并将其记录在数据文件中。随后可通过其它工具对数据文件进行分析
读取perf record创建的数据文件,并给出热点分析结果
针对调度器子系统的分析工具。
执行perl或python写的功能扩展脚本、生成脚本框架、读取数据文件中的数据信息等
执行某个命令,收集特定进程的性能概况包括CPI、Cache丢失率等。
perf对当前软硬件平台进行健全性测试可用此工具测试当前的软硬件平台是否能支持perf的所有功能。
針对测试期间系统行为进行可视化的工具
类似于linux的top命令对系统性能进行实时分析。

perf list查看当前系统支持的性能事件;

perf test对系统进行健全性测試;

perf stat对全局性能进行统计;

perf top可以实时查看当前系统进程函数占用率情况;

最常用功能perf record可以系统全局,也可以具体到某个进程更甚具体箌某一进程某一事件;可宏观,也可以很微观

perf archive将相关符号打包,方便在其它机器进行分析;

perf测试不可避免的会引入额外负荷有三种形式:

counting引入的额外负荷最小;sampling在某些情况下会引入非常大的负荷;bpf可以有效缩减负荷。

针对sampling可以通过挂在建立在RAM上的文件系统来有效降低讀写I/O引入的负荷。

同时还可以显示特定模块支持的perf事件:hw/cache/pmu都是硬件相关的;tracepoint基于内核的ftrace;sw实际上是内核计数器

hw/hardware显示支持的硬件事件相关,如:

sw/software显示支持的软件事件列表:

pmu显示支持的PMU事件列表:

即可以正常显示perf top如下:

第一列:符号引发的性能事件的比例指占用的cpu周期比例。

第二列:符号所在的DSO(Dynamic Shared Object)可以是应用程序、内核、动态链接库、模块。

第三列:DSO的类型[.]表示此符号属于用户态的ELF文件,包括可执行文件與动态链接库;[k]表述此符号属于内核或模块

第四列:符号名。有些符号不能解析为函数名只能用地址表示。

关于perf top界面常用命令如下:

h:显示帮助即可显示详细的帮助信息。

a:annotate current symbol注解当前符号。能够给出汇编语言的注解给出各条指令的采样率。

d:过滤掉所有不属于此DSO嘚符号非常方便查看同一类别的符号。

-K:不显示属于内核或模块的符号

-U:不显示属于用户态程序的符号。

-d <n>:界面的刷新周期默认为2s,因为perf top默认每2s从mmap的内存区域读取一次性能数据

-g:得到函数的调用关系图。

perf stat用于运行指令并分析其统计结果。虽然perf top也可以指定pid但是必須先启动应用才能查看信息。

perf stat能完整统计应用整个生命周期的信息

下面简单看一下perf stat 的输出:

context-switches:程序在运行过程中上下文的切换次数。

CPU-migrations:程序在运行过程中发生的处理器迁移次数Linux为了维持多个处理器的负载均衡,在特定条件下会将某个任务从一个CPU迁移到另一个CPU

CPU迁移和上丅文切换:发生上下文切换不一定会发生CPU迁移,而发生CPU迁移时肯定会发生上下文切换发生上下文切换有可能只是把上下文从当前CPU中换出,下一次调度器还是将进程安排在这个CPU上执行

page-faults:缺页异常的次数。当应用程序请求的页面尚未建立、请求的页面不在内存中或者请求嘚页面虽然在内存中,但物理地址和虚拟地址的映射关系尚未建立时都会触发一次缺页异常。另外TLB不命中页面访问权限不匹配等情况吔会触发缺页异常。

stalled-cycles-frontend:指令读取或解码的质量步骤未能按理想状态发挥并行左右,发生停滞的时钟周期

branches:遇到的分支指令数。branch-misses是预测錯误的分支指令数

前面统计程序的示例,下面看一下统计CPU信息的示例:

执行sudo perf stat -C 0统计CPU 0的信息。想要停止后按下Ctrl+C终止。可以看到统计项一樣只是统计对象变了。

如果需要统计更多的项需要使用-e,如:

结果如下关注的特殊项也纳入统计。

sched message 的用法及用途和 hackbench 一样可以通过修改参数进行不同目的测试:

其工作原理很简单,两个进程互相通过 pipe 拼命地发 1000000 个整数进程 A 发给 B,同时 B 发给 A因为 A 和 B 互相依赖,因此假如調度器不公平对 A 比 B 好,那么 A 和 B 整体所需要的时间就会更长

该测试衡量 不同版本的memcpy/memset/ 函数处理一个 1M 数据的所花费的时间,转换成吞吐率

Futex昰一种用户态和内核态混合机制,所以需要两个部分合作完成linux上提供了sys_futex系统调用,对进程竞争情况下的同步处理提供支持

所有的futex同步操作都应该从用户空间开始,首先创建一个futex同步变量也就是位于共享内存的一个整型计数器。

当进程尝试持有锁或者要进入互斥区的时候对futex执行"down"操作,即原子性的给futex同步变量减1如果同步变量变为0,则没有竞争发生 进程照常执行。

如果同步变量是个负数则意味着有競争发生,需要调用futex系统调用的futex_wait操作休眠当前进程

当进程释放锁或 者要离开互斥区的时候,对futex进行"up"操作即原子性的给futex同步变量加1。如果同步变量由0变成1则没有竞争发生,进程照常执行

如果加之前同步变量是负数,则意味着有竞争发生需要调用futex系统调用的futex_wake操作唤醒┅个或者多个等待进程。

运行一个命令并将其数据保存到perf.data中。随后可以使用perf report进行分析。

perf record和perf report可以更精确的分析一个应用perf record可以精确到函數级别。并且在函数里面混合显示汇编语言和代码

创建一个fork.c文件用于测试:

上图看上去比较乱,如果想只看fork产生的信息:

可以看出只显礻了fork程序的相关符号及其占用率

解析perf record产生的数据,并给出分析结果

-g  生成函数调用关系图,此时内核要打开CONFIG_KALLSYMS;用户空间库或者执行文件需要带符号信息(not stripped)编译选项需要加上-g。

在funcB执行过程中还产生了apic timer,占用了一部分cpu资源除此之外,占比基本上是1:10

funcA和funcB的占比,基本符合預期那么进入longa,分析一下热点

在C和汇编混合显示界面,可以看出for循环占用了69.92%j=i赋值占用了30.08%。

根据之上描述可以看出top适合监控整个系統的性能,stat比较适合单个程序的性能分析record/report更适合对程序进行更细粒度的分析。

perf timechart是将之前的各种统计信息图形化的一个工具

-T:记录任务楿关事件

-I:记录io相关事件

-g:记录函数调用关系

-w调整输出的svg文件长度,可以查看更多细节

-i 指定待解析的文件名

-P 只显示power相关事件图标

-p 显示指萣进程名称或者PID显示

当线程太多影响svg解析速度的时候,可以通过-p指定特定线程进行分析如果需要几个线程,每个线程采用-p xxx

四个函数执荇次数分别为2、4、4、4,所以四个函数每个单位对应CPU占比为:

记录IO事件可以看到按应用分类的,Disk/Network/Sync/Poll/Error信息以及每个应用数据吞吐量。

记录Power状態事件可以看到不同之处在于Idle之类的状态里面还有细分C/C2更详细的显示Power状态。

锁是内核用于同步的方法一旦加了锁,其他加锁的内核执荇路径就必须等待降低了并行。同时如果加锁不正确还会造成死锁。

因此对于内核锁进行分析是一项重要的调优工作

Name:内核锁的名芓。

aquired:该锁被直接获得的次数因为没有其它内核路径占用该锁,此时不用等待

contended:该锁等待后获得的次数,此时被其它内核路径占用需要等待。

total wait:为了获得该锁总共的等待时间。

max wait:为了获得该锁最大的等待时间。

min wait:为了获得该锁最小的等待时间。

perf kmem用于跟踪测量内核slab分配器事件信息
比如内存分配/释放等。可以用来研究程序在哪里分配了大量内存或者在什么地方产生碎片之类的和内存管理相关的問题。

但是这些工具在内部队员是数据进行了慧聪和分析因此统计报表更具可读性。

比较有趣的两个参数是 Ping-pong 和 FragFrag 比较容易理解,即内部誶片虽然相对于 Buddy System,Slab 正是要解决内部碎片问题但 slab 依然存在内部碎片,比如一个 cache 的大小为 1024但需要分配的数据结构大小为 1022,那么有 2 个字节荿为碎片Frag 即碎片的比例。

Ping-pong 是一种现象在多 CPU 系统中,多个 CPU 共享的内存会出现”乒乓现象”一个 CPU 分配内存,其他 CPU 可能访问该内存对象吔可能最终由另外一个 CPU 释放该内存对象。而在多 CPU 系统中L1 cache 是 per CPU 的,CPU2 修改了内存那么其他的 CPU 的 cache 都必须更新,这对于性能是一个损失Perf kmem 在

Total_alloc/Per:总囲分配的内存大小,平均每次分配的内存大小

Total_req/Per:总共请求的内存大小,平均每次请求的内存大小

Frag:碎片所占的百分比,碎片 = 分配的内存 - 请求的内存这部分是浪费的。

有使用--alloc选项还会看到Alloc Ptr,即所分配内存的地址

后面则有根据被调用地点的显示方式的部分。

perf sched专门用于哏踪/测量调度器包括延时等。

这里最值得人们关注的是 Maximum delay一般从这里可以看到对交互性影响最大的特性:调度延迟,如果调度延迟比较夶那么用户就会感受到视频或者音频断断续续的。

sudo perf sched map的好处在于提供了一个的总的视图将成百上千的调度事件进行总结,显示了系统任務在 CPU 之间的分布假如有不好的调度迁移,比如一个任务没有被及时迁移到 idle 的 CPU 却被迁移到其他忙碌的 CPU类似这种调度器的问题可以从 map 的报告中一眼看出来。

星号表示调度事件发生所在的 CPU

perf sched replay 这个工具更是专门为调度器开发人员所设计,它试图重放 perf.data 文件中所记录的调度场景很哆情况下,一般用户假如发现调度器的奇怪行为他们也无法准确说明发生该情形的场景,或者一些测试场景不容易再次重现或者仅仅昰出于“偷懒”的目的,使用 perf replayperf 将模拟 perf.data 中的场景,无需开发人员花费很多的时间去重现过去这尤其利于调试过程,因为需要一而再再洏三地重复新的修改是否能改善原始的调度场景所发现的问题。

前面有行号的可以探测没有行号的就不行了。

在schedule函数的12处增加一个探测點

下面的命令可以查看系统中已经安装的脚本:

该报表分别按进程和按系统调用显示失败的次数。非常简单明了而如果通过普通的 perf record 加 perf report 命令,则需要自己手工或者编写脚本来统计这些数字

1.抓取perf信息并转换

系统级性能分析工具 — Perf:

Linux下的内核测试工具——perf使用简介:

性能分析工具---Perf简介汇总整理:

我要回帖

更多关于 型号V0G_AL00 的文章

 

随机推荐