質問
Linuxでイベントを追跡するためのトレースパイプラインは同時リーダーを許可しますか?
コンテキスト
RAS
いくつかのベンチマークの実行中にサブシステムからトレース情報を取得しようとしています。このサブシステムはトレースイベントを使用してハードウェアエラーイベントを報告します。
イベントの取得に使用するツールRASデーモンツール。私はこのツールがtracing_pipe_raw
各CPUでFIFOを購読していることを知っています。また、ベンチマークはパフォーマンスイベントを購読します。私は信じる、また同じチャンネルを介して広告します。
tracing_pipe_raw
同様の作品はtrace_pipe
次のとおりです。
出力は「追跡」ファイルと同じですが、このファイルはライブトレースによるストリーミング用に設計されています。このファイルからのデータの読み込みは、新しいデータが取得されるまでブロックされます。 「追跡」ファイルとは異なり、このファイルは消費者です。つまり、このファイルを読み込むと、現在のデータをより多く表示するために順次読み込まれます。このファイルからデータを読み取ると、そのデータは消費され、順次読み込みでは再読み込みされません。 「追跡」ファイルは静的で、トラッカーがより多くのデータを追加しないと、読み取るたびに同じ情報が表示されます。 「追跡」ファイルとは異なり、このファイルを読み取るために開くと、一時的にトレースは無効になりません。
私は消費者ファイルとしてのFIFOの概念とその理由を理解しています。各読み取りは異なるデータを生成します。しかし、カーネルはこれらのイベントの複数の加入者(読者)に対してどのような措置を講じますか?
答え1
私は読者が追跡パイプにアクセスしている間互いに干渉する。
この動作を回避するには、instances
パイプラインが追跡されるディレクトリにフォルダを作成する必要があります。これにより、Linuxカーネルトレースパイプラインのコピーを自動的に作成新しいディレクトリに。
新しいインスタンスをプロビジョニングできます。ほぼデフォルトのトレースパイプラインや他のインスタンスとは無関係です。これについての詳細はこちらでご覧いただけます。パイプライン技術の追跡事例
知りたい方のためにラスデーモン、パイプラインで他のリーダーを安全に使用できるように独自のインスタンスを作成します。ただし、他のトラッキング消費者がいる可能性があると思われる場合は、読者用の追加インスタンスを作成することをお勧めします。