サンプリングによるプロファイリング
この測定方法を有効にすると、 CODESYS 追加のタスクを生成します。このタスクは、ランダムな時間に測定されるアプリケーションタスクを中断し、現在のコールツリーを決定します。
サンプリングはマルチコアシステムでのみサポートされます。ユーザーは、自動生成されたプロファイリングタスクをタスク構成内の別のタスクグループに割り当てる必要があります。このタスクグループは、測定するアプリケーションタスクとは異なるコアで実行する必要があります。
測定されるタスクの記録されたコールツリーは、処理のために開発システムにサイクルで転送されます。そのため、この方法は、開発システムがオンラインモードの場合にのみ機能します。
サンプリングは、タスクランタイムの外れ値を決定するのには適していません。どの関数に時間がかかり、どの関数にほとんど時間がかからないかを長期間にわたって判断する場合に、この方法を使用します。その結果、多くのタスクサイクルにわたってランダムに収集されます。個々のサイクルでの1回限りの影響は検出できません。
この測定方法の利点の1つは、タスクの実行時間への影響が比較的少なく、実行時にいつでも測定のオンとオフを切り替えることができることです。
測定の機能
プロファイリングタスクは、無限ループで高い優先度で実行されます。プロファイリングタスクは、測定対象のアプリケーションタスクが現在実行されているかどうかをランダムにチェックします。実行中の場合は停止され、現在の呼び出しツリーが決定されます。決定されたコールツリーがリスト(配列)に入力されます。
このコールツリーのリストは、開発システムに周期的に転送され、以前の測定で処理されます。したがって、サンプリングは、開発システムがランタイムに接続されている間のみ実行されます。
サンプリング方法は、POUの実行の統計的分布を決定するために使用されます。結果ビューに表示されるランタイムは直接測定されませんが、計算の結果です。計算は、コールツリーで頻繁に見られるPOUもより長い実行時間を必要とするという仮定に基づいています。サンプルの総数に対するPOUの測定値(サンプル)の部分は、タスクのサイクルタイムへのPOU呼び出しの時間部分に変換されます。
例:タスク内 T1
、2つのプログラム P1
と P2
が呼び出され、タスクサイクルタイムは20ミリ秒です。プロファイラータスクは100のサンプルを実行し、以下を決定します。
T1
プログラムで停止しますP1
20回。T1
プログラムで停止しますP2
50回。T1
30回は実行されません。
次に、プロファイラーは、タスクの比率からサイクルタイムまでの次の時間を検出し、インラインビューに表示します。
P1
:4ミリ秒P2
:10ミリ秒Idle
:6ミリ秒
タスクの実行時間は、測定によって明らかに延長されます。この増加は一定ではありませんが、コールツリーの深さに依存します。プラットフォームによっては、10 µs〜100 µsの範囲、場合によってはそれ以上の実行時間の延長が予想されます。
「失敗したサンプル」カテゴリの測定:
重要
コールツリーを決定するときにエラーが発生する可能性があります。考えられるエラーの原因:
呼び出しツリーが格納されている配列の長さが短すぎます。この場合、コールツリーはまったく決定されません。ユーザーは、プロファイラー設定で配列の長さを変更できます(コールスタックの最大深度)。
タスクは、現在I / Oを操作(ハードウェアにアクセスするため)しようとしているため、たとえば「ロック」状態など、好ましくない状態にあります。測定は失敗します。
失敗した測定の数は、カテゴリのオンラインビューに表示されます Failed Samples
:
呼び出しツリーのリスト(配列)が十分に長いにもかかわらず、そのような失敗した測定の数が非常に多い場合は、別の測定方法に頼る必要があります。
カテゴリの測定 IDLE
:
タスクが現在実行されていない測定値は、のオンラインビューに表示されます IDLE
カテゴリー。背景:循環タスクは通常、サイクルタイムよりも短い実行時間で構成されます。その結果、サイクル内にタスクが実行されない期間があります。
不足しているサンプル:
欠落しているサンプルは、開発システムに転送されないコントローラー上の測定記録です。
コールツリー配列が大きい(必要なコールツリーの深さが大きい)および/またはサンプリングレートが高い(小さい サンプリング間隔)、記録されたすべてのコールツリーを開発システムに転送できるわけではない場合があります。ただし、失われた測定値は、送信される測定値と同じ方法でサイクル全体に分散されるため、結果が破損することはありません。このため、欠落しているサンプルの数は、 オンライン – 概要 見る (欠落しているサンプルの数)、結果ビューの個別のカテゴリとしてではありません(失敗したサンプルのように)。ただし、失われたサンプルの数は、サンプリング密度が高すぎる可能性があることを示しています。これにより、サイクルタイムも不必要に長くなります。この場合、それに応じていずれかの設定を変更する必要があります コールスタックの最大深度 または サンプリング間隔。
設定に関する注意
サンプリング方法については、以下の特記事項があります。 設定 プロファイラーエディタのタブ、 サンプリングパラメータ グループ:
プロファイラータスクグループ:プロファイラータスクを含むタスクグループ。
サンプリング間隔:サンプリングがランダムな時間に実行される期間(コールツリーの記録が作成され、保存されます)。
コールスタックの最大深度:サンプリング中にコールツリーを決定する必要がある最大ネスト深度。
サンプリングによるプロファイリング操作のアクティブ化と実行
要件:
A CODESYS 複数のPOUを持つプロジェクトアプリケーションがオフラインモードで開かれています。
マルチコアコントローラーへの接続は通信設定で構成され、コントローラーは実行されています。
サンプリング用のプロファイラータスクは、測定対象のアプリケーションタスクとは別のコアで(理想的には単一のタスクとして)実行されています。
したがって、タスク構成では、「プロファイラー」タスクグループが独自のコアに作成されます(理想的には「FixedPinned」プロパティを使用)。自動生成されたプロファイラータスクは、このグループに割り当てられた唯一のタスクです。測定するIECアプリケーションのタスクのタスクグループは、別のコアにあります。
アプリケーションはアクティブなアプリケーションであり、エラーなしでコンパイルできます。
アプリケーションでは、プログラムでプロファイリングをアクティブ化および非アクティブ化するために使用できるブール変数を作成できます。これはオプションです。プロファイリングは、実行時にクリックしてオンとオフを切り替えることもできます。 一時停止/始める のコントロールパネルのボタン オンライン 見る。
クリック オブジェクトの追加 追加するには プロファイラー デバイスツリーのアプリケーションの下にあるオブジェクト。
オブジェクトをダブルクリックします。
オブジェクトエディタが開きます。 The
設定 タブにフォーカスがあります。
をセットする 方法 に サンプリング。
の中に 録音 グループ、を選択します タスク 時間測定を実行したいPOU呼び出しのアプリケーションの。
ために 調子、 クリック
ボタンをクリックし、値の記録のオンとオフを切り替えるために使用するアプリケーションからブール変数を選択します。注:この種の変数の使用はオプションです。フィールドを空白のままにすると、すべてのサイクルが記録されます。
で次の設定を構成します サンプリングパラメータ グループ:
プロファイラータスクグループ:プロファイリング用に自動生成されたタスクを含むタスクグループの名前(上記を参照:タスク構成の要件)。
サンプリング間隔:測定間の時間(推奨:タスクサイクル時間の値)
コールスタックの最大深度 それは毎回決定する必要があります。
下 スナップショットの外観、 を選択 時間形式 録音を表示します。
クリック
アプリケーションをコントローラーにダウンロードします。ディスプレイ
のステータスバーに表示されます CODESYS Profiler。
クリック
アプリケーションを起動します。プロジェクトが実行され、通常の監視ビューに現在の変数値が表示されます。
プロファイリングを開始する条件としてブール変数を構成した場合は、この変数を次のように設定します。
TRUE
。次に、サンプリング結果を見てください。 Profilerオブジェクトとそのエディターのエディターを開きます
オンライン タブ。クリック スナップショットを更新 ボタンとしばらくしてから。
測定するタスクのコールツリーが表示されます。個々のブロックについて、それぞれのサンプル数(測定値)と、ブロック呼び出しが消費する決定された合計時間が表示されます。