2017-03-08 3 views
2

スレッドを作成してからの合計時間と、そのスレッドが特定の計算に使用した合計CPU時間を知りたいプロファイラを作成しています。スレッドが何らかの理由でブロックされ、その合計時間がthread my_thread(function)のようなものからの経過しているに費やす時間を含む時間:私は意味時間によってLLVMパスのスレッドエントリ/スポーンポイントを検出する方法は?

getrusage私はスレッドのCPU時間が良いですが、スレッドが作成されてから経過した合計時間も知りたいと思います。私はC++ライブラリを見つけることができませんでした。

私は、プログラムをインストルメントし、chrono関数のような単純なタイムスタンプメソッドを挿入してスレッドを作成/生成した後、タイムスタンプを取ることができます。 。しかし、検索しても、LLVMパスを使用してスレッドエントリ/スポーンポイントを検出する方法を理解できませんでした。

LLVMのスレッドエントリ/スポーンポイントを検出する方法に関する提案はありますか?

よろしくお願いいたします。私は推測

答えて

1

は、あなたがして、pthread_createに呼び出すCallInst秒で検索引数を分析し、それらが渡されているか、コールバック関数を見つける必要があります。

すべてのスレッド作成呼び出しをキャッチすることを確認するには、あなたの」あなたのプラットフォームでスレッドがどのように作成されるかを調べる必要があります。最も低いレベルでは、スレッドの作成にはシステムコールが必要です(ほとんどの場合、ほとんどの場合)。

たとえば、FreeBSDにはpthread_createという機能がありますが、純粋にユーザランドであり、スレッド作成をthr_new syscallに委譲しています。いくつかのプログラム(Rust言語ランタイム、IIRC)はpthread_createをバイパスして直接そのシステムコールを呼び出すかもしれませんが、これらはかなりまれです。ですから、スレッドの作成をすべて確実に把握したい場合は、これらの低レベルのものにCallInstを検索する必要があります。

+0

あなたの答えをありがとう!ええ、私はそれについても考えました。しかし、スレッドを生成する他の方法はありますか? pthread_createの呼び出しを確認すると、そのような方法で捕まえることができますか?私はそうは思わない。 –

+0

@DanishAlsayed私は自分の答えを更新しました。 – arrowd

関連する問題