---
title: 鲲鹏DevKit简介
description: "鲲鹏DevKit（浏览器工作模式）是一款提供涵盖应用迁移、测试、性能调优及系统诊断等各环节的开发使能工具集，方便开发者快速开发出鲲鹏亲和的高性能软件。同时，帮助开发者加速应用迁移和算力升级，面向全研发作业流程，提升应用迁移、调优效率，助力开发者高效创新。迁移、调优全程无缝衔接。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/devkit_24/usermanual/KunpengDevKit_0004.html
sourcePath: /source/zh/kunpengdevkithistory/devkit_24/usermanual/KunpengDevKit_0004.html
indexId: 69a3f6f1fe2d59e0a7793af11f2bd139555e614c8a6b3b2139229d563f1d6f0576
---
# 鲲鹏DevKit简介

鲲鹏DevKit（浏览器工作模式）是一款提供涵盖应用迁移、测试、性能调优及系统诊断等各环节的开发使能工具集，方便开发者快速开发出鲲鹏亲和的高性能软件。同时，帮助开发者加速应用迁移和算力升级，面向全研发作业流程，提升应用迁移、调优效率，助力开发者高效创新。迁移、调优全程无缝衔接。

- 鲲鹏DevKit提供了C/C++/Java/Python等多种编程语言的开发环境，方便开发者根据自身需求选择合适的编程语言进行开发，同时支持Web端和IDE端。
- 鲲鹏DevKit内置了迁移工具、性能测试工具等，方便开发者快速构建基于鲲鹏平台的高性能应用程序，并充分发挥鲲鹏平台的性能优势。
- 鲲鹏DevKit提供了详细的文档和示例代码，帮助开发者快速入手、掌握鲲鹏平台的开发技术。
- 鲲鹏DevKit提供了在线技术支持和社区交流平台，方便开发者在使用过程中遇到问题时及时得到解答，并与其他开发者进行交流和分享。

鲲鹏DevKit支持的工具如下表。


**表1 鲲鹏DevKit支持工具**

| 工具 | 说明 |
| --- | --- |
| 应用迁移工具 | 支持x86 Linux软件迁移到鲲鹏Linux上的扫描、分析与迁移。 |
| 亲和分析工具 | 支持鲲鹏920平台软件代码质量检查，提升代码质量、优化访存性能。 |
| 系统性能分析工具 | 提供系统多场景性能采集和分析能力，并基于调优系统给出优化建议。 |
| Java性能分析工具 | 针对运行在鲲鹏服务器的Java程序进行性能的分析和优化。 |
| 系统诊断工具 | 快速定位和诊断各部件异常，并识别源码中内存使用的问题点。 |


#### 应用迁移工具

鲲鹏应用迁移工具可以简化应用迁移的过程，支持将x86 Linux软件迁移到鲲鹏Linux上的扫描、分析与迁移。通过该工具能够自动分析并输出指导报告，极大提高了代码迁移效率。

鲲鹏应用迁移工具支持的功能特性如下：


**表2 应用迁移工具支持的功能特性**

| 功能 | 描述 |
| --- | --- |
| 系统迁移 | 支持系统全栈迁移，覆盖操作系统、数据库、中间件、应用，提供迁移方案和自动化迁移能力，降低系统迁移难度，提升迁移效率。不支持x86环境。 |
| 软件迁移评估 | 检查用户软件包（RPM、DEB、TAR、ZIP、 GZIP 等文件）中包含的SO（Shared Object）依赖库和可执行文件，并评估 SO依赖库 和可执行文件的可迁移性。 检查用户Java类软件包（JAR、WAR、EAR）中包含的SO依赖库和二进制文件，并评估SO依赖库和二进制文件的可迁移性。 检查指定的用户软件安装路径下的SO依赖库和可执行文件，并评估SO依赖库和可执行文件的可迁移性。 |
| 源码迁移 | 检查用户C/C++/ASM/Fortran/Go软件构建工程文件，并指导用户如何迁移该文件。 检查用户C/C++/Fortran/Go/解释型语言软件构建工程文件使用的链接库，并提供可迁移性信息。 检查用户C/C++/ASM/Fortran/Go/解释型语言软件源码，并指导用户如何迁移源文件。其中，Fortran源码支持从Intel Fortran编译器迁移到GCC Fortran编译器，并进行编译器支持特性、语法扩展的检查。 检查用户Python/Java/Scala程序通过ctypes模块加载的SO文件的兼容性。 x86汇编指令转换，分析部分x86汇编指令，并转换成功能对等的鲲鹏汇编指令。 |
| 软件包重构 | 在鲲鹏平台上，分析待迁移软件包构成，重构并生成鲲鹏平台兼容的软件包，或直接提供已迁移的软件包。 |
| 专项软件迁移 | 在鲲鹏平台上，对部分常用的解决方案专项软件源码，进行自动化迁移修改、编译并构建生成鲲鹏平台兼容的软件包。 |


#### 亲和分析工具

亲和分析支持软件代码质量检查，提升代码质量、优化访存性能，亲和分析工具仅支持基于鲲鹏920的鲲鹏平台。亲和分析工具支持的功能特性如下：


**表3 亲和分析工具支持的功能特性**

| 功能 | 描述 |
| --- | --- |
| 64位运行模式检查 | 64位运行模式检查是将原32位平台上的软件迁移到64位平台上，进行迁移检查并给出修改建议。 |
| 字节对齐检查 | 结构体字节对齐检查是在需要考虑字节对齐时，检查源码中结构体类型变量的字节对齐情况。 |
| 缓存行对齐检查 | 缓存行对齐检查是对C/C++源码中结构体变量进行128字节对齐检查，提升访存性能。 |
| 内存一致性静态检查 | 内存一致性静态检查就是检查源码迁移在鲲鹏平台运行时可能存在的内存一致性问题，并提供插入内存屏障的建议。 |
| 向量化检查 | 向量化检查功能用于对可向量化源码片段进行检查，并提供向量化修改建议。 |
| 矩阵化检查 | 矩阵化检查功能用于对可矩阵化源码片段进行检查，并提供矩阵化修改建议。 |
| 构建亲和 | 构建亲和功能用于分析 makefile 、 CMakeLists .txt中可以替换鲲鹏加速库的内容，并提供替换建议和功能修复。 |
| 计算精度分析 | 精度分析工具应用函数插桩后，分别在x86平台和鲲鹏平台运行，最终通过对比输出结果，分析平台计算精度差异。 |


#### 系统性能分析工具

系统性能分析是针对基于鲲鹏服务器的性能分析工具，能收集服务器的处理器硬件、操作系统、进程/线程、函数等各层次的性能数据，分析出系统性能指标，定位到系统瓶颈点及热点函数，给出优化建议。该工具可以辅助用户快速定位和处理软件性能问题，不支持x86环境。

调优助手是针对基于鲲鹏服务器的调优工具，能系统化组织性能指标，引导用户分析性能瓶颈，实现快速调优。


**表4 功能特性**

| 任务分类 | 描述 |
| --- | --- |
| 调优助手 | 调优助手通过系统化组织和分析性能指标、热点函数、系统配置等信息，形成系统资源消耗链条，引导用户根据优化路径分析性能瓶颈，并针对每条优化路径给出优化建议和操作指导，以此实现快速调优。 |
| 对比分析 | 支持对同一种类型分析任务的结果，选择同一节点或者不同节点间进行比较，从而快速获得不同分析结果之间的差别，定位性能指标的变化，快速识别优化手段的效果。 |
| HPC集群检查 | 通过对用户指定的MPI集群进行硬件、软件配置检查，并给出集群中各节点软硬件配置的一致度报告。检查对象支持硬件领域的CPU、GPU、互联、内存、网卡、磁盘，软件领域中的OS、Kernel、环境变量、MPI、OpenMP、HPC常用依赖库等维度。 对于不符合鲲鹏平台最佳实践的配置，工具会给出优化建议。 |
| HPC应用分析 | HPC应用分析通过采集系统的 PMU事件 并配合采集面向OpenMP和MPI应用的关键指标，从而帮助用户精准获得Parallel region及Barrier\-to\-Barrier的串行及并行时间，校准的L2层微架构指标，指令分布及L3的利用率和内存带宽等信息。 |
| 全景分析 | 通过采集系统软硬件配置信息，以及系统CPU、内存、存储IO、网络IO资源的运行情况，获得对应的使用率、饱和度、错误次数等指标，以此识别系统性能瓶颈。针对部分系统指标项，根据当前已有的基准值和优化经验提供优化建议。 针对大数据场景、数据库场景和分布式存储场景的硬件配置、系统配置和组件配置进行检查并显示不是最优的配置项，同时分析给出典型硬件配置及软件版本信息。 |
| 微架构分析 | 基于ARM PMU（Performance Monitor Unit）事件，获得指令在CPU流水线上的运行情况，可以帮助用户快速定位当前应用在CPU上的性能瓶颈，用户可以有针对性地修改自己的程序，以充分利用当前的硬件资源。 |
| 访存分析 | 基于CPU访问缓存和内存的事件，分析访存过程中可能的性能瓶颈，给出造成这些性能问题的可能原因及优化建议。 访存统计分析 基于处理器访问缓存和内存的PMU事件，分析存储的访问次数、命中率、带宽等情况，具体包括： 分析L1C、L2C、L3C、TLB的访问命中率和带宽。 分析HHA访问速率。 分析DDR的访问带宽和次数。 Miss事件分析 基于ARM SPE （Statistical Profiling Extension）能力实现。SPE针对指令进行采样，同时记录一些触发事件的信息，包括精确的PC指针信息。利用SPE能力可以用于业务进行LLC Miss，TLB Miss，Remote Access，Long Latency Load等Miss类事件分析，并精确的关联到造成该事件的代码。基于这些信息，用户便可以有针对性地修改自己的程序，降低发生对应事件发生的几率，提高程序处理性能。 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调度事件分析系统资源调度情况，主要包括： 分析CPU核在各个时间点的运行状态，如：Idle、Running，以及各种状态的时长比例。 分析进程/线程在各个时间点的运行状态，如：Wait、Schedule和Running，以及各种状态的时长比例。 分析进程/线程切换情况，包括：切换次数、平均调度延迟时间、最小调度延迟时间和最大延迟时间点。 分析各个进程/线程在不同NUMA节点之间的切换次数。如果切换次数大于基准值，能给出绑核优化建议。 |
| 热点函数分析 | 分析C/C++程序代码，找出性能瓶颈点，获得对应的热点函数，支持通过 火焰图 展示函数的调用关系，给出优化路径。 |
| 锁与等待分析 | 分析 glibc 和开源软件（如MySQL、OpenMP）的锁与等待函数（包括sleep、usleep、mutex、cond、spinlock、rwlock、semaphore等），关联到其归属的进程和调用点，并根据当前已有的优化经验给出优化建议。 |
| Roofline分析 | 帮助用户在给定硬件平台上，分析出应用程序的瓶颈点位置，从而有针对性的进行优化。 |
| AI调优分析 | 使用自研高性能AI调优方案，通过用户自主选择测试用例，对数据库和大数据场景进行自动优化，自动调优后给予最优参数配置，提供复杂场景下参数配置的优化建议。 |


#### Java性能分析工具

Java性能分析是针对基于鲲鹏的服务器上运行的Java程序的性能分析和优化工具，能图形化显示Java程序的堆、线程、锁、垃圾回收等信息，收集热点函数、定位程序瓶颈点，帮助用户采取针对性优化。


**表5 功能特性**

| 任务分类 | 描述 |
| --- | --- |
| 在线分析 | 在线分析包含对于目标JVM和Java程序的双重分析。包括Java虚拟机的内部状态如Heap， GC 活动，线程状态及上层Java程序的性能分析，如调用链分析，热点函数，锁分析，程序线程状态及对象生成分布等。通过Agent的方式在线获取JVM运行数据，进行精确分析。 主要分析结果包含： 概览 在线显示Java虚拟机系统状态。 在线显示JVM的Heap大小、GC活动、Thread数量、Class加载数量和CPU使用率。 线程信息 获取当前JVM中实时的活动线程状态和当前线程转储，图形化显示线程锁定状态，分析线程死锁情况。 内存信息 通过抓取堆 快照 ，分析应用在某时刻堆的直方图分布和支配调用关系，追溯堆内存中各Java存活对象到GC root的引用关系链，帮助定位潜在的内存问题；对比分析不同时刻的堆快照，给出堆使用与分配变化，辅助用户发现堆内存在分配和使用过程中的异常情况。 获取Java堆中各个对象创建的数量及大小，显示相关内存使用情况并实时刷新。 热点信息 通过工具分析的热点方法，热点方法以倒火焰图形式呈现，不同层（如Java调用层、JNI层、Native层、内核层等）的热点方法以不同颜色区分。通过工具展开查看Java方法对应的字节码（非必须）、经JVM JIT编译器生成的机器指令，并查看这些指令的热点分布；对于不能查看的字节码的情形需要给出原因。对给定的入口方法进行调用链采集，收集采集期间的方法调用关系，方法耗时等数据并以树形式展现。 GC信息 用户可以在线统计分析目标JVM进程中发生的GC事件，分析GC原因、GC阶段分布、GC内存回收效果、GC暂停等因素，以定位潜在的GC相关的内存问题、性能瓶颈问题。 IO信息 在线分析应用中的文件IO、Socket IO时延、消耗带宽等数据，找出热点IO操作。 数据库信息 监测和分析数据库连接池。监测数据库连接池连接的情况、帮助用户定位潜在的连接泄漏，对不合适的连接池配置给出优化建议。 分析JDBC热点SQL操作。记录应用中的SQL调用时间、耗时和堆栈跟踪，帮助用户定位耗时最长的热点SQL操作。 分析NoSQL热点操作。记录应用中访问/操作NoSQL数据库调用时间、耗时和堆栈跟踪，帮助用户定位耗时最长的热点NoSQL操作。 HTTP信息 记录应用中的HTTP请求时间和耗时，找出热点HTTP请求。 快照信息 支持在堆、IO、Workload在线分析过程中生成快照，对快照进行比对，辅助用户发现资源、业务相关指标的变化趋势，定位潜在的资源泄漏问题或性能指标恶化问题。 |
| 采样分析 | 通过采样的方式，收集JVM的内部活动/性能事件，通过录制及回放的方式来进行离线分析。这种方式对系统的额外开销很小，对业务影响不大，适用于大型的Java程序。 主要分析结果包括： 概览 显示Java虚拟机系统状态。 通过采样及回放的方式显示JVM的Heap使用情况、GC活动、IO消耗和CPU使用率。 线程转储及锁分析结果 分析程序线程状态及锁。获取采样时间内的线程的状态变化和当前线程转储，根据线程转储图形化地显示线程锁定状态，分析线程死锁情况。 分析估计线程阻塞对象和阻塞时间。 方法采样分析结果 分析Java及native代码中热点函数CPU Cycles的占比及定位。 支持通过火焰图查看热点函数及其调用栈。 内存分析结果 Java对象在Heap中的分配情况，快速定位消耗Heap最多或数量分配最多的对象，发现潜在问题；通过堆栈追踪定位潜在的内存问题。 通过对存留周期长的Java对象进行采样分析，发现潜在的堆内存泄漏点，定位潜在堆内存泄漏问题。 GC分析结果 用户查看Java的GC配置，Heap大小变化以及GC事件发生情况。通过观察Heap变化，GC活动频率和暂停时间，分析和调整当前的GC策略。 IO分析结果 用户可分析目标Java应用中关于文件读写、Socket流量使用情况，以发现IO使用瓶颈；分析应用对文件的读写统计信息： 读写路径、读/写频次、读/写速率、读/写总量、堆栈跟踪（可配）及随时间变化图。 |


#### 系统诊断工具


**表6 任务描述**

| 任务分类 | 描述 |
| --- | --- |
| 内存使用诊断 | 分析应用程序存在的内存使用问题，包括内存未释放和异常释放，并支持关联出调用栈信息和源码。 |
| 内存越界诊断 | 分析应用程序的内存越界，给出越界类型和内存访问信息，并支持关联出调用栈和源码。 |
| 网络IO诊断 | 压测网络，获得网络最大能力，为网络IO性能优化提供基础参考数据；诊断网络，定位网络疑难问题，解决因网络配置和异常而导致的网络IO性能问题。具体包括：网络拨测、丢包诊断（ RDMA 暂不支持）、网络抓包（RDMA暂不支持）、系统负载监控。实现网络数据流统计功能，对IPv4/IPv6协议簇中 UDP 和 TCP 协议数据流、RDMA RoCEv2、IB数据流进行分析，统计不同阶段数据流在不同处理核上执行的情况。 |
| 存储IO诊断 | 压测存储IO，获得存储设备最大能力，为存储IO性能优化提供基础参考数据。支持存储IO压测，获得存储IO最大能力，包括：吞吐量、IOPS、时延。 |


#### 相关概念


**表7 概念说明**

| 概念词 | 说明 |
| --- | --- |
| SO依赖库 | Linux中的SO（Shared Object）文件，其名称类似“libname.so.1.1.1”。 |
| 依赖字典 | 应用迁移工具用来记录鲲鹏平台已经支持的SO文件、软件及获取方式（二进制安装或者源码编译安装）的列表，可下载(https://mirror.iscas.ac.cn/kunpeng/archive/Porting\_Dependency/Packages/)并更新。 |
| 软件构建工程文件 | C/C++/ASM/Fortran/Go常用的软件构建工具Make和CMake对应的构建文件是Makefile和CMakeLists.txt。 |
| IPC | IPC （instructions per cycle）是指CPU每个时钟周期执行的指令总数，它可以反映CPU执行的顺畅程度。例如：对于四发射的鲲鹏920处理器，在流水线满负荷运作的情况下，每个时钟周期能够执行四条指令，IPC为4.0，程序运行时的IPC越接近4.0越好，说明程序充分利用了处理器的特性。 |
| CPU Cycles性能事件 | 它基于事件采样原理，以性能事件为基础，支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。常用于性能瓶颈的查找与热点代码的定位。 CPU周期（CPU Cycles）是默认的性能事件，也叫做clock tick。根据tick 中断 进行采样，即在tick中断内触发采样点，在采样点里判断程序当时的上下文。 |
| USE | USE方法 （utilization、saturation、errors）是针对所有的资源，分析它的使用率、饱和度和错误，以此识别性能瓶颈。 资源：主要指服务器的物理元器件，包括：CPU、内存、存储设备、网络设备等。某些软件也提供类似指标，也可以算作一种资源。 使用率：在规定的时间间隔内，资源用于服务工作的时间百分比。 饱和度：资源不能服务更多额外工作的程度（内核通常有等待队列）。 错误：错误事件的个数。 |
| 在线分析 | 在线分析是一种应用程序动态分析方法，包含对于目标JVM和Java程序的双重分析。它用于分析应用程序在运行时刻，资源消耗在内部的分布、方法调用频度与耗时。该方法常用于辅助应用的性能瓶颈定位和性能调优。 在线分析通过Instrument程序的类和方法，来计算特定代码所有的方法调用情况，可能对性能造成比较大的影响。 |
| 采样分析 | 通过采样的方式，收集JVM的内部活动/性能事件，以录制及回放的方式进行离线分析。采样分析不需要修改应用程序的代码，对性能影响较小，适用于大型的Java程序。因为通过定期采集数据的方式，精确度相对在线分析较低。 |
| 上层应用Workload | Workload分析主要指通过动态修改上层应用代码并埋下hook来收集特定的应用相关性能数据，通过Workload分析，可以收集并定位用户关心的特定代码的工作性能。 |
