1

プローブ呼び出し内の現在のPIDの実際のスレッド数を判別できるSystemTapスクリプトを作成したいと思います。この番号は、現時点で/ proc / 4711/statusの出力に示されているものと同じである必要があります 。

私の最初のアプローチは、kprocess.createおよびkprocess.exitイベントの発生をカウントすることでしたが、これは明らかにスレッドカウントの相対的な増加/減少のみを提供します。

SystemTapスクリプトは、指定されたAPI関数の1つを使用して、この数をどのように決定できますか?たぶん、スクリプトは、procファイルシステムの出力に使用されているのと同じカーネル情報をどういうわけか読み取ることができますか?

4

1 に答える 1

2

どちらの場合も競合状態にさらされます。stapプローブはカーネル構造をロックできません。これは、カウント中にタスクリストが変更されないことを保証するために必要です。これは、kprobeの途中など、一般的なsystemtapプローブコンテキストに特に当てはまります。

最初のアプローチでは、タスクリストの「プローブ開始{}」時間の反復を追加して、埋め込まれたCコードのビットから初期スレッド数を準備することができます。1つの課題は、埋め込みCコードからsystemtapスクリプトグローバルを設定することです(そのための文書化されたAPIはありません)が、トランスレーターが生成するもの(stap -p3)を見ると、実行可能であるはずです。

2番目のアプローチは同じ反復を行うことですが、上記のロック上の理由から、これは一般的に安全ではありません。

于 2013-01-09T15:04:30.063 に答える