Cyclictest是 rt-tests 下的一個測試工具,一般主要用來測試使用內核的延遲,從而判斷內核的實時性。
1、cyclictest 安裝
Debian / Ubuntu 系統下可以直接使用apt-get install rt-tests 來安裝cyclictest。
2、cyclictest 的使用
在rt-tests的路徑下,我們可以使用 ./cyclictest 來運行cyclictest, 而在別的目錄下,我們就需要指定 cyclictest的路徑來使用,比如說 /home/long/rt-tests/cyclictest ,或者你也可以直接將 rt-tests的路徑下的 cyclictest 拷貝到 /bin/ 下,以後就可以直接使用 cyclictest 而不需要指定路徑了
3、cyclictest 的參數介紹
關於cyclictest 的各個參數具體含義建議大家還是用時間具體看看 cyclictest --help 的信息
-p PRIO --prio=PRIO 最高優先級線程的優先級 使用時方法爲: -p 90 / --prio=90 -m --mlockall 鎖定當前和將來的內存分配
-c CLOCK --clock=CLOCK 選擇時鐘 cyclictest -c 1 0 = CLOCK_MONOTONIC (默認) 1 = CLOCK_REALTIME
-i INTV --interval=INTV 基本線程間隔,默認爲1000(單位爲us),下面介紹原理的時候會提到
-l LOOPS --loops=LOOPS 循環的個數,默認爲0(無窮個),與 -i 間隔數結合可大致算出整個測試的時間, 比如 -i 1000 -l 1000000 ,總的循環時間爲1000*1000000=1000000000 us =1000s ,所以大致爲16分鐘多。
-n --nanosleep 使用 clock_nanosleep
-h HISTNUM --histogram=US 在執行完後在標準輸出設備上畫出延遲的直方圖(很多線程 有相同的權限) US爲最大的跟蹤時間限制,這個在下面介紹實例時可以用到,結合gnuplot 可以畫出我們測試的結果圖。
-q --quiet 使用-q 參數運行時不打印信息,只在退出時打印概要內容,結合-h HISTNUM參數會在退出時 打印HISTNUM 行統計信息以及一個總的概要信息。
-f --ftrace ftrace函數跟蹤(通常與-b 配套使用,其實通常使用 -b 即可,不使用 -f )
-b USEC --breaktrace=USEC 當延時大於USEC指定的值時,發送停止跟蹤。USEC,單位爲謬秒(us)。
推薦參數以及結果實例:
sudo cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000
使用 -p 90給cyclictest 賦優先級90,使用-m參數鎖定內存分配,使用 -c 0指定使用默認的MONOTONIC 時鐘, -i 200 指定一個循環爲200us,結合 -l 1000000爲總共1000000個循環,此外-n 爲使用nanosleep 而不是簡單的sleep,-q爲在運行時不打印即時信息,-h 100 爲總共統計100個信息在最後的結果中。
cyclictest用於測試定時器的精度,假定定時器時間間隔爲 interval,定時器啓動前記錄下當前時間t1,定時器到時後記錄下當前時間t2,則測出的時延爲 t2 - (t1 + interval)。
4、cyclictest輸出結果含義
T: 0 序號爲0的線程
P: 0 線程優先級爲0
C: 9397 計數器。線程的時間間隔每達到一次,計數器加1 I: 1000 時間間隔爲1000微秒(us)
Min: 最小延時(us)
Act: 最近一次的延時(us)
Avg:平均延時(us)
Max: 最大延時(us)