# perfanalysis-board **Repository Path**: hanhai-ide/perfanalysis-board ## Basic Information - **Project Name**: perfanalysis-board - **Description**: 来自黑芝麻智能科技(bstai)瀚海(hanhai)IDE的性能分析工具单板侧服务 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: release-open-source - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-26 - **Last Updated**: 2025-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BSTPerfController 单板上管理perf进程,实现采集性能数据功能 ## protobuf接口说明 ### 功能ID(FunctionID) ```protobuf enum TcbMessageType { //所有的发送都是以UiMessageS开头的,返回都是以UiMessageR开头的 RunPerfRecord = 1; // 开始 CancelAnalysis = 2; StartUsageTransfer = 3; //开始传输性能数据 StopUsageTransfer = 4; //停止传输性能数据 ReportToFront = 5; //数据返回接口 TotalUsage = 6; //返回系统使用情况命令 SystemUsageR的MessageID } ``` ### 开始采样命令 ```protobuf message RunPerfRecordS { required int32 RunMode = 1; // 运行模式选择: // 1.特定进程(调用链+硬件事件) // 2.特定进程(硬件事件) // 3.无特定进程(硬件事件) optional int32 RunType = 2; // 运行模式为1时的类型选择:1.CMD 2.PID optional int32 RunPid = 3; // 被采样PID optional string RunCMD = 4; // 被采样可执行程序 optional string RunFreq = 5; // 模式1时第二次采样频率 optional int32 RunCallchainTime = 6; // 模式1时第二次采样时间 optional string RunAdvancedSettings = 7; // 高级设置 } ``` 高级设置以json格式发送,主要包含第一次采样频率、使能的事件列表、环境变量、第一次采样频率/时间等配置内容: ```json { "firstAnalysis" : { "frequency": 1000, "duration": 10 }, "environmentVariables": [ { "key": "", "value": "" }, { "key": "", "value": "" } ], "eventAnalysis": { "frequency": 100, "duration": 10 }, "checkedEvents": { "system": ["cache-misses", "branch-misses"], "process": ["cache-misses", "branch-misses"] }, "containSoftwareEvents": true } ``` - `firstAnalysis`: 存放模式1时第一次采样配置,包括采样频率与采样时长 - `environmentVariables`: 保存程序执行时需要另外添加的环境变量 - `checkedEvents`: 前端界面勾选的事件列表,当为空时表示不对硬件事件进行采样 - `eventAnalysis`: 保存事件采样配置,包括采样频率与采样时长 - `containSoftwareEvents`: 是否收集调用链数据,用于区别模式1和模式2、3 ### 实时数据开始命令 ```protobuf message StartUsageTransferS { required int32 Frequency = 1; //实时数据刷新频率/返回数据频率 } ``` - 数据包含两层含义: - 当初次连接时,设置当前刷新频率 - 当已连接时,修改当前刷新频率 ### 数据返回接口 ```protobuf message ReportToFrontR { required int32 JsonType = 1; // 当前返回数据包类型: // 1.模式1第一次完成 // 2.模式1第二次完成 // 3.模式2完成 // 4.模式3完成 optional string MaxPath = 2; // 模式1第二次完成后,第一次采样完成返回的路径 optional string FreqPath = 3; // 模式1第二次完成后,第二次采样完成返回的路径 optional string UsagePath = 4; // 模式1第二次完成、模式2/3完成后,返回的系统资源、事件采样数据保存路径 } ``` ### 实时数据返回接口 ```protobuf message SystemUsageR { required int32 IsRunning = 1; // 实时数据收集进程是否仍在运行 required string JsonResult = 2; // 实时数据json字符串 } ``` 实时数据在`JsonResult`字段中发送回前端: ```json { "system": [ { "name": "CPU", "unit": "%", "product": ["CPU0", "CPU1"], "series": [92.5, 0.3] }, { "name": "Memory", "unit": "%", "product": ["Usage"], "series": [15] } ], "events": [] } ``` - `time`: 当前时间点 - `data`: 用一个数组保存数据: - `name`: 数据名称 - `unit`: 数据单位 - `system`: 系统数据 - `process`: 特定进程数据