3

私は、組立ラインのプロファイリングを行うのに役立つ何かをオンラインで探していました。http://www.webservertalk.com/message897404.htmlで何かを検索して見つけました

この問題には2つの部分があります。特定のタイプ(inc、add、shlなど)のすべての命令を見つけてグループ化を決定し、次に実行されている命令を見つけて正しく合計します。逆アセンブラによるグループ化が十分でない限り、最初のビットは注意が必要です。どの命令が実行されているかを把握するために、Dtraceはもちろんここであなたの友達です(少なくともユーザーランドでは)。

これを行う最も良い方法は、各基本ブロックの始まりだけを計測することです。これらを見つけるのは今のところ手動のプロセスです...しかし、各命令をインストルメント化することは小さなアプリケーションで実行可能です。次に例を示します。

まず、テスト中の非常に些細なCプログラム:

main()
{
    int i;

    for (i = 0; i < 100; i++)
    getpid();
}

さて、少しトリッキーなDスクリプト:

#pragma D option quiet

pid$target:a.out::entry
/address[probefunc] == 0/
{
    address[probefunc]=uregs[R_PC];
}

pid$target:a.out::
/address[probefunc] != 0/
{
    @a[probefunc,(uregs[R_PC]-address[probefunc]), uregs[R_PC]]=count();
}

END
{
    printa("%s+%#x:\t%d\t%@d\n", @a);
}
main+0x1:           1
main+0x3:           1
main+0x6:           1
main+0x9:           1
main+0xe:           1
main+0x11:           1
main+0x14:           1
main+0x17:           1
main+0x1a:           1
main+0x1c:           1
main+0x23:         101
main+0x27:         101
main+0x29:         100
main+0x2e:         100
main+0x31:         100
main+0x33:         100
main+0x35:           1
main+0x36:           1
main+0x37:           1

与えられた例から、これはまさに私が必要としているものです。ただし、それが何をしているのか、DTraceプログラムを保存する方法、結果を取得したいコードで実行する方法がわかりません。そこで、DTraceのバックグラウンドが良好な人がコードを理解し、保存して実行し、結果が表示されることを期待して、これを開きました。

4

1 に答える 1

4

この特定のDTraceスクリプトを実行するだけの場合は、それを.dスクリプトファイルに保存し、次のようなコマンドを使用して、コンパイル済みの実行可能ファイルに対して実行します。

sudo dtrace -s dtracescript.d -c [Path to executable]

dtracescript.dスクリプトファイル名に置き換えます。

これは、システムの一部としてDTraceがあることを前提としています(私はMac OS Xを実行していますが、これはLeopard以降に使用されています)。

これがどのように機能するかについて興味がある場合は、少し前にDTrace for MacResearchの使用に関する2部構成のチュートリアルを作成しました。これは、ここここにあります。

于 2011-01-06T18:23:33.787 に答える