Cyclictest是一个高精度的测试程序,Cyclictest 是 rt-tests 下的一个测试工具,也是rt-tests 下使用最广泛的测试工具,一般主要用来测试使用内核的延迟,从而判断内核的实时性。
安装Cyclictest
# 安装需要的numa库
# apt指令
sudo apt install libnuma-dev
# yum指令
yum install numactl-devel
git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
cd rt-tests
make
sudo make install
Cyclictest计算延时的原理
程序会记录进程睡眠的开始时间t1而进程的实际睡眠时间时t2,但程序真正唤醒并运行的时间时t3。所以是t3-t2-t1得出的结果即为延时。
Cyclictest的使用
sudo cyclictest -m -S -p 80 -i 1000 -d 0
options | value |
-a N | 在处理器N上运行 |
-A USEC | 将线程唤醒对齐到特定的偏移量USEC |
-b USEC | 当延时>USEC时 发送中断 |
-c CLOCK | 选择时钟 0 = CLOCK_MONOTONIC (默认) 1 = CLOCK_REALTIME |
-d DIST | 线程间隔的距离DIST,默认为500 |
-D | 指定运行时常,附加m、h、d 来指定分钟、小时、天 |
-F | 在path上创建一个命名管道并向其写入统计信息 |
-h | 运行后将延迟直方图转储到标准输出 |
-H | 与-h相同,只是增加了一个汇总列 |
-i INTV | 线程的基本间隔INTV。默认为1000us |
-l LOOPS | 循环次数LOOPS,默认=0(无限) |
-m | 锁定当前和未来的内存分配 |
-M | 延迟更新屏幕,直到新的最大延迟被击中。适用于低带宽 |
-N | 使用单位为ns 默认为us |
-o RED | 示波器模式,减少RED输出的冗余 |
-p PRIO | 设置线程优先级为PRIO |
-q | 仅在退出时打印 |
-r | 使用相对计时器而不是绝对计时器 |
-t N | 使用CPU的数量,默认为1 |
-S | 标准SMP测试:选项-a -t和所有线程的相同优先级 |
输出
输出 | 含义 |
T | 0 序号为0的线程 |
P | 80 线程优先级为800 |
I | 1000 时间间隔为1000微秒(us) |
C | 25625计数器。线程的时间间隔每达到一次,计数器加1 |
Min | 最小时延(us) |
Act | 最近一次的时延(us) |
Avg | 平均时延(us) |
Max | 最大时延(us) |