SCHED_FIFOリアルタイムスレッドテスタ
FRONT PAGE

コレは何?

SCHED_FIFOリアルタイムスレッドがちゃんと動いて,サンプリング周期(制御周期)がちゃんと守れているか確認するためのテストプログラム。 RTAIにもテスト用のツールがあったので,それと同じようなものを作ろうと思った次第。

前提条件

1. ダウンロード

下記よりダウンロードしてネ。

2. コンパイル

下記のようにコンパイルしてネ。


 [root@robotdvd Yoko]# cd RealtimeTester/
 [root@robotdvd RealtimeTester]# ls
 Makefile  RealtimeTester.cc  SFthread.cc  SFthread.hh
 [root@robotdvd RealtimeTester]# make
 gcc -I. -I/usr/src/linux/include -Wall -Weffc++ -O3 -c RealtimeTester.cc
 gcc -I. -I/usr/src/linux/include -Wall -Weffc++ -O3 -c SFthread.cc
 g++ -L. -lpthread -lrt -lm -ltinfo -o RealtimeTester RealtimeTester.o SFthread.o
 [root@robotdvd RealtimeTester]# 

できればで良いので,MakefileにCPUアーキテクチャの設定があるので,それをちゃんと設定した方が性能は上がる。ラズパイの場合は特に。 Makefileを開いてみれば分かるはず。

もし,
/usr/bin/ld: -ltinfo が見つかりません
collect2: エラー: ld はステータス 1 で終了しました
make: *** [RealtimeTester] エラー 1
上記のエラーが出てきたら,Makefileの36行目あたりにある -ltinfo を消して下さい。

3. 実行

下記のように実行してネ。
コマンドライン引数の「100000 3 20」の意味は「実行周期は100μs,使用するCPUコア番号は3番,表示は20回」ということ。


 [root@robotdvd RealtimeTester]# ./RealtimeTester 100000 3 20
 SCHED_FIFO  RealTime Thread Tester
 Periodic Time = 1.000000000000000e-04 [s]
 CPU Core No.  = 3
 | LoopCount |   Periodic Time [s]   | Error [ns] |   Rate   |
 |      2491 | 9.999300000000000e-05 |         -7 | -0.007 % |
 |      4992 | 9.998400000000001e-05 |        -16 | -0.016 % |
 |      7493 | 1.000170000000000e-04 |        +17 | +0.017 % |
 |      9994 | 1.000090000000000e-04 |         +9 | +0.009 % |
 |     12496 | 9.999300000000000e-05 |         -7 | -0.007 % |
 |     14997 | 1.000170000000000e-04 |        +17 | +0.017 % |
 |     17498 | 1.000140000000000e-04 |        +14 | +0.014 % |
 |     19999 | 1.000210000000000e-04 |        +21 | +0.021 % |
 |     22501 | 9.996700000000000e-05 |        -33 | -0.033 % |
 |     25002 | 1.000080000000000e-04 |         +8 | +0.008 % |
 |     27503 | 9.999600000000001e-05 |         -4 | -0.004 % |
 |     30004 | 1.000080000000000e-04 |         +8 | +0.008 % |
 |     32505 | 1.000110000000000e-04 |        +11 | +0.011 % |
 |     35007 | 9.999500000000001e-05 |         -5 | -0.005 % |
 |     37508 | 1.000010000000000e-04 |         +1 | +0.001 % |
 |     40009 | 9.999400000000001e-05 |         -6 | -0.006 % |
 |     42510 | 9.999500000000001e-05 |         -5 | -0.005 % |
 |     45012 | 9.998700000000000e-05 |        -13 | -0.013 % |
 |     47513 | 1.000020000000000e-04 |         +2 | +0.002 % |
 |     50014 | 1.000050000000000e-04 |         +5 | +0.005 % |
 Ave = 1.000008500000000e-04 [s]  Var = +/- 1.637275000000172e-16
 Max = 1.000210000000000e-04 [s]  Sdv = +/- 12.8 [ns]
 Min = 9.996700000000000e-05 [s]  3sigma = +/- 38.4 [ns]
 [root@robotdvd RealtimeTester]#

各行には,左から順に,ループした回数,そのときの実際に計測した周期,ナノ秒単位での誤差,誤差率を表している。 一番最後は,計測周期の平均値,最大値,最小値,分散,標準偏差,3σを表示している。

上記の制御用PCの場合,3σが±38.4ナノ秒なので,リアルタイム性能は十分すぎるほど十二分であることが分かる。

4. まとめ

RTAIのリアルタイム性チェックツール"/usr/realtime/testsuite/user/latency"に似たようなものを,SCHED_FIFO版用に作ってみました。 これでリアルタイム性が簡単に確認できる。

Limitation & License

Copyright (C) 2011-2016 Yuki YOKOKURA
This program is free software;
you can redistribute it and/or modify it under the terms of the BSD License.





- 116301 -

研究室の横の倉庫 - Side Warehouse of Laboratory
Copyright(C), Side Warehouse, All rights reserved.