中文
注册

应用场景

鲲鹏DevKit包含应用迁移工具、亲和分析工具、应用开发工具、编译调试工具、系统性能分析工具、Java性能分析工具,具体各应用场景如下。

应用迁移工具

软件迁移评估:自动扫描并分析软件包(非源码包)、已安装的软件,提供可迁移性评估报告。

源码迁移:当用户有软件要迁移到基于鲲鹏916/920的服务器上时,可先用该工具分析源码并得到迁移修改建议。

软件包重构:帮助用户重构适用于鲲鹏平台的软件安装包。

专项软件迁移:使用华为提供的软件迁移仓修改、编译并产生指定软件版本的安装包,该软件包适用于鲲鹏平台。

表1 特殊场景的例外约束

特殊场景

例外约束

构建文件

  • CMake解析中的Find功能依赖GCC编译结果,编译选项中有x86特有编译选项如-m64时,如果工具运行环境是鲲鹏环境,CMake无法顺利解析,无法检出相应的内容。
  • Makefile支持$(shell shell_command)形式的shell指令,但不支持直接使用shell脚本作为构建配置文件。

C/C++代码分析

工具运行环境中缺少用户自定义宏头文件、第三方头文件、某些系统头文件场景下,会影响相关宏的修改点检出,无法给出精确建议。

Intrinsic函数

Intel协处理器相关的130多个 Intrinsic函数无法给出准确替换建议。

汇编指令

  • 存在以下场景时,仅能提示用户注意转换代码的使用,不能提示100%精确的修改建议:
    • 当函数存在参数的时候,提示可能存在特殊结构导致函数转换出错
    • 将栈上的数据入栈传参时,默认该参数为整型
  • 存在以下场景时无法支持100%准确的自动转换,仅能提示需要手动转换:
    • goto语句、call语句和ret语句
    • 使用段寄存器或未赋值的物理寄存器
    • 访问全局符号
    • 输入输出的变量位宽大于128位
    • 输入输出的全局变量大于21个
    • 指令的位宽与变量位宽不一致
    • 使用intel和AT&T混合的汇编格式
    • 汇编存在语法错误
      说明:

      具体代码案例请参见嵌入式汇编例外场景和常见语法错误

亲和分析工具

亲和分析:支持x86和鲲鹏平台GCC 4.8.5~GCC 10.3.0版本32位应用向64位应用迁移的64位运行模式检查、结构体字节对齐检查、缓存行对齐检查和鲲鹏平台上的内存一致性检查。

表2 特殊场景的例外约束

特殊场景

例外约束

字节对齐

递归包含头文件场景下,如果用户提供不了一部分依赖包,会造成分析精确度下降。

系统性能分析工具

表3 任务描述

任务分类

描述

调优助手

调优助手通过系统化组织和分析性能指标、热点函数、系统配置等信息,形成系统资源消耗链条,引导用户根据优化路径分析性能瓶颈,并针对每条优化路径给出优化建议和操作指导,以此实现快速调优。

对比分析

支持对同一种类型分析任务的结果,选择同一节点或者不同节点间进行比较,从而快速获得不同分析结果之间的差别,定位性能指标的变化,快速识别优化手段的效果。

HPC集群检查

通过对用户指定的MPI集群进行硬件、软件配置检查,并给出集群中各节点软硬件配置的一致度报告。检查对象支持硬件领域的CPU、GPU、互联、内存、网卡、磁盘,软件领域中的OS、Kernel、环境变量、MPI、OpenMP、HPC常用依赖库等维度。 对于不符合鲲鹏平台最佳实践的配置,工具会给出优化建议。

HPC应用分析

HPC应用分析通过采集系统的PMU事件并配合采集面向OpenMP和MPI应用的关键指标,从而帮助用户精准获得Parallel region及Barrier-to-Barrier的串行及并行时间,校准的2层微架构指标,指令分布及L3的利用率和内存带宽等信息。

全景分析

通过采集系统软硬件配置信息,以及系统CPU、内存、存储IO、网络IO资源的运行情况,获得对应的使用率、饱和度、错误次数等指标,以此识别系统性能瓶颈。针对部分系统指标项,根据当前已有的基准值和优化经验提供优化建议。

针对大数据场景、数据库场景和分布式存储场景的硬件配置、系统配置和组件配置进行检查并显示不是最优的配置项,同时分析给出典型硬件配置及软件版本信息。

微架构分析

基于ARM PMU(Performance Monitor Unit)事件,获得指令在CPU流水线上的运行情况,可以帮助用户快速定位当前应用在CPU上的性能瓶颈,用户可以有针对性地修改自己的程序,以充分利用当前的硬件资源。

访存分析

基于CPU访问缓存和内存的事件,分析访存过程中可能的性能瓶颈,给出造成这些性能问题的可能原因及优化建议。
  1. 访存统计分析

    基于处理器访问缓存和内存的PMU事件,分析存储的访问次数、命中率、带宽等情况,具体包括:

    • 分析L1C、L2C、L3C、TLB的访问命中率和带宽。
    • 分析HHA访问速率。
    • 分析DDR的访问带宽和次数。
  2. Miss事件分析

    基于ARM SPE(Statistical Profiling Extension)能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力可以用于业务进行LLC Miss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析,并精确的关联到造成该事件的代码。基于这些信息,用户便可以有针对性地修改自己的程序,降低发生对应事件发生的几率,提高程序处理性能。

  3. 伪共享分析

    基于ARM SPE(Statistical Profiling Extension)能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力可以用于业务进行伪共享分析,得到发生伪共享的次数和比例、指令地址和代码行号、NUMA节点等信息。基于这些信息,用户便可以有针对性地修改自己的程序,降低发生伪共享的几率,提高程序处理性能。

  4. NUMA精细化分析

    基于ARM SPE(Statistical Profiling Extension)能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力可以用于收集系统中所有进程的NUMA性能,找到Top N (e.g. N = 10) NUMA性能最差的进程及这些进程中的内存热区,各NUMA节点间内存访问统计矩阵,识别节点间内存访问不平衡状态,并得到相关优化建议。

I/O分析

分析存储IO性能。以存储块设备为分析对象,分析得出块设备的I/O操作次数、I/O数据大小、I/O队列深度、I/O操作时延等性能数据,并关联到造成这些I/O性能数据的具体I/O操作事件、进程/线程、调用栈、应用层I/O APIs等信息。根据I/O性能数据分析给出进一步优化建议。

进程/线程性能分析

采集进程/线程对CPU、内存、存储IO等资源的消耗情况,获得对应的使用率、饱和度、错误次数等指标,以此识别进程/线程性能瓶颈。针对部分指标项,根据当前已有的基准值和优化经验提供优化建议。针对单个进程,还支持分析它的系统调用情况。

资源调度分析

基于CPU调度事件分析系统资源调度情况,主要包括:

  1. 分析CPU核在各个时间点的运行状态,如:Idle、Running,以及各种状态的时长比例。
  2. 分析进程/线程在各个时间点的运行状态,如:Wait、Schedule和Running,以及各种状态的时长比例。
  3. 分析进程/线程切换情况,包括:切换次数、平均调度延迟时间、最小调度延迟时间和最大延迟时间点。
  4. 分析各个进程/线程在不同NUMA节点之间的切换次数。如果切换次数大于基准值,能给出绑核优化建议。

热点函数分析

分析C/C++程序代码,找出性能瓶颈点,获得对应的热点函数及其源码和汇编指令;支持通过火焰图展示函数的调用关系,给出优化路径。

锁与等待分析

分析glibc和开源软件(如MySQL、Open MP)的锁与等待函数(包括sleep、usleep、mutex、cond、spinlock、rwlock、semaphore等),关联到其归属的进程和调用点,并根据当前已有的优化经验给出优化建议。

Java性能分析工具

表4 任务描述

任务分类

描述

在线分析

在线分析包含对于目标JVM和Java程序的双重分析。包括Java虚拟机的内部状态如Heap,GC活动,线程状态及上层Java程序的性能分析,如调用链分析,热点函数,锁分析,程序线程状态及对象生成分布等。通过Agent的方式在线获取JVM运行数据,进行精确分析。

主要分析结果包含:

  1. 概览
    • 在线显示Java虚拟机系统状态。
    • 在线显示JVM的Heap大小、GC活动、Thread数量、Class加载数量和CPU使用率。
  2. 内存信息
    • 通过抓取堆快照,分析应用在某时刻堆的直方图分布和支配调用关系,追溯堆内存中各Java存活对象到GC root的引用关系链,帮助定位潜在的内存问题;对比分析不同时刻的堆快照,给出堆使用与分配变化,辅助用户发现堆内存在分配和使用过程中的异常情况。
    • 获取Java堆中各个对象创建的数量及大小,显示相关内存使用情况并实时刷新。
    • 通过采集GC事件的各项指标,分析GC性能问题。
  3. IO信息

    在线分析应用中的文件IO、Socket IO时延、消耗带宽等数据,找出热点IO操作。

  4. GC信息

    通过抓取目标Java应用的内存快照,分析某一时刻目标Java应用中堆的直方图分布、支配调用关系;用户可以追溯堆内存中各Java存活对象到GC root的引用关系链,帮助定位潜在的内存问题。

  5. 线程信息

    获取当前JVM中实时的活动线程状态和当前线程转储,图形化显示线程锁定状态,分析线程死锁情况。

  6. 热点信息

    通过经工具分析的热点方法,热点方法以倒火焰图形式呈现,不同层(如Java调用层、JNI层、Native层、内核层等)的热点方法的以不同颜色区分。通过工具展开查看Java方法对应的字节码(非必须)、经JVM JIT编译器生成的机器指令,并查看这些指令的热点分布;对于不能查看的字节码的情形需要给出原因。对给定的入口方法进行调用链采集,收集采集期间的方法调用关系,方法耗时等数据;以树形式展现。

  7. 数据库信息
    • 监测和分析数据库连接池。监测数据库连接池连接的情况、帮助用户定位潜在的连接泄露,对不合适的连接池配置给出优化建议。
    • 分析JDBC热点SQL操作。记录应用中的SQL调用时间、耗时和堆栈跟踪,帮助用户定位耗时最长的热点SQL操作。
    • 分析NoSQL热点操作。记录应用中访问/操作NoSQL数据库调用时间、耗时和堆栈跟踪,帮助用户定位耗时最长的热点NoSQL操作。
  8. HTTP信息

    记录应用中的HTTP请求时间和耗时,找出热点HTTP请求。

  9. 快照信息

    支持在堆、IO、Workload在线分析过程中生成快照,对快照进行比对,辅助用户发现资源、业务相关指标的变化趋势,定位潜在的资源泄露问题或性能指标恶化问题。

采样分析

通过采样的方式,收集JVM的内部活动/性能事件,通过录制及回放的方式来进行离线分析。这种方式对系统的额外开销很小,对业务影响不大,适用于大型的Java程序。

主要分析结果包括:

  1. 概览
    • 显示Java虚拟机系统状态。
    • 通过采样及回放的方式显示JVM的Heap使用情况、GC活动、IO消耗和CPU使用率。
  2. 线程转储及锁分析结果
    • 分析程序线程状态及锁。获取采样时间内的线程的状态变化和当前线程转储,根据线程转储图形化地显示线程锁定状态,分析线程死锁情况。
    • 分析程序所用堆积对象。获取采样时间内Java堆中各个对象的数量、大小与堆栈跟踪。
    • 分析估计线程阻塞对象和阻塞时间。
  3. 方法采样分析结果
    • 分析Java及native代码中热点函数CPU Cycles的占比及定位。
    • 支持通过火焰图查看热点函数及其调用栈。
  4. 内存分析结果
    • 通过对存留周期长的对象进行采样,分析Java应用中潜在的堆内存泄漏,并辅助用户定位潜在原因。
    • 根据采样分析记录出具关于启动参数、GC方面的报告和优化建议。
  5. IO分析结果

    分析应用中文件IO、Socket IO时延、消耗带宽,找出热点IO操作。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词