gprof
Ãâ·ÂÀÇ ºÎÀûÈ®¼º gprof
ÀÌ °è»êÇس»´Â ½ÇÇà½Ã°£ ¼öÄ¡°ªµéÀº »ùÇøµ °úÁ¤(sampling
process)¿¡ ±â¹ÝÇÏ°í ÀÖ´Ù. µû¶ó¼ ÀÌµé ¼öÄ¡°ª¿¡´Â Åë°èÀû ºÎÁ¤È®¼ºÀÌ ³»Æ÷µÇ±â
¸¶·ÃÀÌ´Ù. ÇÔ¼ö°¡ ±ØÈ÷ ªÀº ½Ã°£µ¿¾È¿¡¸¸ ½ÇÇàµÇ´Â °æ¿ì, Æò±ÕÀûÀ¸·Î »ùÇøµ°úÁ¤Àº
ÇÔ¼ö°¡ ½ÇÇàµÇ°í ÀÖÀ» ¶§ Çѹø¸¸ Àâ¾Æ¾ß ÇÑ´Ù. ±×·¯³ª ½ÇÁ¦ »ùÇøµ °úÁ¤¿¡¼ ÇÔ¼ö¸¦
0¹ø ¶Ç´Â 2¹ø »ùÇøµÇÒ °¡´É¼ºµµ ¸¹´Ù.
ÀÌ¿Í ´ëÁ¶ÀûÀ¸·Î È£ÃâÀÇ È½¼ö(number-of-calls)¿Í ±âº» ºí·Ï¿¡ °ü·ÃµÈ ¼öÄ¡µéÀº »ùÇøµ´ë½Å Ä«¿îÆÿ¡ ÀÇÇØ ±¸ÇØÁø´Ù. Ä«¿îÆÃÀ¸·Î ±¸ÇØÁø ¼öÄ¡µéÀº Á¤È®Çϸç ÇÁ·Î±×·¥ÀÌ deterministicÇÏ´Ù¸é ¼·Î ´Ù¸¥ °¢°¢ÀÇ ½ÇÇà¿¡¼ ¾òÀº °ªÀÏÁö¶óµµ µ¿ÀÏÇÏ°Ô ³ª¿Â´Ù.
Flat profileÀÇ ¾ÕºÎºÐ¿¡ Ãâ·ÂµÇ´Â »ùÇøµ ÁÖ±â(sampling period)´Â ¾ó¸¶³ª ÀÚÁÖ »ùÇøµÀ» Çߴ°¡¸¦ ³ªÅ¸³½´Ù. °æÇèÀûÀ¸·Î º¼¶§, ½ÇÇà ½Ã°£¿¡ °ü·ÃµÈ ¼öÄ¡°ªµéÀÌ »ùÇøµ Áֱ⺸´Ù »ó´çÈ÷ Å« °æ¿ì¿¡´Â ½ÇÇà ½Ã°£¿¡ °ü·ÃµÈ ¼öÄ¡°ªÀº Á¤È®ÇÑ °ªÀ̶ó°í ºÁµµ ¹«¹æÇÏ´Ù.
½ÇÁ¦ ¿ÀÂ÷·®(actual amount of error)´Â ¿¹Ãø °¡´ÉÇÏ´Ù. n °³ÀÇ »ùÇÿ¡ ´ëÇÏ¿©,
¿¡·¯ÀÇ ±â´ë°ª(expected error)´Â n ÀÇ Á¦°ö±ÙÀÌ´Ù. ¿¹¸¦ µé¾î »ùÇøµ ÁֱⰡ
0.01ÃÊÀ϶§ foo
ÇÔ¼öÀÇ ½ÇÇà½Ã°£ÀÌ 1ÃÊÀÎ °æ¿ì, »ùÇÃÀÇ °³¼ö n
Àº 100(=1ÃÊ/0.01ÃÊ)ÀÌ°í, sqrt(n)Àº 10ÀÌ µÈ´Ù. µû¶ó¼ foo
ÇÔ¼öÀÇ
½ÇÇà ½Ã°£ÀÇ ¿¡·¯ÀÇ ±â´ë°ªÀº 0.1ÃÊ(=10*0.01ÃÊ)°¡ µÈ´Ù. Áï, ½ÇÇèÀ» ÅëÇØ ¾òÀº ½ÇÇà
½Ã°£(=1ÃÊ)ÀÇ 10%Á¤µµÀÌ´Ù. ¶Ç ´Ù¸¥ ¿¹·Î, »ùÇøµ ÁֱⰡ 0.01À϶§ bar
ÇÔ¼öÀÇ
½ÇÇà½Ã°£ÀÌ 100ÃÊÀÎ °æ¿ì, »ùÇÃÀÇ °¹¼ö nÀº 10000(=100ÃÊ/0.01ÃÊ)ÀÌ°í, sqrt(n)Àº
100ÀÌ µÈ´Ù. µû¶ó¼ bar
ÇÔ¼öÀÇ ½ÇÇà ½Ã°£ÀÇ ¿¡·¯ÀÇ ±â´ë°ªÀº 1ÃÊ(=100*0.1ÃÊ)°¡
µÈ´Ù. Áï, ½ÇÇèÀ» ÅëÇØ ¾òÀº ½ÇÇà½Ã°£(1000ÃÊ)ÀÇ 1%Á¤µµÀÌ´Ù. ¿¡·¯ÀÇ ±â´ë°ªÀº
¼·Î ´Ù¸¥ ÇÁ·ÎÆÄÀϸµ ·±(profiling run)¿¡¼ Æò±ÕÀûÀ¸·Î À̺¸´Ù Ä¿Áú ¼öµµ ÀÖÀ¸¸é,
¶§¶§·Î ´õ Å« ÆøÀ¸·Î º¯ÀÌ°¡ »ý±æ ¼öµµ ÀÖ´Ù.
±×·¯³ª À§ÀÇ ¼³¸íÀÌ "½ÇÇà ½Ã°£ ¼öÄ¡°ªÀÌ ÀÛ´Ù°í Çؼ ¾òÀ» ¼ö ÀÖ´Â Á¤º¸°¡ ¾ø´Ù"´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾Ê´Â´Ù. ¸¸ÀÏ ÇÁ·Î±×·¥ÀÇ Àüü ½ÇÇà ½Ã°£ÀÌ Å©´Ù¸é, ƯÁ¤ ÇÔ¼öÀÇ ½ÇÇà½Ã°£ÀÌ ÀÛ´Ù´Â °ÍÀº ±× ÇÔ¼ö°¡ Àüü ÇÁ·Î±×·¥ ½ÇÇà½Ã°£¿¡¼ ¾ÆÁÖ ÀûÀº ºÎºÐÀ» Â÷ÁöÇÏ°í ÀÖ´Ù´Â °ÍÀ» ¸»ÇØ ÁØ´Ù. µû¶ó¼ ÀÌ·± ÇÔ¼ö´Â ÃÖÀûȸ¦ ÇÑ´ÙÇصµ º°·Î À̵æÀÌ ¾øÀ½À» ¾Ë ¼ö ÀÖ´Ù.
½ÇÇà ½Ã°£°ú °ü·ÃµÈ ¼öÄ¡ °ªÀÇ Á¤È®¼ºÀ» ³ôÀÏ ¼ö ÀÖ´Â ¹æ¹ýÀÇ Çϳª´Â ÇÁ·Î±×·¥¿¡¼
»ç¿ëÇÏ´Â ÀÔ·Â µ¥ÀÌÅÍÀÇ ·®À» ´Ã·Á¼ ÇÁ·Î±×·¥ ½ÇÇà½Ã°£ÀÌ ±æ¾îÁö°Ô ÇÏ´Â °ÍÀÌ´Ù(
´Ü, ¿©±â¼ ÀÔ·Â µ¥ÀÌÅÍÀÇ Æ¯¼ºÀ» À¯»çÇÏ°Ô À¯ÁöµÇ¾î¾ß ÇÑ´Ù). ¶Ç´Ù¸¥ ¹æ¹ýÀ¸·Î´Â
¾Æ·¡¿¡¼ Á¦½ÃÇÑ °Í°ú °°ÀÌ gprof
ÀÇ `-s' ¿É¼ÇÀ» »ç¿ëÇÏ¿©
¿©·¯ ¹øÀÇ ·±À» ÅëÇØ ¾ò¾îÁø ´©Àû µ¥ÀÌÅ͸¦ Á¾ÇÕÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
gprof -s executable-file gmon.out gmon.sum
gprof executable-file gmon.sum > output-file
children
ÇʵåÀÇ
½Ã°£°ª ÃßÁ¤
Call graph¿¡ ÀÖ´Â ¼öÄ¡Áß ÀϺΠ°ªÀº ÃßÁ¤Ä¡(estimate)ÀÌ´Ù. ¿¹¸¦ µé¾î,
children
ÇʵåÀÇ ½Ã°£ °ª°ú call-line ¶Ç´Â subroutine-line¿¡ ÀÖ´Â
¸ðµç ½Ã°£ °ü·Ã ¼öÄ¡´Â ÃßÁ¤°ªÀÌ´Ù.
ÇÁ·ÎÆÄÀÏ µ¥ÀÌÅÍ ÀÚü¿¡´Â ÀÌµé °ª¿¡
´ëÇÑ Á÷Á¢ÀûÀÎ Á¤º¸°¡ Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡, gprof
Àº ¾î¶² °¡Á¤ÇÑ »óÅÂÇÏ¿¡¼ ÃßÁ¤ÇÏ°Ô µÈ´Ù(gprof
°¡ ÃßÁ¤¿¡ »ç¿ëÇÑ
°¡Á¤µéÀº ¸ÂÀ» ¼öµµ ÀÖ°í Ʋ¸± ¼öµµ ÀÖ´Ù) .
gprof
°¡ ÃßÁ¤¿¡ »ç¿ëÇÏ´Â °¡Á¤Áß
Çϳª´Â "ÀÓÀÇÀÇ ÇÔ¼ö foo
¿¡
´ëÇÑ °¢°¢ÀÇ È£Ãâ¿¡ ¼Ò¿äµÈ Æò±Õ½Ã°£°ú foo
ÇÔ¼öÀÇ caller¿Í´Â »ó°ü
°ü°è(correlation)°¡ ¾ø´Ù"ÀÌ´Ù. ¿¹¸¦ µé¾î
foo
°¡ ÀüüÀûÀ¸·Î 5 Ãʸ¦ »ç¿ëÇÏ¿´°í,
foo
ÇÔ¼ö¿¡ ´ëÇÑ ÃÑ È£ÃâȽ¼öÀÇ 2/5°¡ ÇÔ¼ö a
¿¡¼ÀÇ
È£ÃâÀ̾ú´Ù¸é, a
ÇÔ¼öÀÇ
children
ÇʵåÀÇ ½Ã°£Áß¿¡¼ 2ÃÊ´Â foo
ÇÔ¼ö°¡ ¸¸µé¾î
³½ °ÍÀÌ´Ù.
gprof
ÀÌ ÃßÁ¤Ä¡¸¦ °è»êÇÒ
¶§ »ç¿ëÇÑ À§ÀÇ °¡Á¤Àº ÀϹÝÀûÀ¸·Î ¹«¸®°¡ ¾øÁö¸¸, ¾î¶² ƯÁ¤ ÇÁ·Î±×·¥¿¡¼´Â ÀÌ·¯ÇÑ
°¡Á¤ÀÌ À߸øµÈ °ÍÀÏ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î i) foo
ÇÔ¼öÀÇ ÀÎÀÚ°¡
0ÀÏ ¶§ ¾ÆÁÖ »¡¸® ¸®ÅÏÇÏ°í, ii) a
ÇÔ¼ö´Â Ç×»ó ÀÎÀÚ·Î 0À» »ç¿ëÇÏ¿©
foo
ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹Ý¸é iii) foo
ÇÔ¼ö¸¦ È£ÃâÇÏ´Â
´Ù¸¥ callerµéÀº 0ÀÌ ¾Æ´Ñ ¾Æ±Ô¸ÕÆ®¸¦ Àü´ÞÇÑ´Ù°í °¡Á¤ÇÒ ¶§, foo
ÇÔ¼ö¸¦
È£ÃâÇßÀ» ¶§ ¼ÒºñµÈ ½Ã°£ÀÇ ÃÑÇÕÀº a
ÇÔ¼ö¸¦ Á¦¿ÜÇÑ ´Ù¸¥ caller ÇÔ¼öµé¿¡¼ÀÇ
È£Ãâ¿¡ ÀÇÇØ °áÁ¤µÈ´Ù. ±×·¯³ª gprof
¿¡¼´Â ÀÌ·¯ÇÑ »óȲÀ» ¾Ë ¹æ¹ýÀÌ
¾ø±â ¶§¹®¿¡, ¹«Á¶°Ç foo
ÇÔ¼ö°¡ ¼ÒºñÇÑ ½Ã°£Áß 2ÃÊ(=5ÃÊ * 2/5)¸¦
a
ÇÔ¼öÀÇ
children
Çʵ忡 ´õÇعö¸°´Ù.
À§¿Í °°Àº »óȲÀ» ÆÇ´ÜÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» °í¾ÈÇس¾ ¼ö ÀÖ´Ù¸é, ÃßÈÄ¿¡ Á»´õ ¿Ïº®ÇÑ
µ¥ÀÌŸ¸¦ `gmon.out'¿¡ Ãß°¡ÇÏ¿© ÇöÀç gprof
¿¡¼ »ç¿ëÇÏ°í
ÀÖ´Â °¡Á¤»çÇ×µéÀÌ ´õ ÀÌ»ó ÇÊ¿äÇÏÁö ¾Ê°Ô µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù¶÷ÀÌ´Ù. ¾î·µç ÇöÀç
gprof
¿¡¼ »ç¿ëµÇ´Â ÃßÁ¤Ä¡´Â ¸¹Àº °æ¿ì À¯¿ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù(À߸øµÉ
ÃßÁ¤À» ÇÒ ¼öµµ ÀÖÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì¿¡ ÀûÀýÇÑ ÃßÁ¤Ä¡¸¦ Á¦°øÇÑ´Ù).