Как я могу запустить этот сценарий 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, которое можно найти здесь и здесь.