問題タブ [ftrace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sockets - ftrace を使用した Linux の UDP レイテンシ測定
単一の UDP パケットがイーサネット ポートに到着する (つまり、割り込みが生成される) 時間と、このパケットがユーザー レベルに配信される時間 (つまり、ブロックされていない read() syscall) との間のレイテンシを測定する必要があります。
この時間は、SIOCGSTAMP ioctl (カーネルレベル) および clock_gettime (ユーザーレベル) を介して時間をタイムスタンプすることで測定できます。ただし、ftrace コマンドを使用してこの待ち時間を測定する方法を理解したいと思っています。
linux - ftrace: current_tracer を echo 経由で function_graph から変更するとシステムがクラッシュする
最近、システムの動作特性を監視するために ftrace をいじっています。小さなスクリプトを使用して、トレースのオン/オフを切り替えています。スクリプトを実行した後、システムがクラッシュして再起動しました。最初は、スクリプト自体にエラーがあるのではないかと考えていましたが、クラッシュと再起動は、関数グラフに設定されているecho
ときに /sys/kernel/debug/tracing/current_tracer に何らかのトレーサーを実行した結果であると判断しましたcurrent_tracer
。
つまり、次の一連のコマンドでクラッシュ/再起動が発生します。
上記のecho
ステートメントによってクラッシュが発生した後の再起動中に、次のような多くの出力が表示されます。
孤立した i ノードの消去
<inode>
current_tracer
function_graph の値を C プログラムの別のものに置き換えることで、この問題を再現しようとしました。
奇妙なことに、C プログラムは私のシステムをクラッシュさせません。
私は元々、Ubuntu (Unity 環境) 16.04 LTS を使用しているときにこの問題に遭遇し、4.4.0 および 4.5.5 カーネルの問題であることを確認しました。4.2.0 および 4.5.5 カーネルで Ubuntu (Mate 環境) 15.10 を実行しているマシンでもこの問題をテストしましたが、問題を再現できませんでした。これは私をさらに混乱させるだけです。
何が起こっているのかについて誰かが私に洞察を与えることができますか? 具体的には、 /sys/kernel/debug/tracing/current_tracer にアクセスできるのにできないのはなぜwrite()
ですか?echo
アップデート
vielmetti が指摘したように、他の人にも同様の問題がありました (ここで見られるように)。
jmp (e9) に近い 5 バイトであると想定して
ftrace_disable_ftrace_graph_caller()
jmp 命令を変更 します。ftrace_graph_call
ただし、これは 2 バイトのみで構成される短い jmp です (eb )。Andftrace_stub()
は のすぐ下にあるため、上記の変更により命令が中断され、以下のような無効なオペコードftrace_graph_caller
でカーネル oops が発生します。ftrace_stub()
パッチ (以下を参照) で問題は解決しましたが、以前は壊れecho
ていなかったのに、なぜ壊れていたのかはまだわかりません。echo
write()
linux - Linux カーネル関数を ftrace available_filter_function に表示する
ftraceを使用して perf_event_openをトレースしたいのですが、available_filter_function に表示されません。実際には、モジュールにロードされている関数のみが表示されているようです。
非モジュール関数のデフォルトのブラックリストはありますか? 必要な機能を追加するには?
linux - ftrace 経由で syscall をトレースできません
ftrace を使用して、カーネルで sys_read 呼び出しのトレースを取得しています。関数またはグラフ トレーサで、set_ftrace_filter を sys_write に設定すると失敗する
これが私のftrace kconfigsです
available_filter_functions にも sys_read または sys_write がありません。arm プラットフォームで 3.14 カーネルを使用しています。助けてください。
android - MAKO で ftrace の初期化に失敗する
MAKO (Nexus 4) で ftrace を使用しようとしています。
msm.git の android-msm-mako-3.4-lollipop-release ブランチを使用して、mako_defconfig の構成の下に追加しました
ただし、ftrace_init は起動時に失敗します。kmsg に失敗したログがいくつかあります。
0xC010_0000以上は書き込めないと思うので、カーネルサイズの問題ですが、バニラコードでトレース設定を追加したところですが、どうすれば直せますか?
いくつかのログを追加し、ftrace_bug 関数をブロックしました。それは ftrace_kill を呼び出し、ftrace を無効にします。代わりに、どの関数にエラーが発生したかをログに記録しました
一部の特定の関数が書き込みをブロックされているようです;;
c - Linux カーネルでスケジューリングのレイテンシを測定するにはどうすればよいですか?
2 つの Linux カーネル バージョン間のスケジューリング レイテンシを比較したいと考えています。これが私がこれまでに試したことです:
- 両方のカーネルで構成された Ftrace
- トレースでスケジュールされたイベントをオンにしました。
- ウェイクアップ トレーサーを有効にしました。
ただし、ウェイクアップは、私のCプログラムではなく、最も優先度の高いプロセスの結果のみを示しています。nice を使ってトレースからキャプチャしてみました。それでも、他の同等に高いプロセスのログが表示されます。プロセスのログを取得するために、ここで他の手順が欠落していますか? プログラムの起動時に nice を使用する代わりに、プログラムのソース コードを変更して、プロセスの優先度を最高に設定するより良い方法はありますか?
私が試した次のステップは、ウェイクアップ トレーサを無効にして、sched イベントだけを有効にすることでした。取得したログは次のようになります
およびは遅延+
を!
示します (数値を知るには ftrace カーネルのドキュメントを参照してください)。sched wakeup には「+」と sched witch の「!」のレイテンシがあるということですか。それぞれマイクロ秒?
Linux のスケジューリング レイテンシを比較する他の方法はありますか?