各プロセスまたはスレッドのコンテキスト切り替え時間を記録します。

各プロセスまたはスレッドのコンテキスト切り替え時間を記録します。

GPIOピンを操作するために、Raspberry PiのRaspbianディストリビューションを使用して最も近いリアルタイム処理を達成しようとしています。私が期待できるパフォーマンスについて「感じ」を得たいと思いました。

できるだけ早くピンを繰り返しトグルし、ロジックアナライザを使用して監視する簡単なCプログラムを作成してこれを行います。

しかし、他の方法もあります。上記のプログラムを作成し、単にコンテキスト遷移を記録して、そのスレッド/プロセスが数秒間サンプリング期間を制御できるタイミングを正確に確認します。

前の質問回答特定のプロセスが一定期間実行したコンテキストコンバージョン数を確認する方法はありますが、コンバージョンの正確な時間を記録する方法はありますか?たぶん、1つではなく各プロセスに対して可能ですか?明らかに、これはオーバーヘッドを引き起こしますが、それでもまだ便利です。明らかに、データはオーバーヘッドを最小限に抑えるためにRAMに保存する必要があります。

注:考えられる解決策:

  • プロセスのすべてのタスクをリアルタイムで一覧表示するコマンド
  • Hacky:プログラムに繰り返し現在時刻を取得して保存させます(そしてログが特定の制限に達するとファイルに保存します)。または、大きなログを避けるために少し改善してください。他のプロセスによってプリエンプトされていないと推論するのに十分近い場合は、連続時間を削除するアルゴリズムを使用してください。

ベストアンサー1

答えはありませんが、以下で見つけることができます。ツール、例、リソースperfコマンドと Linux カーネル ftrace と debugfs について Brendan Gregg が作成またはリストしました。

私のRaspberry Piでは、これらのツールはパッケージにありますperf-tools-unstable。このperfコマンドは実際に/usr/bin/perf_3.16


あなたはこれに興味があるかもしれません議論するそしてコンテキスト切り替え基準著者:ベヌアシゴール緯度ctxかなり古いテストではベンチ母音。

tsuna/contextswitch私が編集しtimectxswws.c get_iterations()while (iterations * ws_pages * 4096UL < 4294967295UL) {削除したように、Piで実行するにはいくつかの作業が必要な場合があります。-march=native -mno-avxMakefile


他のSSHで以下を実行している間は、SSH経由でPiでperf record10秒を使用してください。while sleep .1;do echo hi;done

sudo timeout -10 perf_3.16 record -e context-switches -a
sudo perf_3.16 script -f time,pid,comm | less

次の出力を提供します

           sleep 29341 2703976.560357: 
         swapper     0 2703976.562160: 
    kworker/u8:2 29163 2703976.564901: 
         swapper     0 2703976.565737: 
            echo 29342 2703976.565768: 
     migration/3    19 2703976.567549: 
           sleep 29343 2703976.570212: 
     kworker/0:0 28906 2703976.588613: 
     rcu_preempt     7 2703976.609261: 
           sleep 29343 2703976.670674: 
            bash 29066 2703976.671654: 
            echo 29344 2703976.675065: 
            sshd 29065 2703976.675454: 
         swapper     0 2703976.677757: 

コンテキスト遷移イベントが発生した時期とプロセスによって大まかに表示されます。

おすすめ記事