目录
- 使用版本
- 问题
- 编译 numactl
- 编译 cyclictest
- 使用
- 参考
cyclictest 主要是用于测试系统延时,进而判断系统的实时性
使用版本
rt-tests-2.6.tar.gz
numactl v2.0.16
问题
编译时,需要先编译 numactl
,不然会有以下报错:
arm-linux-gnueabihf-gcc -D VERSION=2.6 -c src/cyclictest/cyclictest.c -Wall -Wno-nonnull -Wextra -O2 -g -D_GNU_SOURCE -Isrc/include -o bld/cyclictest.o
In file included from src/cyclictest/cyclictest.c:33:
src/cyclictest/rt_numa.h:18:10: fatal error: numa.h: 没有那个文件或目录#include <numa.h>^~~~~~~~
compilation terminated.
Makefile:106: recipe for target 'bld/cyclictest.o' failed
make: *** [bld/cyclictest.o] Error 1
编译 numactl
文件下载 https://github.com/numactl/numactl/tree/v2.0.16
编译命令:
./autogen.sh
./configure CC=arm-linux-gnueabihf-gcc --host=arm prefix=~/git/numactl-2.0.16/build
make install
这是主要用到编译生成的 lib
及 include
里的文件
编译 cyclictest
下载文件 :
https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git/
打开 Makefile
文件:
在 RTTESTLIB
后面加上 -L/home/XXX/git/numactl-2.0.16/build/lib
在 CPPFLAGS
后面加上 -I/home/XXX/git/numactl-2.0.16/build/include
RTTESTLIB = -lrttest -L$(OBJDIR) -L/home/XXX/git/numactl-2.0.16/build/lib
CPPFLAGS += -D_GNU_SOURCE -Isrc/include -I/home/XXX/git/numactl-2.0.16/build/include
然后使用编译命令
make CROSS_COMPILE=arm-linux-gnueabihf- LDFLAGS=-static
即可在目录中看到 cyclictest
使用
cyclictest V 2.60
Usage:
cyclictest <options>-a [CPUSET] --affinity Run thread #N on processor #N, if possible, or if CPUSETgiven, pin threads to that set of processors in round-robin order. E.g. -a 2 pins all threads to CPU 2,but -a 3-5,0 -t 5 will run the first and fifththreads on CPU (0),thread #2 on CPU 3, thread #3on CPU 4, and thread #5 on CPU 5.
-A USEC --aligned=USEC align thread wakeups to a specific offset
-b USEC --breaktrace=USEC send break trace command when latency > USEC
-c CLOCK --clock=CLOCK select clock0 = CLOCK_MONOTONIC (default)1 = CLOCK_REALTIME--default-system Don't attempt to tune the system from cyclictest.Power management is not suppressed.This might give poorer results, but will allow youto discover if you need to tune the system
-d DIST --distance=DIST distance of thread intervals in us, default=500
-D --duration=TIME specify a length for the test run.Append 'm', 'h', or 'd' to specify minutes, hours or days.
-F --fifo=<path> create a named pipe at path and write stats to it
-h --histogram=US dump a latency histogram to stdout after the runUS is the max latency time to be tracked in microsecondsThis option runs all threads at the same priority.
-H --histofall=US same as -h except with an additional summary column--histfile=<path> dump the latency histogram to <path> instead of stdout
-i INTV --interval=INTV base interval of thread in us default=1000--json=FILENAME write final results into FILENAME, JSON formatted--laptop Save battery when running cyclictestThis will give you poorer realtime resultsbut will not drain your battery so quickly--latency=PM_QOS power management latency target valueThis value is written to /dev/cpu_dma_latencyand affects c-states. The default is 0
-l LOOPS --loops=LOOPS number of loops: default=0(endless)--mainaffinity=CPUSETRun the main thread on CPU #N. This only affectsthe main thread and not the measurement threads
-m --mlockall lock current and future memory allocations
-M --refresh_on_max delay updating the screen until a new maxlatency is hit. Useful for low bandwidth.
-N --nsecs print results in ns instead of us (default us)
-o RED --oscope=RED oscilloscope mode, reduce verbose output by RED
-p PRIO --priority=PRIO priority of highest prio thread--policy=NAME policy of measurement thread, where NAME may be oneof: other, normal, batch, idle, fifo or rr.--priospread spread priority levels starting at specified value
-q --quiet print a summary only on exit
-r --relative use relative timer instead of absolute
-R --resolution check clock resolution, calling clock_gettime() manytimes. List of clock_gettime() values will bereported with -X--secaligned [USEC] align thread wakeups to the next full secondand apply the optional offset
-s --system use sys_nanosleep and sys_setitimer
-S --smp Standard SMP testing: options -a -t and same priorityof all threads--spike=<trigger> record all spikes > trigger--spike-nodes=[num of nodes]These are the maximum number of spikes we can record.The default is 1024 if not specified
-t --threads one thread per available processor
-t [NUM] --threads=NUM number of threads:without NUM, threads = max_cpuswithout -t default = 1--tracemark write a trace mark when -b latency is exceeded
-u --unbuffered force unbuffered output for live processing
-v --verbose output values on stdout for statisticsformat: n:c:v n=tasknum c=count v=value in us--dbg_cyclictest print info useful for debugging cyclictest
-x --posix_timers use POSIX timers instead of clock_nanosleep.
使用命令
./cyclictest -S -p 95 -D 1m -m -i 1000 -d 0
-S 为每个核一个线程,-D 执行一分钟
./cyclictest -p 95 -D 1m -m -i 1000 -d 0 -t 10 -a 5-7
-t 设置 10 个线程, -a 设置在核 5-7上跑
T: 线程序号
P: 线程优先级
C: 线程执行次数
I: 线程运行间隔(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max:最大延时(us)
参考
https://github.com/CJTSAJ/jailhouse-learning/blob/master/%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91cyclictest.md
https://zhuanlan.zhihu.com/p/336381111