Как я могу запустить этот сценарий DTrace для профилирования моего приложения?

Я искал в Интернете что-нибудь, чтобы помочь мне сделать профилирование сборочной линии. Я искал и нашел что-то на http://www.webservertalk.com/message897404.html

Есть две части этой проблемы; найти все инструкции определенного типа (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 помогут мне понять код, сохранить его, запустить его и, надеюсь, получить результаты.

1 ответ

Решение

Если все, что вы хотите сделать, это запустить этот конкретный сценарий DTrace, просто сохраните его в файл сценария.d и используйте команду, подобную следующей, чтобы запустить его для вашего скомпилированного исполняемого файла:

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

где вы замените dtracescript.d с вашим именем файла сценария.

Это предполагает, что у вас есть DTrace как часть вашей системы (я использую Mac OS X, которая использовалась с Leopard).

Если вам интересно, как это работает, я недавно написал руководство из двух частей по использованию DTrace для MacResearch, которое можно найти здесь и здесь.

Другие вопросы по тегам