4. Linux系统压力测试工具集
在STM32MP平台上验证Linux系统的稳定性,单靠功能测试远远不够。系统在长时间高负载、内存紧张、IO密集或调度竞争等条件下是否仍能保持响应、不崩溃、不出现不可恢复的错误,才是可靠性评估的关键。本节围绕五类常用压力测试工具展开:stress-ng、stress、sysbench、lmbench和Phoronix Test Suite,重点说明它们在STM32MP这类嵌入式ARM平台上的安装方式、基本用法以及适用场景。
一、工具定位与选择
这五个工具并非互相替代,而是覆盖不同层次的测试需求。stress和stress-ng属于“系统资源施压器”,通过创建大量进程或线程对CPU、内存、IO、文件系统等施加可控压力;sysbench偏向数据库与系统基准测试,常用于CPU、内存、线程和MySQL/Oracle等场景;lmbench关注底层性能指标,如内存延迟、上下文切换、管道和网络带宽;Phoronix Test Suite则是一个测试框架,可编排大量测试套件并生成对比报告。对于STM32MP平台,建议先用stress-ng做快速压力验证,再用sysbench和lmbench获取量化指标,最后用Phoronix Test Suite做回归对比。
二、stress与stress-ng的安装与使用
在STM32MP的Yocto或OpenSTLinux环境中,stress和stress-ng通常可以通过包管理器安装。若使用OpenSTLinux发行版,可执行:
# 更新软件包索引
apt-get update
# 安装 stress 和 stress-ng
apt-get install -y stress stress-ng
# 验证安装
stress --version
stress-ng --version
stress的基本用法是“指定资源类型 + 并发数 + 持续时间”。例如,让4个CPU工作进程和2个内存分配进程同时运行60秒:
stress --cpu 4 --vm 2 --vm-bytes 64M --timeout 60s
其中--cpu 4表示启动4个CPU压力进程,--vm 2表示启动2个内存压力进程,--vm-bytes 64M表示每个内存进程分配64MB,--timeout 60s表示60秒后自动结束。在STM32MP157这类双核Cortex-A7平台上,CPU并发数建议从2开始,逐步增加到4或8,观察系统是否出现卡顿、OOM或看门狗复位。
stress-ng功能更丰富,支持超过200种压力模式。常用示例:
# CPU 矩阵运算压力,4个worker,运行120秒
stress-ng --cpu 4 --cpu-method matrixprod --timeout 120s
# 内存压力,2个worker,各分配128MB,持续90秒
stress-ng --vm 2 --vm-bytes 128M --vm-keep --timeout 90s
# IO 压力,4个worker,同步写,持续60秒
stress-ng --io 4 --hdd 2 --hdd-bytes 32M --timeout 60s
# 综合压力,同时施加CPU、内存、IO
stress-ng --cpu 2 --vm 1 --io 2 --timeout 180s --metrics-brief
--metrics-brief会在结束时输出每个stress-ng进程的吞吐量、延迟等统计信息,便于判断系统在压力下的实际表现。若测试过程中系统失去响应或出现内核Oops,说明当前负载已超出平台承受能力,需要降低并发数或优化内核配置。
三、sysbench的安装与基准测试
sysbench在嵌入式平台上的安装稍复杂,通常需要从源码编译。以sysbench 1.0为例:
# 安装编译依赖
apt-get install -y build-essential libtool pkg-config libaio-dev libmysqlclient-dev
# 下载并编译
wget https://github.com/akopytov/sysbench/archive/refs/tags/1.0.20.tar.gz
tar -xzf 1.0.20.tar.gz
cd sysbench-1.0.20
./autogen.sh
./configure --without-mysql
make -j2
make install
若不需要数据库测试,--without-mysql可减少依赖。安装完成后,常用CPU和内存测试命令如下:
# CPU 素数计算测试,4线程,计算10000以内的素数
sysbench cpu --cpu-max-prime=10000 --threads=4 run
# 内存顺序读写测试,块大小1K,总传输量1G
sysbench memory --memory-block-size=1K --memory-total-size=1G --threads=2 run
# 线程调度测试,8线程,互斥锁
sysbench threads --threads=8 --thread-yields=1000 run
输出中重点关注events per second(每秒事件数)、total time(总耗时)和latency(延迟)。例如CPU测试中,若4线程的events per second明显低于2线程的两倍,说明存在调度瓶颈或散热降频。建议在STM32MP平台上记录常温与满载温度下的两组数据,用于判断热设计是否影响性能稳定性。
四、lmbench的安装与底层指标测量
lmbench适合测量内存延迟、上下文切换、管道和网络等底层指标。其安装方式为:
# 获取源码
git clone https://github.com/Intel-benchmarks/lmbench.git
cd lmbench
make
# 运行基础测试
cd bin/arm64-linux-gnu
./lat_ctx -s 0 2
./lat_mem_rd 64 128
./bw_pipe
./lat_proc fork
lat_ctx -s 0 2测量2个进程间的上下文切换延迟,lat_mem_rd 64 128测量64MB到128MB范围的内存读取延迟,bw_pipe测量管道带宽,lat_proc fork测量进程创建开销。这些数据对评估STM32MP的实时性和调度开销非常有用。例如,若上下文切换延迟超过50微秒,说明内核调度或中断处理可能存在优化空间。
五、Phoronix Test Suite的安装与编排
Phoronix Test Suite(PTS)是一个测试编排框架,可自动下载、运行和对比测试。在STM32MP上安装:
# 安装依赖
apt-get install -y php-cli php-xml php-gd
# 下载并安装 PTS
wget https://phoronix-test-suite.com/releases/phoronix-test-suite-10.8.4.tar.gz
tar -xzf phoronix-test-suite-10.8.4.tar.gz
cd phoronix-test-suite-10.8.4
./install.sh
# 查看可用测试
phoronix-test-suite list-available-suites
# 运行 CPU 测试套件
phoronix-test-suite benchmark pts/cpu
# 运行内存测试
phoronix-test-suite benchmark pts/memory
PTS的优势在于可重复性和对比能力。每次测试会生成结果文件,通过phoronix-test-suite result-file-to-text可导出文本报告。对于STM32MP的可靠性验证,建议固定内核版本、频率策略和散热条件,定期运行同一套件,观察性能是否随内核更新或温度变化而漂移。
六、实践建议与结果判读
在STM32MP平台上开展压力测试时,建议遵循“先轻后重、先短后长、先单后混”的原则。先用stress-ng做5分钟单资源压力,确认系统不崩溃;再逐步增加并发和时长,最终进行30分钟以上的混合压力。测试过程中通过top、vmstat、dmesg和cat /sys/class/thermal/thermal_zone0/temp观察CPU占用、内存变化、内核日志和温度。若出现OOM Killer日志、内核Oops、看门狗复位或温度超过85°C,应降低负载或优化散热与内核参数。
综合来看,stress-ng和stress适合快速施压验证,sysbench和lmbench适合获取量化基准,Phoronix Test Suite适合长期回归对比。五者配合使用,才能较完整地评估STM32MP Linux系统在压力下的可靠性与稳定性。