Arm Performix CLI 是一款专为 Arm 架构优化的性能分析工具链命令行接口,采用模块化设计实现跨平台性能数据采集与分析。其核心架构包含三个关键层级:
通信层:基于 gRPC 的高效远程过程调用框架,默认使用 9000 端口进行数据传输,9001 端口处理认证流程。这种设计相比传统 REST API 减少约 40% 的网络开销,特别适合高频性能数据采集场景。
执行层:采用主从式架构,本地 CLI 作为控制端,通过 SSH 协议与目标机器上的轻量级代理进程通信。代理程序仅占用 15-20MB 内存,支持自动升降权机制(通过 --enable-on-demand-privilege 参数控制),在执行性能监控时自动获取 root 权限,日常运行保持普通用户权限。
数据层:使用 SQLite 作为本地存储引擎,每个性能分析任务(Run)生成独立的数据库文件,支持通过 apx run export 命令打包为便携式 ZIP 存档。实测显示,一个包含 30 分钟 CPU 微架构性能数据的 Run 文件平均大小为 120-180MB。
关键设计原则:所有敏感操作(如 SSH 认证、性能数据访问)都通过独立的 gRPC 服务端处理,与客户端形成安全边界。这也是为什么配置文件默认路径为
~/.config/apx.yml而非全局位置。
在 CI 环境中部署 Performix CLI 有两种推荐方案:
动态安装方案(适合临时性任务):
bash复制# 示例:GitLab CI 的 before_script 阶段
- curl -LO https://downloads.arm.com/performix/cli/v1.0.0/apx-linux-amd64.tar.gz
- tar xzf apx-linux-amd64.tar.gz
- chmod +x ./apx
- export PATH=$PWD:$PATH
预构建镜像方案(高频使用场景):
dockerfile复制FROM ubuntu:22.04
RUN apt-get update && apt-get install -y openssh-client
ADD https://downloads.arm.com/performix/cli/v1.0.0/apx-linux-amd64 /usr/local/bin/apx
RUN chmod +x /usr/local/bin/apx
两种方案的性能对比:
| 指标 | 动态安装方案 | 预构建镜像方案 |
|---|---|---|
| 任务启动延迟 | +8-12秒 | <1秒 |
| 网络依赖 | 强 | 无 |
| 存储开销 | 临时目录 | 镜像层(约50MB) |
| 适用场景 | 临时测试 | 生产级流水线 |
CI 环境必须使用非交互式认证,推荐采用以下安全模式:
bash复制# 将私钥存入CI系统安全存储(如GitLab CI Variables)
apx target add ci-user@target-server:22 --find-keys
bash复制# 使用CI系统生成的短期令牌
apx target add ci-user@target-server:22:${TEMPORARY_SSH_KEY}
关键安全约束:
auth=password 参数)--host-key-policy accept-new 避免首次连接交互bash复制#!/bin/bash
set -e
# 1. 目标机器准备
apx target prepare --target perf-test-node
# 2. 执行性能分析(示例:CPU微架构分析)
RUN_ID=$(apx recipe run cpu_microarchitecture \
--workload "./benchmark --size 1000" \
--param sample_interval=100 \
--timeout 300 \
--json | jq -r '.run_id')
# 3. 结果导出
apx run export $RUN_ID ./artifacts
bash复制# 基准测试
BASE_RUN=$(apx recipe run memory_bandwidth --workload "stress-ng --vm 4" --json | jq -r '.run_id')
# 优化后测试
OPT_RUN=$(apx recipe run memory_bandwidth --workload "stress-ng --vm 4 --mmap 4096" --json | jq -r '.run_id')
# 生成对比报告
apx run render $BASE_RUN $OPT_RUN --visualization bandwidth_comparison
| 错误代码 | 原因 | 解决方案 |
|---|---|---|
| ERR_SSH_AUTH | 密钥权限过大(>600) | chmod 600 key.pem |
| ERR_GRPC_CONN | 端口冲突 | --server-port 9002 |
| ERR_RECIPE_DEP | 缺少依赖工具 | --deploy-tools-force |
| ERR_TARGET_CPU | 架构不匹配 | 检查目标机是否为Arm架构 |
bash复制apx daemon start --log-level debug --block
bash复制apx target test perf-test-node --debug
bash复制apx recipe ready cpu_microarchitecture --check
Performix 内置 SQLite 引擎支持直接查询性能数据:
bash复制apx render query s1 "SELECT event_name, avg(value) FROM pmu_data WHERE run_id='RUN_001' GROUP BY event_name"
常用分析视图:
pmu_data:原始性能计数器数据system_metrics:CPU/内存等系统指标callgraph:函数调用关系结合 Jupyter Notebook 实现自动化分析:
python复制import pandas as pd
from apx_client import APXClient
apx = APXClient()
data = apx.query("SELECT * FROM pmu_data WHERE event='L1D_CACHE_REFILL'")
df = pd.DataFrame(data)
df.plot(kind='hist', bins=50)
yaml复制# .gitlab-ci.yml 示例
performance_check:
stage: test
script:
- apx recipe run quick_scan --timeout 60
- apx run export $(apx run list -l 1 -q) ./artifacts
artifacts:
paths: ["./artifacts/*.zip"]
expire_in: 1 week
yaml复制full_analysis:
stage: deploy
only: [tags]
script:
- apx recipe run full_profile --workload "make test-all"
- apx run render $(apx run list -l 1 -q) --visualization full_report
通过以下参数避免 CI 资源过载:
bash复制apx daemon start --jobs 2 # 限制并行任务数
apx recipe run ... --timeout 600 # 设置超时
apx run render ... --visualization-param resolution=low # 降低渲染精度
实测数据表明,单个分析任务在不同配置下的资源消耗:
| 配置项 | 低负载模式 | 标准模式 | 高精度模式 |
|---|---|---|---|
| CPU占用峰值 | 35% | 70% | 120% |
| 内存开销(MB) | 150 | 300 | 600 |
| 网络流量(MB/分钟) | 5 | 15 | 30 |
在 Jenkins 等共享环境中,建议采用低负载模式配合 --jobs 1 参数运行。