1. 测试环境

ARM64 目标平台

Rockchip RK3588s

  • CPU 架构:ARM Cortex-A55 × 4 + A76 × 4 (big.LITTLE)
  • CPU 特性:A55 顺序执行 / A76 乱序执行
  • 核心数:8 核 (4+4)
  • 内存:3.8 GB DDR
  • 操作系统:Linux 5.10.209 (aarch64)
  • Go 工具链:交叉编译 CGO_ENABLED=0
  • 测试方式:SSH 远程执行 (root@192.168.3.230)
x86 基准平台

Intel Core i5-13500H

  • CPU 架构:Raptor Lake (Golden Cove P-core)
  • CPU 特性:乱序执行 / 超线程 / AVX2
  • 核心数:12 核 (4P+8E) / 16 逻辑线程
  • 内存:32 GB DDR5
  • 操作系统:Windows 11 (amd64)
  • Go 工具链:go1.26.4 windows/amd64
  • 测试方式:本地 PowerShell 直接执行

架构差异说明:Cortex-A55 为顺序执行核心,IPC 和分支预测能力显著弱于 i5-13500H 的 Golden Cove 性能核。因此 2–5 倍的纯 CPU 性能差距属于正常范围。本报告聚焦于 EdgeX 工业网关在两类硬件上的 SLA 达标能力和实际部署表现,而非纯 CPU 性能竞赛。

测试矩阵

测试项 测试用例 ARM64 时长 x86 时长 关键指标
Q3 万 Tag 压测TestQ3_TenThousandTagBenchmark70.18s73.90sP95 lag, 吞吐量, 内存漂移
G007 设备吞吐量TestG007_DeviceThroughputBenchmark40.02s40.24s设备/秒, P95 lag, 背压拒绝
微基准测试Benchmark* (6 项 × 3 轮)~20s65.59sns/op, B/op, allocs/op
Core 单元测试./internal/core/... -short~30s~40sPASS/FAIL 计数
Integration 测试./internal/integration/... -short~15s5.71sPASS/FAIL/SKIP 计数
Driver 测试./internal/driver/... -short~10s~120sPASS/FAIL 计数

2. Q3 万 Tag 压测对比

验证 ScanEngine + ShadowCore + DataPipeline 在 100 设备 × 100 点位 = 10,000 Tag、1s Scan Class 规模下的调度 SLA 和内存稳定性。

9,890 pts/s ARM64 吞吐量
8,988 pts/s x86 吞吐量
0 两平台失败任务
< 2 ms 两平台 P95 lag (SLA ≤ 100ms ✅)
指标 SLA 目标 ARM64 (Cortex-A55) x86 (i5-13500H) 对比
任务执行数5,9345,393ARM +10.0%
任务成功数100%5,9345,393✅ 0 失败
任务失败数000
Scan lag avg0.58 ms0.65 msARM -10.8%
Scan lag P95≤ 100 ms1.10 ms0.99 ms近乎持平
Scan lag max3.04 ms53.80 msARM 稳定性更优
Scan drift avg0.00 ms0.00 ms
Miss deadline000
Pipeline 吞吐量9,890 pts/s8,988 pts/sARM +10.0%
内存漂移 (heap)< 5%-8.28%-3.89%✅ 均通过
GC pause max< 20 ms0.22 ms0.58 ms
Goroutine 泄漏140→3140→3✅ 无泄漏

关键发现:ARM64 在 Q3 压测中表现出略优于 x86 的吞吐量(9890 vs 8988 pts/s),且 max lag 稳定性更优(3.04ms vs 53.80ms)。这主要归因于:(1) RK3588s 的 4×A76 大核在内存密集型操作中表现优异;(2) Linux 调度器相比 Windows 在处理大量 goroutine 时延迟抖动更低;(3) 零 I/O 的 mock driver 场景下,纯 CPU 调度受 OS 开销影响更大。两平台均远超 SLA 要求(P95 ≤ 100ms,实际 < 2ms)。

图 1: Q3 万 Tag 压测 — 吞吐量与延迟双平台对比

3. G007 设备吞吐量对比

验证 §2.5.5 调度吞吐量 ≥ 950 devices/sec。1000 设备、1s 扫描间隔、mock driver(零 I/O)。

996 dev/s ARM64 吞吐量 (≥950 ✅)
972 dev/s x86 吞吐量 (≥950 ✅)
0 两平台失败任务
< 2 ms 两平台 P95 lag (SLA 达标)
指标SLA 目标ARM64 (Cortex-A55)x86 (i5-13500H)对比
任务执行数29,87229,158ARM +2.4%
任务成功数100%29,87229,158✅ 0 失败
吞吐量≥ 950 dev/s996 dev/s972 dev/sARM +2.5%
P95 lag1.19 ms1.76 msARM -32.4%
Miss deadline000
背压拒绝000
Goroutine无泄漏1040→21040→2

分析:G007 场景下两平台性能高度接近(差异仅 2.5%),均远超 950 devices/s 的 SLA 门禁。这表明在高并发、轻负载的调度密集型场景中,ARM64 的 Go 运行时表现与 x86 相当。1000 设备的 goroutine 调度开销在两类平台上均被有效控制。

图 2: G007 设备吞吐量 — 双平台对比

4. 微基准测试对比

ShadowCore 和 ScanEngine 热路径函数的微基准测试,每项 3 轮取最优值,衡量 ns/op、B/op、allocs/op。

BenchmarkARM64 (ns/op)x86 (ns/op)ARM/x86 比率ARM64 (allocs)x86 (allocs)
LoadPoints_Pooled183.6183.71.00×00
ApplyCollectToShadow_Pooled58,58461,5900.95×1616
WriteShadowDevice6,4947,6650.85×1414
WriteShadowDevice_MultiPoint26,14425,3901.03×4545
GetShadowDevice816.7591.11.38×22
NotifySubscribers6,2607,0200.89×1414
GetShadowDevice_COW373.4288.51.29×11

关键发现:ARM64 在写路径(WriteShadowDevice、NotifySubscribers)上表现优于 x86(0.85–0.89×),而 x86 在读路径(GetShadowDevice、GetShadowDevice_COW)上表现更优(1.29–1.38×)。这符合预期:写路径受内存延迟影响更大,ARM64 的紧密耦合内存架构在此场景下具有优势;读路径则受益于 x86 的乱序执行和更高的单核 IPC。内存分配次数(allocs/op)在两平台上完全一致,证明 Go 编译器交叉编译的代码质量一致。

图 3: 微基准性能对比 — 归一化到 x86 (越低越好)

5. 单元测试与集成测试通过率

两平台运行完全相同的测试二进制(ARM64 为交叉编译产物),验证代码在不同架构上的行为一致性。

ARM64 测试结果

全部通过

  • Core 单元测试:ALL PASS
  • Integration 测试:14 PASS · 5 SKIP
  • Driver 测试:ALL PASS
  • 总测试数:~150+ tests
  • 失败数:0
  • Panic/Crash:
x86 测试结果

全部通过

  • Core 单元测试:ALL PASS
  • Integration 测试:14 PASS · 5 SKIP
  • Driver 测试:ALL PASS
  • 总测试数:~150+ tests
  • 失败数:0
  • Panic/Crash:

结论:两平台测试结果完全一致 — 所有核心测试通过,5 个集成测试正确跳过(需要真实硬件设备的测试在 short 模式下被跳过),无 panic、无崩溃、无 goroutine 泄漏。这证明 EdgeX 代码库在 ARM64 和 x86 架构上具有完全的行为一致性

跳过的集成测试 (expected skips)

测试用例跳过原因
TestModbusPLC_PressureMultiSlaveIsolation需要真实 Modbus PLC 硬件
TestModbusProtocol_CBRecoveryCycles需要真实 Modbus 设备
TestOpcuaProtocol_SessionFramework需要 OPC UA 服务器
TestS7Protocol_SessionFramework需要 Siemens S7 PLC
TestSoak_ScanEngineShortGateshort 模式下跳过

6. 综合分析与结论

6.1 性能对比总结

测试类别ARM64 表现x86 表现关键差异
Q3 万 Tag 压测9890 pts/s8988 pts/sARM 吞吐量 +10%,max lag 稳定性更优
G007 设备吞吐量996 dev/s972 dev/s差异仅 2.5%,近乎持平
写路径微基准6,260–6,494 ns7,020–7,665 nsARM 快 11–15%
读路径微基准374–817 ns289–591 nsx86 快 29–38%
单元/集成测试全部通过全部通过完全一致
SLA 达标全部达标全部达标两平台均远超 SLA 要求

6.2 架构差异分析

写路径优势

ARM64

ARM64 在 WriteShadowDevice、NotifySubscribers 等写操作上表现更优(0.85–0.89×)。内存写入延迟在 ARM64 的紧密耦合内存架构中更低;Linux 内核的写操作缓存策略相比 Windows 更高效;big.LITTLE 架构的 A76 大核在内存带宽密集型操作中表现优异。

读路径优势

x86

x86 在 GetShadowDevice、GetShadowDevice_COW 等读操作上表现更优(1.29–1.38×)。Golden Cove P-core 的单核 IPC 显著高于 Cortex-A55/A76;乱序执行和更好的分支预测器在读路径的指针追踪模式中发挥优势;更大的 L3 缓存(18MB)减少了读操作的 cache miss。

6.3 发布门禁评估

门禁要求ARM64 状态x86 状态
稳定性0 panic / 0 crash / 无 goroutine 泄漏✅ PASS✅ PASS
工业级验证全部单元测试通过✅ PASS✅ PASS
性能Q3 P95 ≤ 100ms, G007 ≥ 950 dev/s✅ PASS✅ PASS
轻量化内存漂移 < 5%, GC pause < 20ms✅ PASS✅ PASS

6.4 部署建议

ARM64 工业网关部署完全可行。RK3588s (Cortex-A55 + A76) 在 EdgeX 的所有核心场景中均满足 SLA 要求,且在实际吞吐量上甚至略优于开发机 i5-13500H。考虑到工业网关的典型负载(真实 I/O 等待 >> CPU 计算),ARM64 的性能裕量充足。

对于纯计算密集型边缘规则(如复杂表达式求值),建议评估实际规则复杂度后决定是否需要在 ARM64 上增加 CPU 资源或优化规则表达式。对于I/O 密集型采集场景(Modbus、OPC UA、BACnet 等),ARM64 平台是性价比极高的选择。

7. 测试复现命令

ARM64 交叉编译

# 交叉编译测试二进制
$env:GOOS='linux'; $env:GOARCH='arm64'; $env:CGO_ENABLED='0'
go test -tags=bench -c ./internal/core/ -o edgex-bench-arm64.test
go test -c ./internal/core/ -o edgex-core-arm64.test
go test -c ./internal/integration/ -o edgex-integration-arm64.test
go test -c ./internal/driver/ -o edgex-driver-arm64.test

# 推送到 ARM64 目标板
scp *.test root@192.168.3.230:/tmp/edgex-tests/

# SSH 到目标板执行
ssh root@192.168.3.230
Q3_BENCH_DURATION=60 /tmp/edgex-tests/edgex-bench-arm64.test -test.run TestQ3_TenThousandTagBenchmark -test.v
G007_BENCH_DURATION=30 /tmp/edgex-tests/edgex-bench-arm64.test -test.run TestG007_DeviceThroughputBenchmark -test.v

x86 本地执行

# Q3 万 Tag 压测
$env:Q3_BENCH_DURATION="60"
go test ./internal/core/ -run TestQ3_TenThousandTagBenchmark -count=1 -timeout=15m -v

# G007 设备吞吐量
$env:G007_BENCH_DURATION="30"
go test ./internal/core/ -run TestG007_DeviceThroughputBenchmark -count=1 -timeout=5m -v

# 微基准
go test ./internal/core/ -run '^$' -bench 'Benchmark(Write|Get|Notify|Apply|Load)' -benchmem -benchtime=2s -count=3

# 完整测试
go test ./internal/core/... -short -count=1 -timeout=10m
go test ./internal/integration/... -short -count=1 -timeout=10m
go test ./internal/driver/... -short -count=1 -timeout=10m