写点什么

鲲鹏 devkit 开发套件

作者:乌龟哥哥
  • 2022 年 8 月 02 日
  • 本文字数:12740 字

    阅读完需:约 42 分钟


第一个的话是工具的简介,功能性能分析工具的话主要分为四大块,它主要是一个工具集,它包括调助手、系统性能分析工具、Java 性能分析工具,还有系统诊断工具。然后现在市面上它其实有很多的这种分析工具,比如说像客服、space、at state 等等。



那么鹏鹏为什么还要做这么一个系统性的分析工具呢?主要有以下几点,因为鲲鹏性能,鲲鹏的话性能分析工具的话目标它是提供业界工具以外的能力,而不是说仅仅包含比如说比业界的这些工具还要的能力的。当前的一个能力主要是提供他之外,比如说像处理器,他我们的工具提供了软硬件的一个结合能力,比如说像采集和分析硬件的性能指标,还有硬件性能。



在软件层的一个表现,就是让用户能够在整体的对一个系统进行的运行情况有一个比较好的了解。表格的话是系统化的分析,建立各层指标之间的一个关联,然后并以用户的视角去呈现这些指标和关系,就用户可以更好地发现一些问题。然后第三个的话主要是像业界的一些指标,它主要是采集和获取一些数据。然后鲲鹏的话这边会提供一些那个性能优化经验,这些经验的话主要是在共同处理器上之前的一些专家提供在实际操作中或者说他的一些经验中给出了一些优化思路和建议,可以快速的帮助用户去定位修复一些问题。



第四个的话就是公共性能分析工具的话,它提供了一个分析过程的一个管理。比如说在分析前后,它可以进行两次的一个优化结果的一个对比,可以更好地去发现你性能的点在哪里。第二个,比如说还有像优化结果的标记,优化过程的一个记录,可以让你在后续的优化中有一个更好的经验。工具的功能的话,功能性能分析工具就刚刚说的主要分为四大功能。然后每个功能里面它其实还有一些比较小的功能。比如说像系统性能分析工具包括了通用分析,系统部件分析等,然后里面有全景分析、热点函数,这个后续大家在去实践的过程中可以去实际操作一下工具的总的目标。



用户的话包含部分,一部分的话是开发人员,第二部分的话是系统管理员或者用人。作为开发人员的话,她对应用腾讯的是这一位了解。那么开发人员的视角,他可以从软件运行的情况入口去分层次的一个分析。比如说可以通过应用程序,它可以放到应用程序的一些比如说像比如这两步电网站等等,然后从这一块,然后他可以更深地去看他们的一些也系统调用,然后再抛到的调用内核函数等等,然后最终还可以去查看。最后是硬件设备导致了一些性能,这是作为点开发人员的一个然后的一个思路。然后作为运维人员的一个输入的话,运维人员他其实或者系统管理员他其实对资源的情况比较敏感,比如说像设备的 CPO 的指标或者系统配置,他是不是非常高。那么他可以从设备进行入口,入口之后还可以进一步的这样看去进行一个分析。 BPO 率, BPO 用率配置都不账号影响,可以看内核数据,但在于系统最终还可以和开发人一起去分析它的一种程序,这是运维的视角,就是。第二个,主要介绍工具软件的一个架构。我们系统分析工具的零架构的话是从目前独立上分成部分,一部分是都有,这部分的话主要是实现的是技能分析的一个数据的分析,还有一个结果的实现。 agent 这部分主要是实现性能分析的采集。为什么稍微能看?因为采集的话它肯定是相对于分析来说,它的获得然后资源会比较少。然后分析和数据呈现的话,它的那个服务器的资源消耗它会比较多。所以说在这种情况下对待熟悉进行分析,但是又没必要去消耗它太中的性能,会影响业务的一个功能的运行。



所以说我们就把供应有数据采集的时候看看采集服务器数据,然后它不会消耗太多的资源,然后不会对业务造成太大的影响。然后分析的时候他在其他的没有业务的如期上进行分析,那么可以也不会对业务造成影响,这样的话就可以很好的解决这样的问题。软件部署的话主要分为两部分,一部分是单机部署,第二部分是混合部署。单机部署的话主要是部署在三台服务器,然后 server agent 然后混合部署的话它是在一台节点上部署 server 的 agent agent 然后可以在其他的节点上去部署 agent 进行数据的采集。然后这个时候就可以部署一个这种集群的方式去进行一个分析。右边的话主要是他的硬件和 OS 的一个要求,可以关注一下第三个的话主要讲功能原理。



第一部分的话是系统性能分析,就是第一个是全景分析。全景分析主要就是获取整个服务器的一些配置资源,然后 CPO 内存、磁盘、网络等等一些这种资源的运行情况。还有一些这种比如说进程的一些像这边的话比如说像展示服务器系统以及各个子系统的一个 top 结构,比如说像 CPU 那块 CPU 它上面挂了多少的一个网络,估计网络,我看上面挂了多少内存条多少内存的系统,然后他挂了多少块磁盘等着。然后这边的话可以看到这边可以有一些这种比较动态的一些数据,像 CPU 的内存的预警的情况,我想请教的利用率。然后还有针对大数据数据库、分布式存储等等的一些硬件配置和系统配置组件配置进行一个检查分析。如果就是比如说他的配置不是在共同服务器上的一个最优的配置项,那么就会给出一些比较典型的一些硬件配置,还有一些优化建议等等。这样的话用户可以根据这些优化进一进进行一个调整,然后提高提高各种场景的一个运行的性能。然后这边的话主要是结合那个系统性能和系统配置的一些情况,然后检测出系统的一个佣金点,然后给出一些优化建议。然后用户的话可以根据这些优化建议去进行一个修改。



全景分析的原理的话,可以看一下主要是基于 use 的性能分析方式获取系统资源。系统资源就包括比如说像 CPU 内存还有网络等等他们的一些比如说像饱和率、饱和度、使用率、饱和度错误等等一些指标,然后从这些指标中去识别这个系统的一个瓶颈。下面主要是这些指标的一个含义。后续大家可以自己去看一下他的一个分析的过程。主要是比如说从开始他选择了一项资源,比如说选择了 CBO 的内存的一个内存的情况,可以看出他是否出现了错误。如果错误了,那肯定要对这个错误进行一个性能分析,看之后得到解决。然后如果没有错误,看他是否已经饱和了。比如说 CQ 他。



硬件是否已经站不住了?表第三件。降低一些复合,他们主要是还有一个就是使用率的情况,这个主要是一个分析的过程。下面主要是那个一些指标,这些指标的话在在工具的界面上它不会有一个详细的解释和介绍,大家后续在这时间中可以自己去看一下。这边的话主要是比如说像 CPU 重点,这第一个主要是 CPU 的一个截图像,比如说 face 主要是 BPO 划在内核空间的一个时间,他的话主要是占用率。就是占该指标占用率过高的时候,那意味着就是 L 操作。设备主要是 CPU 处于等待的状况是吧状况还有一直不点赞说如果这个指标较低的话,就可以建议去比如说更换高性能的还有设备或者减少一些还有操作以提高非标的一个进度。内存的话,内存这边的话主要是比如说像内存的一些分配情况分配,然后已分配未影射的等等,去做一个详细的。



这系统一定要去进行页面的清理以及释放。如果是比如说做了这个操作,那么就就是说他会造成一定的浪费,就直接的时间上浪费,还可以不需要去做这些操作。像存储 IO 的话,主要就是像比如说一个 IO 请求来了,来了之后,然后他进行一个 IO 队列,然后队列里面的然后进行一个磁盘一个或者说值班的一个数据办不限。然后 L 的那个系统已经做好了,有比如说我想提高更好的,还有的一个硬硬件等等,有一些其他的优化的对。



网络的话其实也是一样,比如说像收发包讲完了把那个头发包的大小的一个白框。看这边的话,数据包这两个指标的话表示数据标,数据包已经进入了 rain buffer 的状态,但是由于内存不够,导致了最终被丢弃,所以说这种情况的话就是会有一定的影响。



下面的话主要是一些系统配置的一些介入。然后因为在那个服务器上它有很多配置,比如说像网网口网口的那个中队列的一个中断版绑定这边。然后这边的话主要是 ssmeo 的 smmeo 的一个。然后这边是那个大数据的一个发行的策略。这边可以大家去看一下他的实际的一个数据流转的一个这些配置的话,对,就是可以做一个比较优的结果。比如说像大数据的一个发行策略,他如果说在也比较频繁的时候,就是那种 IO 操作比较频繁的时候,他大数据写的话可能时间可以设置成多少秒,最佳编了一个优化的策略。



下面的话主要是一个进线程的一个技能分析。进线程的话它包含了一个方面,比如说一个进程的 CPU 的一个在一段时间内的一个消耗的情况。这边比如说像他的一个折线图,就是在这段时间内比如说像 CPU 的使用率,她的 iowait 她的一个情况。然后这边的话主要是内存的一个资源的消耗情况,就是通过对进线层的一个 CPU 内存,还有分磁盘、分组等这些资源的一个消耗情况就获取到另一大段,比如说像使用率、错误、饱和度这些指标,然后通过这些指标去识别你这个地线层的一个瓶颈在哪。然后针对这个部分指标的一个分析,然后以及现在我们内部就是从经验上定的一些基准值,然后给出一些优化建议。说举个例子就是说比如说当一个定的他的那个 CPU 他的利用率他不一直是 100%。然后你这个定的它的 BPO 消耗很高,是否可以?比如说采用多进程的方式去进行处理,这样的话就可以降低,可以提高你的这个进展的一个运行或者计算的一个。



下面是进线程的一个分析原理,主要也是通过 CPU 内存和磁盘确定这些指标的话,在我们工具的里面进行介绍。下面的话是一个定成的,看一下我们电话能力进程的分析的解读,就是 3a 进程。当进程 1 在执行的时候,比如说他会有一些这种上下文的切换,上下文切换比如说定成 1 在执行的时候他定成 1,就会比如说做了一些操作,然后完了之后他会进行一个上下文的保存保证之后,然后这个时候进程 2 他会就是加载进来,然后进行进程 2 的操作。就是比如说在一个 CPU 和上。



他的话主要就是明亮被动任务上下次变换的一个次数。比如说在他的变化次数高的时候,或者说据说当某个进程了连片耗尽,最后被系统挂切换到其他正在 CPU 进行,相当于他的那个比如说发起之后他的那个那样就会被保存,然后另外正在等待的进程,它就会进入到 M 的一个加载当中。然后在这种情况下,就是比如说在一个进程他的那个切换次数就非常多,很容易造成有比如说 CPO 的时间的大量的消耗,中间这部分上下文切换这部分资源的一个浪费。



这样的话就可以大大缩短,否则的话大量时间都会浪费在这个上下文切换上。下面一个的话主要是热点函数的一个分析质检函数的话,可以看一下看,这个主要是给出了首页上主要是给出出了一个 top 10 的一个热点数,然后并给出一些这种优化建议。比如说像 A 的那个加速,或者说比如说一个压缩的一个加速,就是会有一些加速库的一些计划,还给出了一些比如说像指令运行的一个因素,适中周期等等。然后通过这个热点函数,我们可以去关联这些热点函数的一个指令,还有它的源码还有一个代码框。然后可以看到如果说这个值这个函数它的那个源码源码块在这,然后可以比较详细地看到它热点代码代码,我并对这些热点代码进行一个分析。然后工具的话还可以从几个模块对那个热点做进行一个展示。比如说包含这种模块包模块的维度,还有 CPU 和的维度,然后对整个热点数进行一个展示,然后还得等着他具体的一个调用账号。



这边的话主要是一个火焰图的话,可以看到这边他上面有很多这种这样的情况,这个 Y 轴的对 X 轴的话主要是这样是一个多样数,它其实是每一层都是一些函数。对,下面是一个。就是他如果越高有这个好运,越高,费用大越深。然后最顶部的话比如说就正在那个被执行的一个函数就最低最顶上的函数下方的话主要是它的一个负函数,就是调用它的一个。然后 Y 轴的话主要是表示那个如果说你那个 X 轴越宽,然后它表示被搜到的次数就越多,然后他的执行时间就越长。然后需要调优的情况主要是看他最顶层的一个函数,如果这个顶层的月框怎么说明他被执行的时间越长,那么他性能就越低,那么就可以对这个最顶的进行一个优化。.



热点产出的分析原理的话主要是基于 CPU 的 cycle 事件的一个数据去进行分析的。热点函数的话和那个指令的话不是基于 CPU 的 cycle 事件中断的调用这样的一个信息的一个表示符。就是比如说在一段时间内五个函数的那个某个指令,被采集到的那个次数越多就说明他越热因为他可能就被调用的次数越多。然后然后调用到就用以调用这样的信息去反映他的调用关系。然后就像我们刚刚看到的那个火焰图,就是一层一层的去调用。然后还可以做到,就是比如说放汇编去解析它的那个目标文件,获取它的一个汇编指令,然后还可以通过符号表还有第八个信息去关联它的源码,然后通过这一块,然后可以看到他热点函数的源码,并对这个源码去进行一个详细的分析,然后去进行一个调优。



举个例子就是比如说这边有一个函数,然后这个函数的话它是做一个个类似于谈判,矩阵的一个一个运算,一个巨大的运算。然后我们可以看到采集出来的数据的话,它它它是以这个函数,它是它的热点函数,multimultiplay 的这个函数是它的那个热点函数。然后我们可以看到它对应的一个代码块,还有具体的一个源码源码情况,还有个会编码,然后通过这个热点梳理源码,我们可以发现就是他做了一个那个运算,然后他主要就是一个这个谈话。那么通过这种可以通过疯狂的那个没有指令去优化这个矩阵的计算,没有指令的话可以一次性就是计算扑克塔多条那个矩阵,矩阵的一个,就可以提高它的一个运算效率。可以看一下这边的一个结果,这个大家可以后面就是用这个例子去执行一下具体的一个情况。下面一个是微架构的分析。微架构的分析的话主要是基于那个公共处理器的一个 MU 事件去进行一个分析的。我们可以看到就是整体的话是从上到下分为底层就是一个 top one 的一个模型。然后主要就是获取指令在 CPU 的流水线上的一个运行情况,然后帮助用户定位你这个这个运行运行期间应用在 CPU 上的一个性能瓶颈。比如说像 returring 它其实就表示就是一个正常执行的指令的大比来看的话就是相当于是。然后去利用安全的一个 CPU 资源。好页面上的话会给出这些已有的一个采集到的一个上报下的一个发布单的一个数据,然后并给出一些优化建议。然后还可以通过其他几个维度,比如说进程、线程模块、CPO 等几个维度去给出它具体的每一个的一个 top down 的一个持续的数据。同样的他还可以有每个比如说函数他都有详细的任务大。然后这个还可以通过其他的一个维度去进行一个展示。同样的他也支持光关联到一个指令热点指令和一个源码一个情况。微架构的主要原理的话就是利用的话就是一条指令他在那个流水线上运行的时候的一个,然后去查看他的那个。大家都知道就是 CQ 的话它是一个流水线对吧。然后欧盟的话主要那个比如说微架构的话,它其实分为第一层下面是第一层,它分为那四大块, recarrying retaling 的话其实它就表示正常执行的指令,这个越大的话就表示你的指令的执行的成功率或者说效率得越好。 get speciination 的话主要是那个预期是比如说好吧,分支预测主要是指分支预测,就是你的那个预测的预测的那个准确率,如果说错误越多的话,就说明他对干部就会越高。 Frank front 的话,这个这表示的一个前端的话,主要就是比如说像。



第二层的话就是相当于这一些具体的一个错误的一些信息了。比如说像 back and 上面的 memory bound 就相当于是内存的一个。这些的话主要是就是相当于处理器在每个阶段都设定了一些 pmu 事件,然后我们通过获取到这些事件,然后结合一些算法,一些模型,然后得到这些指令在 CPU 的流水线上的一个运行情况,然后并对这些数据进行一个分析,去整理出一个 top down 的模型,一个整体的数据。



下面是微架构的一个例子,大家可以看一下。这边的话主要是执行定义了一个那个一个宿主。然后下面的话主要是对那个这个这个数据里面的数据做了一些做了一些。如果说大于 128 的话,就进行了一个加。然后我们用微架构去进行一个分析,发现它消耗的时间会比较长。然后因为这个数组里面的数据它都是随机的,所以说在它是否大于 128,在这个判断的时候,如果进行 CPU 的预测的时候,它就会存在大量的失败的情况。因为有可能第一个数是 128,小于 128,第二个数又大于,第三个数又小于。这样的话,CPU 在预测的时候它的 value 就很高,那么它的那个 add speculation 它会就很可以看到这边。所以说我们可以对比如说这个速度进行一个排序,排序完之后,那么它就是一条比如说从小到大的数据的从小到大一个数据的排序。那么在做判断的时候 CPU 的预测它就会比较准。因为它前面比如说前面在 128 前的,它可能都是小于 128 的。当大当然有一个大于 88 的时候,那么他都是后面所有组都是大于 88 的,然后他的预测就 CPU 预测的话他就会准确率就很高。那么投之后它的性能就这样,它的那个运行时间就降低到了差不多 11 秒,是提升了大概百分之二百架构的一个例子。



第三个的话是缓存分析。有鲲鹏处理器,鲲鹏处理器的话是一个牛马架构的做,就是分为存在的一个焊接开始机制, CPU 在和就是 CPU 在访问数据的时候就会通过比如说存在本地的跨片的发带的,然后和在内存里面的等等这种方法情况。然后他不同的路径的话,他的那个实验是很大的。我们可以看到是的,如果他从 L1 开始上去获取,那么他的那个实验就很短。如果是 L1 开 L1 下没有获取到,它会从 L2 去获取,L2 获取的话就比 L1 获取它的名额时间要慢很多。然后如果他在都获取不到。比如说可能要从画片画带去获取数据,他的那个时长也会增加很多。如果说他这种要从内传里面获取,那么他的那个就会有更好的一个实验的情况。



然后基于这种情况的话,就是工具的话就是有那个对这个缓存的一个过程就是进行一个分析,因为它可能会存在瓶颈。然后并对这些那个性就是可能造出的一些性能问题给出一些原因。还有优化建议。目前的话主要包含了一个三个功能,一个是那个发生记得一个分析,然后第二个是历史的事件,第三个是那个违控。对我们可以先对他缓存整体的一个缓存进行一个分析,然后分析完了之后,然后再针对某个方向去进行一个单独的分析,那也都是能精确到那个异常代码。缓存分析的话主要是那个。那个一个缓存统计,比如说像 L1 开始 L2 开始, L3 开始的一个命中率。如果他们的命中率都比较低的时候,那么 CPU 的话可能要花费更长的时间,比如说去内存中读取。那么。比如说像数据访问的一个复合开始的时间和空间局部性等等,这些就是我们可以去提高他的率,然后这样的话就可以提高我们这个整体程序的一个性能。然后这样的话是可以。如果比如说像出现很多那个跨带跨片的方案,这边也是可以在界面上进行一个展示的。还可以比如说像那个跨片跨贷房的一个次数如果他次数倍数很大,那么我们可以考虑就是对相关的进程进行一个绑的操作。缓存分析的一个原理的话,主要是基于处理器的一个 Oncall 的一个变统计,就 CPU 和访问 cache 和 DDR 的一个性能数据,就分析对缓存和内存的一个访问次数命中率,还有一个带宽的情况。这边的话主要是一些靠事件和 Oncall 事件的话在 CPU 上的一个分布的情况,大家可以去看一下。然后访谈分析的第二个是那个 MIS 事件。 MIS 事件的话主要是实现了一些那个写,比如说像 lsllc 的一个名词,然后 TLB 的一个名词等等,然后并关联它的,并关联到造成这些 miss 事件的一个源代码。要做的话就可以自己去选择性地修改自己的程序,然后降低这些降低他们的历史率,然后提高一个程序的运行的性能。可以这边可以看到,就是比如说对每种事件它其实都是可以关联到那个函数以及调用这样。然后还有从不同维度去查看,然后查看它的调查信息,查看它的源码信息,然后并对这个源码进行一个优化。



这个事件的话主要是基于 arm 的 spe 的能力去实现的。 1 的话是针对指令进行一个材料,然后记录一些触发事件的一个信息,就是所向精确的 PC 的尺寸信息。然后利用这个的话它其实是可以用于对应用程序进行这些事件的一个分析,然后精确到一个事件的代码。就 SP 的话它比 PMO 事件要更加的一个精确,因为 PM 的事件他是没无法精确到一个比如说像 PC PC 的一个指针的问题。



其实是可以看一下界面这边的话主要比如说我们可以可能发生为共享的一些点,然后通过发展为共享一些点,去关联到他的那个汇编和源码,然后并对这个汇编和源码进行一个修改,可以针对性的修改源码,降低那个为共享利率,然后提高它的性能。研发几十伪共享的话,我们可以看一下伪共享的一些性能伪共享哪些原理他其实没共享的话其实就是说就是说比如说像多个 CPU 其实是多个线程,比如说多个线程修改同一条凯西兰造成的一个影响这样虽然我们从表面上看,比如说他可能其实是两个不同的变量是完全不一样的。但其实他内部实际上存储在同一个材质栏里。所以说三线程 1,线程 2 同时比如说线程 1 去修改这个配置单,然后线程 2 又去读取这个我就会造成这种开始一致性的一个问题。然后标准对,所以共享的一个划分。这边的话,然后下面举一个那个共享的一个例子,这边的话可以这边不是一个函数,它其实就一个一代码。然后这边定义了一个结构体,它一个里面有两个一个 int 的一个。然后线程 1 的话去读取,比如说 X 然后线程 2 的话去修改 Y 就从代码逻辑上看,他可能觉得就是一个是主选一次,一个是修改 why 它其实没有任何的那个影响。但是实际上它其实是会发生未共享的情况。这边可以看到他这边就是发生了伪共享的点。然后他具体的那个代码就是关联到了线程 1 的一个 X 和一个线程 2 的一个 Y。



这样干其实也不是很好,因为他可能会告诉一些因为你是强制一把他,那么他可能会造成一些资源的浪费等。下面是那个 IO 。 IO 分析的话主要是对那个磁盘磁盘的一个 IO 的读写。分析,这边一个是那个磁盘 O 的一个。



比如说 IO 的读写次数,数据大小等等,就是那个变了一些利用率等等。然后第二个的话是这边的话是主要是 IO 的一些 apis 就是关联 IO 的一些应用层的一些操作,比如说像 GID 、说明等等。那么我们通过这个上下的一个时间轴的一个关系,我们就可以这个应用它跟它的那个设备去进行一个关比如说像 link demo 间断,他进行了多少次还有操作,我进行了多少次读写操作等等。这样的话就可以把两个是吧跟那个应用去进行一个关联。然后下面还给出了一些那个优化建议,比如说可以看到 L 数据的分布一个分布情况,看看它是随机读还是。是随机操作还是顺序操作?然后这样的话可以给出一些相应的优化建议。



操作 L 分析的主要原理的话就是在那个设备层的话就是设备层的话,如果是通过那个 App base 去跟踪那个内核的一个 point 去获取到它对应的那个 IO 的全部信息。不知道,主要是这个系统调用公司系统调用这个情况。然后下面的话就是对,因为 case point 的话它其实只能反映那个内核的跟 L 这些处理,他们无法反映应用层的一些那个应用的那些处理。所以说还通过 IO 的那个,还通过去捕获那个 IO 的一些 API 的一些调用,就获取到应用层的一些那个一些处理。然后通过应用层跟内部层做映射,做一个映射。然后可以看到可以那个指导指导应用层的一些优化。比如说通过某个时间段数据快了一个分布是连续的还是随机的,然后优化应用参加一个 IO 请求。然后下面的话是支持那个自研盘的内部的一个新的数据的优化。这边的话还可以,比如说一个完整的还有操作,比如说从队列插入。还要分析的举例,就举个例子。然后下面是那个一个一个人物操作,可以看到就是我们这边就是 sda 的那个,它就一直很低就上不去说他们那个写数据就写写的 lps 就很低就上不去。然后我们通过工具发现就是这段时间内的那个详细的一个 L 情况,然后得到那个 L 的一个调用站的一个信息,然后可以看到最终这一块。然后的一个进程采用的是一个同步的操作。然后我们可以通过帮我们这些数据去比对我们的源码,发现代码中确实是。 ATS 确实是这样的一个调化,所以然后可以对这部分去进行一个相应的优化,就可以提升一个。资源调度的一个环节。资源调度的话看一下资源调度的话主要是一个比如说像金县城的调度的情况,进线程,比如说是否只有评判,看一下怎么变化 CPU 是否及时调度。然后还可以分析就 CPU 和在各个时间点的一个运营情况。比如说每个 CPU 和就比如说一个 CPU 和,然后这边有很多 CPU 和,然后每个 CPU 和它上面的具体的运行情况。然后比如说像绿色的,它是有进程就在 running 然后这种颜色的就是在 idol 的状态,有空闲的状态,可以看到进程的。



然后下面的话就是可以看到每个进程,比如说拿到一个进程之后,还可以看到这个进程就是他的那个运行的一个情况。比如说这个进程它一直在运行这段时间内有的进程,它可能一直在那个 wait wait 的状态就一直在等待。那么我们可以通过这部分去优化那个定层的一些信息。电源调度的话,它的那个主要原理的话就是相当于采集 CPU 的那个那个调度事件,CPU 的调度事件。然后从进程和线程的角度就是排序,把各个事件进行一个排序,然后计算出每个事件的一个时间差,然后去标记出来。比如说一个进程,它的那个 wait time 的一个时间。然后这样的话就。可以看出整个 CPO 上。比如说像下面举个你的资源调度的例子,比如说这边可以看到就是进程 1 他占用了很长的时间的一个一个,然后定场号的话他就一直在相当于一直在等待的情况,然后又执行了一点透明进程,这其实是同同一个进程同一个进程。比如说就是说他有两个 GID ,现在就是这个他是两两个两个进程对两个两个一个一个 GID 然后两个 GID 两个线程可以看到线程 1 的话它就是它占用的时间是绿色的,这部分他一直在执行,然后变成 2 的话他就在一直在等待的状态,然后又执行了一点说明,线程 1 跟线程 2 之间有一个一直在等待的过程,然后我们就可以通过一些辅助的功能,比如说工具中的所有等待的功能,可以找到这个函数的一个情况。我们可以发现他把那个 sleep sleep 10 秒携带了这个锁。这个锁的一个情况就是加了日报锁之后,然后他没有释放,他没有释放,然后在里面就是那怎么样停了几秒之后,然后然后这个现场就会一直正在执行优化的时候。比如说优化成把这个 leap 10 秒加到这个锁的外面,那么他的运行情况就是这个样子的,就是两边都是一个正常的执行状况。所以说这样优化的时候,每个线程它都能够以最大的程度的运行记录,这样的话就是一个比较好的一个资源调度的一个情况。下面就是讲迫于等待的一个功能,可以看到这边,所以等待的那个这边是所有等待的一个函数的调用信息。然后这边是所以所等待的一个函数调用点,然后也可以看到它对应的一个源码还一个汇编指令的一个信息。



所以的那个话它其实主要也是采集那个热点函数,然后并将这些热点函数进行分析,它分析它的那个 glibus glib C 的一个锁和与等待的一些函数。比如说像 sleep 加没有 tax 等等,这也是我的一个情况。然后通过这些情况关联到它对应的一个进程和调用点的一个情况。然后并通过我们就是一些专家或者一些经验,然后就给出一些优化建议。下面是那个 HPC 的一个场景。 HPC 的话就相当于目前的话是那个 open MP 和 MPI 分析,就是我们是通过那个采集系统的那个 pmu 事件,然后并配合采集面向比如说 open MP 和 MPI 的应用的关键指标,然后去帮助用户获取获取这个 region 已经以及这个 barary to to bear barrier 的那个唤醒疾病的一些时间,还有一些微架构的一些指标。下面的话是主要是一些那个一些指标信息,比如说像 open MP 的那个运行时指标,然后计划指标,还有 MPI 的运行时指标,还有 top down 的一些信息等等。这边后面这种比如说涉及到这种 HPC 的这种高性能计算的场景,大家可以去使用一下这个对。下面是那个内存诊断,对,这边主要是诊断方面的一个那个功能,上面主要是系统性能方面的一些方案。诊断功能的话就比如说像包括那个内存诊断的话主要是包括内存泄露、内存异常访问、内存异常访问,然后内存越界还有 OM 等的一些内存的跟踪。像内存泄露的话我们可以看看到就是内存泄露的点会给出内存泄露的具体到哪一行的具体泄露,然后只需要去改修改这一行就可以了。然后内内存异常释放,他其实也一样,就是说他也可以看到内存异常示范的点代码,具体去修改这个代码即可。然后内存越界内存越界的话,比如说像内存的一个正常的使用情况,比如说同步包括他的那个心理认证里面的等等。对它的一个内存的使用情况。然后那个越界的话也包括比如说像堆,然后对于堆的对 use after three 的那然后还有 star 吊着还有 dark 等等。然后 OM 的话主要就是比如说内存发生,如果内存泄露它导致的比如说一些进程的一些被被杀掉,获得被杀掉之后他的那个一些调用单的一些情况,还有被杀掉的时间定的是哪些等等。内存诊断的原理。主要就是采用那个 hook 的那个技术获取内存的一个申请和释放,然后并通过那个内存地址的一个匹配,就匹配到了申请点和示范点,判断是否有内存那个泄露还有异常示范的产品。然后我们拉起那个进程的产品,主要是用 pre load 那个技术加载用于 hook 的函数的动态库。然后针对这种产品,然后可以用那个 case 去加载用的 hook 函数的方法,然后计划那个计划原有的动态度,然后是他用到工具的那个 so 然后去获取到他对应的内存。乐见的话主要集成的是谷歌的这个工具,然后就是在编译的时候进行插桩,然后对每块内存的空间增加一个 memory 然后去检查上面是那个诊断。诊断的话当然还有比如说像包括网络诊断那个 IO 诊断,这里就不影响了大家再可以去费用的时候可以用是吧。下面是那个调和助手,调助手的话主要就是采集数据那个覆盖 OS 应用硬件等各个课程的一个系统配置性能指标。你看一下,跳出去,他从应用层,然后从那个硬件层,硬件又包括 CPU ,那什么还有网络等等都会有设计,然后通过这些软件的一个结合,然后分析它的一个性能以及性能消耗。性能。就是性能的一些瓶颈,像资源消耗以及他们今天我们。然后助手的话主要就是它包含几大块一块是系统配置,主要是从配置方面给出的一些优化建议。这边主要是那个优化的一个,然后可以通过这些优化的那个优化建议,然后以及具体的一个说明和优化建议去调整对应的那个定了一些配置。然后第二个是热点函数,热点函数的话主要是包括一些比如说像加速库的函数,然后一些一些已知的经验的函数去进行一个计划,比如说像 delete delete 的那个加速。第三个的话主要是从系统性能方面,比如说从 CPU 的一个任务情况,然后去去发散到你的比如说各项的一个优化的可优化的一些点,然后通过这些点一个数据的分析,然后去进行一个数据的调整,对,找到他的性能瓶颈,然后根据优化建议去优化即可。第四个的话主要是进程线程性的,就是你的进线程是否存在瓶颈,然后可以通过它对应的优化建议去优化。这边主要是调助手,然后调助手的话主要系统配置上还给出了那个具体的优化建议的一个详细数据。下面是系统性鲲鹏分析工具的最后一项 Java 性能分析工具。这边 Java 性能分析工具的话主要是针对 Java 程序的一个性能分析,就是能图形化形式 Java 的一个堆线程数,垃圾回收等信息,然后去收集它的热点函数,定位那个程序的一个平均点,帮助用户进行一个性能调优。它主要分为两大部分,一部分是那个发力的就是在线分析,然后一部分是那个 sampling 就是采样分析,这边都是基于不同的技术去进行分析的。在线分析的话主要基于 attach 的技术,有实现 Java 程序的那个内部数据的一个动态采集,然后还可以动态的获取到实时的数据,然后发现这些实时数据的一个那个云点,比如说像 tip 还有那个 GC 活动等这些。然后采样采样分析的话主要就是一段时间内去采集收集那个这边的一个内部的一些活动和性能事件,然后通过那个一些录制回放的方式,然后进行一些分析,然后去发现他的一个性能力。然后这部分的话主要是针对那个 Java 的一个 Java 应用的一个分析。然后性能分析工具的话大致介绍就到这里。他其实没有一个因为性能分析可能会比较难,就是说没有一个就是逻辑不到位的情况。所以说需要根据比如说像昆仑性能分析工具各个各个一个一各个模块各个应用去同时对这个一个服务器或者一个应用去进行一个整体的情况的一个分析,最终得出一些比较好的一些优化建议,然后或者对代码进行一些修复,然后这样才能达到一些效果。



发布于: 刚刚阅读数: 3
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
鲲鹏devkit开发套件_8月月更_乌龟哥哥_InfoQ写作社区