使用してリアルタイムLinuxのパフォーマンステストツールの解析[ターン]の--Cyclictest

転送:https://blog.csdn.net/lu_embedded/article/details/53486545

ます。https://rt.wiki.kernel.org/index.php/Cyclictest Cyclictestツールについて、Wikiに指示があります。次のセクションでは、ウィキは、翻訳および分析のために実際に使用されますについて説明します。

  Tglx、クラーク・ウィリアムズとジョンKacurによって維持さ:Cyclictestはユーザによって書かれた高解像度のテストプログラムであり、

ドキュメントの
インストールは
  gitのクローンgitの行う、gitリポジトリから最新のソースを取得://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.gitをか、untarしたアーカイブから解放tarballをフェッチソースディレクトリにある任意のディレクトリと実行メイクに。あなたがクロスコンパイルしたい場合は、単に実行メイクCROSS_COMPILE =(例メイクCROSS_COMPILE用=アーム-V4T-linuxの-gnueabi-)。
  あなたはそこから生じたバイナリを実行するか、それをインストールすることができます。

LGS @ F11#> gitのクローンgitの://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
LGS @ F11#> CDのRT-テスト
LGS @ F11#>すべて作る
LGSを@ F11#> CP ./cyclictestは/ usr / binに/
LGS @ F11#> cyclictest --help
1
2
3
4
5
NOTE!
libnumaはcyclictestを構築するために必要とされます。通常、それは非NUMAシステムにもインストールlibnumaを持ってしても安全ですが、あなたが沼のlibsをインストールしたくない場合(例えば組み込み環境で)その後、メイクNUMA = 0でコンパイルします。

それを実行
cyclictestを実行するには、rootまたはsudoを使用していることを確認します。
パラメータを指定しないcyclictestは1msのインターバルタイマと一つのスレッドが作成されます。
さまざまなオプションのヘルプテキストを提供し-h cyclictest

[LGS @ F11 RT-テスト]#
[LGS @ F11 RT-テスト]#
[LGS @ F11 RT-テスト]#./cyclictest --help
cyclictest V 0.42
使い方:
cyclictest <オプション>

プロセッサ#N上-a [NUM] --affinity実行スレッド#N、可能であれば、
プロセッサのすべてのスレッドがNUM NUMピンと
-b USEC --breaktrace = USEC送信ブレークtraceコマンドの待ち時間> USEC
-B --preemptirqs両方プリエンプトとirqsoffトレース(-bと一緒に使用)
-C CLOCK --clock =クロック選択クロック
0 = CLOCK_MONOTONIC(デフォルト)
1 = CLOCK_REALTIME
トレース-C --contextコンテキストスイッチ(-bと一緒に使用)
-d DIST --distance =米国デフォルト= 500における糸の間隔のDIST距離
-E --event(-bと一緒に使用)、トレーシングイベント
-f --ftrace(-bがアクティブである)関数トレース
スレッドの-i INTV --interval = INTVベース間隔で私たちデフォルト= 1000
-I --irqsoff Irqsoffトレース(-bと併用)
-l LOOPS --loops = LOOPSループの数:デフォルト= 0(エンドレス)
-m --mlockallロック現在および将来のメモリ割り当て
-n --nanosleep使用clock_nanosleep
NS代わりにMS内-N --nsecs印刷結果(デフォルトMS)
RED --oscope = REDオシロスコープモード-oは、REDによって出力冗長低減
-O TOPT --traceopt = TOPTトレースオプション
最高PRIOスレッドの-p PRIO --prio = PRIO優先
(トレースオフプリエンプト--preemptoff -Pを-bと一緒に使用)
-q --quiet出口にのみ要約印刷する
代わりに絶対--relative使用相対タイマー-r
-s --system使用sys_nanosleepとsys_setitimerを
-T TRACE --tracer = TRACER設定機能トレース
構成トレーサー:利用できない(debugfsのマウントされていません)
-t --threads利用可能なプロセッサごとに1つのスレッド
-t [NUM] --threads =スレッドのNUM番号:
NUM、スレッド= max_cpus無し
-tデフォルト= 1なしの
統計のためにSTDOUTに-v --verbose出力値
形式:N :C:VN = tasknum C = Vを数える=私たちの値
-D --duration = Tテスト実行のための長さを指定し
、デフォルトを秒単位であるが、「M」、「H」、または「d」は多分追加

へ数分、数時間または数日に値を変更
-h --histogram = US実行後にstdoutに潜伏ヒストグラムをダンプ
米国はマイクロ秒で追跡される最大時間です
(-bと併用)トレース-w --wakeupタスクの起床
- (-bと併用)トレーシングW --wakeuprt RTタスクの起床

-bは、リアルタイムプリエンプションパッチでのレイテンシトレーサを制御するためのデバッグオプションです。
システム上の予期しない大きな遅延を追跡するのに便利です。このオプションはでのみ動作しません

CONFIG_PREEMPT_RT = Y
CONFIG_WAKEUP_TIMING = Y
CONFIG_LATENCY_TRACE = Y
CONFIG_CRITICAL_PREEMPT_TIMING = Y
CONFIG_CRITICAL_IRQSOFF_TIMING = yの
カーネル設定オプションが有効になって。-bオプションにUSECパラメータは、試験の実際の待ち時間と比較される最大レイテンシ値を定義します。測定待ち時間が与えられた最大値よりも高くなると、カーネルトレーサーとcyclictestが停止しています。トレースは、/ procの/ latency_traceから読み取ることができ
mybox#猫の/ proc / latency_trace>のtrace.log
待ち時間は、待ち時間が無効になっトレースとカーネルよりもはるかに高くなりますので、トレーサーは、カーネルに大きなオーバーヘッドが追加されますのでご注意ください。
-c CLOCKが使用されるクロックを選択します

単調増加させるシステムである0を選択CLOCK_MONOTONIC、
時間。これがデフォルトの選択である
昼間の時間である1つの選択のCLOCK_REALTIME、。
CLOCK_MONOTONICは、ユーザによって変更することができないがCLOCK_REALTIMEは、settimeofdayによって設定することができます。
このオプションは-sオプションが指定されている影響を与えません。
-d DIST(デフォルトは500USある)マイクロスレッド間隔の距離を設定
cylictestは、-tオプションと呼ばれ、複数のスレッドが作成されると、この距離の値は、スレッドの間隔に加えられます。
間隔(糸N)=間隔(スレッドN-1)+ DIST
-i INTV(デフォルトは1000usある)マイクロスレッド(S)の塩基間隔を設定
これは、最初のスレッドの間隔を設定します。また、-dを参照してください。
-lループはループの数を設定する(デフォルト= 0(エンドレス))
このオプションは、テストサイクルの所定の数の自動テストのために有用です。タイマー間隔の数に達した後cyclictestが停止しています。
代わりに、POSIXインターバルタイマーの-n使用clock_nanosleep
このオプションを設定するには、代わりにPOSIXインターバルタイマーのclock_nanosleepでテストを実行します。
PRIO -p最初のスレッドの優先順位設定
優先を第一のテストスレッドに設定されます。各更なるスレッドは、より低い優先順位を取得する:
優先度=優先度(N-1スレッド)(Nスレッド)
テストの静かを実行し、終了時にのみ要約を印刷-q
のみ要約出力ニーズを撮影する自動テストに有用
代わりに絶対-r使用相対タイマー
テストのデフォルトの動作絶対タイマーを使用することです。このオプションは、完全を期すためにそこにあると再現性のテストのために使用すべきではありません。
-s代わりにPOSIXタイマーのsys_nanosleepとsys_setitimerを使用
itimersはプロセスごとにあるとしないスレッドごとため-sが一つのスレッドのみを使用することができることに留意されたいです。-n用途と組み合わせて-sにnanosleepシステムコールとは、1つのスレッドに限定されるものではなく、
NUMがテストスレッド(デフォルトは1である)の数を設定する-t、引数なし-tは、スレッドの数がCPUの数に等しくなり
作成しますNUMテストスレッド。参照は、-iおよび詳細については-p -d。
統計の標準出力に-vの出力値
このオプションは、待ち時間の分布に関する統計情報を収集するために使用されます。出力はstdoutに送られます。出力形式は、
N:C:V
N =タスク番号c =カウントV =レイテンシー値たちに
利用-lと組み合わせて、このオプション
OSADLリアルタイムのLiveCDプロジェクトは、待ち時間分布をプロットするためのスクリプトを提供します。

期待される成果
tglxのリファレンスマシン
  のすべてのテストは、Pentium III 400MHzのベースのPC上で実行されています。
  テーブルには、バニラのLinux 2.6.16、Linuxの-2.6.16-hrt5とLinux-2.6.16-RT12の比較を示しています。ジフィー解像度より小さい間隔のためのテストは、バニラのLinux 2.6.16上で実行されていません。SCHED_FIFOと優先順位80のすべての番号を持つすべてのケースでテストスレッドの実行は、マイクロ秒です。

テストケース:clock_nanosleep(TIME_ABSTIME)、インターバル10000
マイクロ,. 10000のループ、無負荷。
コマンドライン:cyclictest -T1 -p 80 -n -i 10000 -l 10000
カーネル最小最大平均
2.6.16 24 4043 1989
2.6.16-hrt5 12 94 20
2.6.16-RT12 6 40 10

テストケース:clock_nanosleep(TIME_ABSTIME)、間隔10000マイクロ
秒,. 10000のループ、100%負荷。
コマンドライン:cyclictest -T1 -p 80 -n -i 10000 -l 10000
カーネル最小最大平均
2.6.16 55 4280 2198
2.6.16-hrt5 11 458 55
2.6.16-RT12 6 67 29

テストケース:POSIXインターバルタイマー、インターバル10000マイクロ秒、。10000の
ループ、無負荷。
コマンドライン:cyclictest -T1 -p 80 -i 10000 -l 10000
カーネル最小最大平均
2.6.16 21 4073 2098
2.6.16-hrt5 22 120 35
2.6.16-RT12 20 60 31

テストケース:POSIXインターバルタイマー、インターバル10000マイクロ秒、。10000の
ループ、100%負荷。
コマンドライン:cyclictest -T1 -p 80 -i 10000 -l 10000
カーネル最小最大平均
2.6.16 82 4271 2089
2.6.16-hrt5 31 458 53
2.6.16-RT12 21 70 35

テストケース:clock_nanosleep(TIME_ABSTIME)、間隔500マイクロ
秒、。100000のループ、無負荷。
コマンドライン:cyclictest -T1 -p 80 -i 500 -n -l 100000
カーネル分maxはavgを
2.6.16-hrt5 5 108 24
5 48 7 2.6.16-RT12を

テストケース:clock_nanosleep(TIME_ABSTIME)、間隔500マイクロ
秒、。100000のループ、100%負荷。
コマンドライン:cyclictest -T1 -p 80 -i 500 -n -l 100000
カーネル分maxはavgを
2.6.16-hrt5 9 684 56
2.6.16-RT12 10 60 22

テストケース:POSIXインターバルタイマー、インターバル500マイクロ秒、。100000の
ループ、無負荷。
コマンドライン:-T1 -p 80 -i 500 -l 100000 cyclictest
カーネル分maxはavgを
2.6.16-hrt5 8 119 22
2.6.16-RT12 12 78 16

テストケース:POSIXインターバルタイマー、インターバル500マイクロ秒、。100000の
ループ、100%負荷。
コマンドライン:-T1 -p 80 -i 500 -l 100000 cyclictest
カーネル分maxはavgを
2.6.16-hrt5 16 489 58
2.6.16-RT12 12 95 29

よくある質問
PSショー間違ったスケジューリングクラスSCHED_OTHERは、
  各cyclictestタスクは、1つまたは複数のスレッドで構成されています。PS -ceのみを示しメインプロセスないメインプロセスのスレッド。PS -eLc | 環状番組をメインプロセスAN正しいスケジューラクラスSCHED_FIFOとを含むスレッドをgrepします。

#> ./ cyclictest -T5 -p 80 -n -i 10000

#> psの-cLe | grepの環状
4764 4764のTS 19のPTS / 1午後12時○○分01秒cyclictest
4764 4765 FF 120 PTS / 1夜12時00分00秒cyclictest
4764 4766 FF 119のPTS / 1夜12時00分00秒cyclictest
4764 4767 FF 118のPTS / 1 00:午後12時00 cyclictest
4764 4768 FF 117のPTS / 1夜12時00分00秒cyclictest
4764 4769 FF 116のPTS / 1夜12時00分00秒cyclictest
1
2
3
4
5
6
7
8
9
CHRTショー誤ったスケジューリングクラスSCHED_OTHER
  ない使用メインプロセスのPIDが、メインプロセスからのスレッドの一つのPID。スレッドは、PS -cLeで示されています| grepを巡回。

#> CHRT -p 4766
PID 4766の現在のスケジューリング・ポリシー:SCHED_FIFOは、
79:4766の現在のスケジューリング優先順位のpid
1
2
3
CPUの親和性のためのタスクセットを
  タスクセットのコマンドは、ロバート・M.愛によって書かれています。それがスケジューリング処理に来るときSMPオペレーティングシステムには選択肢があります。新しい、または新しく再スケジュールプロセスが使用可能な任意のCPU上で実行することができます。しかし、それは問題でどこ新しいプロセスが実行され、既存のプロセスは、CPUがまだそのプロセスに属するデータをキャッシュすることができるという理由だけで、それが実行されたのと同じCPUに戻るべきではないべきです。プロセスがスレッドである場合、これは本当であるには特に傾向がある:(明らかにこれはまた、マルチスレッドから見えるかもしれないパフォーマンスゲインを減少させるが)同じプログラムの他のスレッドは、自分の兄弟に関心のCPUキャッシュを持っていることは非常に可能性があります。これらの理由から、スケジューリングアルゴリズムは、CPUの親和性に注意を払うと一定に保つようにしてみてください。
  それだけで特定のCPU上で実行するプロセスを強制することが可能です。Linuxシステムコール(sched_setaffinityおよびsched_getaffinity)とコマンドライン「タスクセット」があります。

LGS @ F11#>タスクセット-C 3トップ
LGS @ F11#>タスクセット-p [PID]
1つの
2
コンパイル障害numa.hを見つけることができないので、
メイク
CC -D VERSION_STRING = 0.85 -C SRC / cyclictest / cyclictest.c -Wall -Wno-NULLでない-O2 -DNUMA -D_GNU_SOURCE -Isrc /含む
37:0:SRC / cyclictest / cyclictest.cからインクルードファイルでは
SRC / cyclictest / rt_numa.h:23:18:致命的なエラー:numa.h :そのようなファイルやディレクトリの
コンパイルは終了しません。
作る:*** [cyclictest.o]エラー1
1
2
3
4
5
6は、
  単にあなたのディストリビューションのNUMA開発パッケージをインストールします。Fedoraのでは、これはそう、numactl-develのです

SU -c「yumをnumactl-develのインストール」
1を
  これが唯一の建物のために必要とされています。このウィルによってテストが非NUMAマシン上での実行方法に影響を与えませ
----------------
著作権:この記事はCSDNブロガー「東アルキメデスのオリジナル記事です、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースのリンクと、この文を添付してください。
オリジナルリンクします。https://blog.csdn.net/lu_embedded/article/details/53486545

おすすめ

転載: www.cnblogs.com/sky-heaven/p/12106089.html
おすすめ