以下是Cyclictest工具的安装方法:
基于包管理软件安装
-
Debian/Ubuntu系统:可以直接使用
apt-get install rt-tests
来安装cyclictest
-
。
-
CentOS系统:可以使用
yum install numactl-devel
安装依赖包 - ,然后通过
yum install rt-tests
安装cyclictest-
。
基于git源码安装
-
下载源码:
-
可以通过命令
git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
克隆Cyclictest的Git仓库
-
-
-
。
-
也可以从存档中获取已发布的tarball
-
-
。
-
-
进入源码目录:执行
cd rt-tests
-
。
-
创建分支(可选):可以创建一个分支,例如
git branch testing
,然后切换到该分支git checkout testing
-
。
-
切换到稳定分支(可选):可以执行
git checkout origin/stable/v1.0
切换到稳定分支 -
。
-
安装依赖:需要安装
libnuma-dev
包(Debian/Ubuntu系统) - 或
numactl-devel
包(CentOS系统) -
。
-
编译:在源目录下运行
make
-
。
-
安装:执行
make install
将Cyclictest安装到系统路径中
-
。
注意事项
-
确保在安装和运行Cyclictest时具有相应的权限,例如使用
sudo
-
。
-
如果在编译过程中遇到问题,可以根据报错信息安装缺失的依赖
Preempt-RT的测试方法和工具的介绍:
测试工具
-
cyclictest:这是PREEMPT_RT补丁的作者编写的延迟测量工具,也是目前最常用的实时性测试工具
。它的工作原理是启动一个主线程,主线程会启动几个实时测量线程,这些线程会在设定的时间间隔后定期唤醒,记录预期和实际唤醒时间的时差,并将结果传递给主进程,测试结束后输出汇总结果
-
。
-
stress-ng:用于模拟系统负载的工具,通过模拟CPU、内存、I/O等多方面的压力,可以对系统进行压力测试
-
。
测试方法
-
空载测试:在无负载情况下运行cyclictest,观察系统延迟情况。例如,使用命令
cyclictest -p 99 -t 1 -d 100 -i 1000 -D 24h -m
,其中-p 99
表示设置线程优先级为99,-t 1
表示运行一个线程,-d 100
表示延迟时间间隔为100微秒,-i 1000
表示测试间隔为1000微秒,-D 24h
表示测试持续时间为24小时,-m
表示显示每个CPU的延迟
-
。
-
满载测试:通过stress-ng工具模拟CPU、内存、I/O等多方面的满载压力,再次运行cyclictest进行测试。例如,先运行
stress-ng --cpu 4 --cpu-method all --io 4 --vm 50 -d 5 --fork 4 &
模拟负载,再运行cyclictest -p 99 -t 1 -d 100 -i 1000 -D 24h -m
进行测试 -
。
-
隔离核心测试:将实时任务锁定至独立核心,避免非实时进程干扰,通过设置CPU核心绑定与中断隔离来实现。例如,使用命令
cyclictest -m -a 1 -p 99 -t 1 -i 1000r --mainaffinity=0 -D 2h
,其中--mainaffinity=0
表示将测试线程绑定到CPU0上
-
。
测试结果分析
-
延迟数据:cyclictest会输出最小延迟、平均延迟、最大延迟等数据。例如,在空载测试中,某系统的测试结果显示最大延迟为34微秒
;在满载测试中,最大延迟为167微秒
-
。
-
延迟分布:通过绘制延迟分布直方图,可以更直观地了解延迟的分布情况。例如,在隔离CPU中运行的测评结果中,周期延迟的最大值为17微秒,最小值为1微秒,平均值为1微秒,其中1~4微秒范围占了99.997326%,1~8微秒范围占了99.999969%
- 。