Add SystemPerformanceInfo for compute platform telemetry#251
Add SystemPerformanceInfo for compute platform telemetry#251
Conversation
Add new protocol messages to support detailed performance monitoring across both iMX6 (X3) and Jetson Orin NX (X3 Ultra/X7) platforms. New messages: CpuCoreLoad, GpuInfo, DlaInfo, MemoryInfo, ThermalZone, VideoCodecInfo, PowerRailInfo, and a composite SystemPerformanceInfo with corresponding SystemPerformanceInfoTel telemetry wrapper. Deprecates CPUInfo, CPUTemperature in favor of the new messages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new composite telemetry schema for system performance monitoring across compute platforms (iMX6 and Jetson Orin NX), introducing a richer replacement for legacy CPU-only telemetry while keeping backward compatibility.
Changes:
- Added
SystemPerformanceInfoand supporting messages/enums tomessage_formats.proto(CPU cores, GPU/DLA, memory, thermals, power rails, video codec, queue loads). - Added
SystemPerformanceInfoTelwrapper totelemetry.proto. - Marked
CPUInfo/CPUTemperatureandCPUInfoTelas deprecated via comments pointing to the new message(s).
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| protobuf_definitions/telemetry.proto | Adds SystemPerformanceInfoTel and marks CPUInfoTel as deprecated in comments. |
| protobuf_definitions/message_formats.proto | Introduces SystemPerformanceInfo and related component messages; annotates legacy CPU messages as deprecated. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Capitalize "cpu" to "CPU" in telemetry deprecation comment for consistency with existing naming conventions. - Rename cpu_load_average to cpu_utilization to avoid confusion with Linux load average (which is unbounded and reported as 1/5/15 min). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tegrastats and jtop only expose active/inactive status and clock frequency for NVENC/NVDEC, not utilization percentages. Updated fields from load floats to bool active + frequency pairs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Latest changes summaryDlaInfo
PowerRailInfo removal
New queue load fields
|
- Remove PowerRailInfo message (no INA sensors on current hardware) - Use reserved 7 to prevent field reuse in SystemPerformanceInfo - Add bool enabled to DlaInfo (clk_enable_count based) - Add camera/overlay/position_observer queue load fields (12-14) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PowerRailInfo was never in a public release, so no need to reserve the field number. Renumber remaining fields sequentially from 7. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add nvjpg_active/nvjpg_frequency_mhz (field 5-6) for JPEG engine - Add vic_active/vic_frequency_mhz (field 7-8) for Video Image Compositor - Update DlaInfo.enabled comment to reflect runtime_status approach Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reports the DLA Falcon microcontroller clock frequency alongside the core clock. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use inline shell to sanitize branch names instead of the removed third-party action. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GPU temperature is not available as a separate reading on Jetson; thermal zone data already covers this via ThermalZone messages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Only junction temperature is currently available. Remove unused zone IDs (CPU, GPU, SOC, BOARD) and assign TJ = 1. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated 8 comments.
Comments suppressed due to low confidence (1)
protobuf_definitions/message_formats.proto:1294
- The
CPUInfoheader says it includes "memory usage", but the message only reportsmemory_bus_load(plus CPU + queue loads). Consider adjusting the description to "memory bus load" (or add actual RAM/swap usage fields if that’s what consumers expect) so the deprecation guidance is clear.
// CPU information (deprecated, use SystemPerformanceInfo instead).
//
// Contains information about the CPU load and memory usage of the drone.
message CPUInfo {
float cpu_load = 1; // CPU load (0..1).
float memory_bus_load = 2; // Memory bus load (0..1).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Remove swap_total_bytes and swap_used_bytes from MemoryInfo since the system does not use swap. Add THERMAL_ZONE_ID_CANISTER to ThermalZoneId. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- DlaInfo.enabled: remove implementation detail (runtime_status ref) - VideoCodecInfo field comment: 'load' -> 'status' (has flags, not load) - SystemPerformanceInfoTel: remove stale 'power rails' reference Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add vpu_active, vpu_frequency_mhz, vpu_codec_irq_count, and vpu_jpg_irq_count fields for CODA VPU monitoring on i.MX platforms. Existing Jetson fields unchanged (field numbers 1-8 preserved). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
protobuf_definitions/message_formats.proto:1294
CPUInfois documented as containing "CPU load and memory usage", but the message only hascpu_load,memory_bus_load, and queue loads (no RAM usage fields). Since this comment was touched in this PR (deprecation note), please update the remaining text to match the actual fields (e.g., "CPU load, memory bus load, and queue loads").
// CPU information (deprecated, use SystemPerformanceInfo instead).
//
// Contains information about the CPU load and memory usage of the drone.
message CPUInfo {
float cpu_load = 1; // CPU load (0..1).
float memory_bus_load = 2; // Memory bus load (0..1).
.github/workflows/ci-dotnet.yaml:30
- The sanitization can produce an empty
$SANITIZED(e.g., a branch name like_becomes-then gets trimmed). That would make--version-suffixstart with a dot (".123"), which is not a valid SemVer/NuGet pre-release label and will breakdotnet pack. Add a fallback when$SANITIZEDis empty (e.g., default tobranch/ci) before writing the output.
run: |
BRANCH="${GITHUB_REF_NAME}"
SANITIZED=$(echo "$BRANCH" | sed 's/[^a-zA-Z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//;s/-$//' | tr '[:upper:]' '[:lower:]' | cut -c1-63)
echo "sanitized-branch-name=$SANITIZED" >> "$GITHUB_OUTPUT"
- name: Build project and generate NuGet package
run: |
dotnet pack Blueye.Protocol.Protobuf.csproj --version-suffix "${{ steps.branches.outputs.sanitized-branch-name }}.$GITHUB_RUN_NUMBER" -c Release -o out
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.



Summary
Adds comprehensive system performance telemetry to support monitoring across both iMX6 (X3) and Jetson Orin NX 16 GB (X3 Ultra / X7) platforms — similar to what jtop, htop, and tegrastats provide.
New messages in message_formats.proto
PowerRailInfo — removed; INA3221 driver loaded but no devices bound on current carrier board.New in telemetry.proto
Deprecations
Both are kept intact for backward compatibility.
Wire size estimates
Jetson Orin NX (all fields populated: 8 cores, GPU, 2 DLA engines, 2 thermal zones):
iMX6 (4 cores, 1 thermal zone, no GPU/DLA/codec): ~133 B
At 1-10 Hz publish rates this is well under 5 KB/s on the wire.
Design decisions