gprof
ÀÇ Ãâ·Â °á°ú
Çؼ®
gprof
Àº ¿©·¯ °¡Áö ´Ù¸¥ Ãâ·Â ½ºÅ¸ÀÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̵é Ãâ·Â
½ºÅ¸ÀÏÁß °¡Àå Áß¿äÇÑ °ÍÀ» ¾Æ·¡¿¡¼ ¼³¸íÇÑ´Ù. °¡Àå ´Ü¼øÇÑ ÇüÅÂÀÇ Ãâ·Â ½ºÅ¸ÀÏ(
ÆÄÀÏ Á¤º¸, ½ÇÇà Ƚ¼ö, ÇÔ¼ö ¹× ÆÄÀÏÀÇ ¼ø¼)¿¡ ´ëÇÑ ¼³¸íÀº ÇÏÁö ¾ÊÁö¸¸, ÇÊ¿äÇÑ
°æ¿ì °¢°¢ÀÇ ¿É¼Ç¿¡ ´ëÇÑ ¼³¸í¿¡¼ ¹®¼È µÇ¾î ÀÖ´Ù. Ãâ·Â°ú
°ü·ÃµÈ ¿É¼Ç ¼½¼Ç Âü°í
Flat profile Àº ÇÁ·Î±×·¥ ³»ÀÇ °¢°¢ÀÇ ÇÔ¼öµéÀ» ½ÇÇàÇϴµ¥ ¼ÒºñÇÑ ÃÑ ½Ã°£À» º¸¿©ÁØ´Ù. `-z' ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Â °æ¿ì¿¡ ½Ã°£À» ÀüÇô ¼ÒºñÇÏÁö ¾Ê¾Ò°Å³ª, È£ÃâÀÌ ÀüÇô ¾ø¾ú´ø ÇÔ¼öµéÀº °á°ú Ãâ·Â¿¡¼ Á¦¿ÜµÈ´Ù. ÇÁ·ÎÆÄÀϸµ ¿É¼ÇÀ¸·Î ÄÄÆÄÀÏ µÇÁö ¾ÊÀº ¸ðµâ¿¡ ÀÖ´Â ÇÔ¼ö ¶Ç´Â ÇÁ·Î±×·¥ Ä«¿îÅÍ È÷½ºÆ®·Î±×·¥¿¡ Ç¥½ÃµÉ ¼ö ÀÖ´Â ½Ã°£º¸´Ù ÀûÀº ½Ã°£µ¿¾È ½ÇÇàµÈ ÇÔ¼öÀÌ Æ÷ÇԵǾî ÀÖ´Ù¸é ÀüÇô È£ÃâÀÌ ¾ø¾ú´ø ÇÔ¼öµé°ú ±¸ºÐÀ» ÇÒ ¼ö ¾ø´Ù´Â Á¡¿¡ À¯ÀÇÇÏ¿©¾ß ÇÑ´Ù.
¾Æ·¡ÀÇ ¿¹´Â flat profileÀÇ ÀϺθ¦ º¸¿©ÁÖ°í ÀÖ´Ù.
Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ms/call ms/call name 33.34 0.02 0.02 7208 0.00 0.00 open 16.67 0.03 0.01 244 0.04 0.12 offtime 16.67 0.04 0.01 8 1.25 1.25 memccpy 16.67 0.05 0.01 7 1.43 1.43 write 16.67 0.06 0.01 mcount 0.00 0.06 0.00 236 0.00 0.00 tzset 0.00 0.06 0.00 192 0.00 0.00 tolower 0.00 0.06 0.00 47 0.00 0.00 strlen 0.00 0.06 0.00 45 0.00 0.00 strchr 0.00 0.06 0.00 1 0.00 50.00 main 0.00 0.06 0.00 1 0.00 0.00 memcpy 0.00 0.06 0.00 1 0.00 10.11 print 0.00 0.06 0.00 1 0.00 0.00 profil 0.00 0.06 0.00 1 0.00 50.00 report ...
Ãâ·Â °á°ú¿¡¼ ÇÔ¼ö´Â ¼ÒºñÇÑ ½ÇÇà ½Ã°£ÀÇ ³»¸² Â÷¼øÀ¸·Î ¸ÕÀú Á¤·ÄµÈ ÈÄ, È£ÃâµÈ Ƚ¼öÀÇ ³»¸² Â÷¼øÀ¸·Î µÇ°í, ´Ù½Ã ÇÔ¼ö¸í¿¡ µû¶ó Á¤·ÄµÈ´Ù. `mcount' ÇÔ¼ö¿Í `profil' ÇÔ¼ö´Â ÇÁ·ÎÆÄÀϸµÀ» À§ÇÑ ³»ºÎ ÇÔ¼ö·Î ¸ðµç flat profile¿¡ Æ÷ÇԵȴÙ. `mcount' ÇÔ¼ö¿Í `profil' ÇÔ¼ö¿¡ ¼Ò¿äµÈ ½Ã°£À» »ìÆ캽À¸·Î½á ÇÁ·ÎÆÄÀϸµ¿¡ µû¸¥ ¿À¹öÇìµå¸¦ ÃøÁ¤ÇÒ ¼ö ÀÖ´Ù.
Ä÷³ À̸§(column headers) ÀÌÀüÀÇ ¶óÀÎÀº °¢°¢ÀÇ »ùÇøµ °£°Ý Ç¥½ÃÇÏ´Â ÇàÀÌ ÀÖ´Ù. ÀÌ sampling period ¸¦ »ç¿ëÇÏ¿© ½Ã°£À» ³ªÅ¸³»´Â °¢°¢ÀÇ ¼öÄ¡ÀÇ ¿ÀÂ÷ÀÇ ÇѰ踦 ÃßÁ¤ÇÒ ¼ö ÀÖ´Ù. ½Ã°£À» ³ªÅ¸³»´Â ¼öÄ¡°¡ sampling period º¸´Ù Å©Áö ¾ÊÀº °æ¿ì ÀÌ ¼öÄ¡´Â ½Å·ÚÇÒ ¾ø´Â °ªÀÌ´Ù. À§ÀÇ ¿¹¿¡¼ °¢°¢ÀÇ »ùÇÃÀº 0.01ÃÊ·Î Ä«¿îÆ®µÇ¾î ÀÖ´Ù. ÀÌ´Â 100HzÀÇ sampling rate¸¦ ³ªÅ¸³½´Ù. ÇÁ·Î±×·¥ÀÇ ÃÑ ½ÇÇà ½Ã°£Àº `cumulative seconds' Çʵ忡¼ ¾Ë ¼ö ÀÖµíÀÌ 0.06ÃÊÀÌ´Ù. °¢°¢ÀÇ »ùÇÃÀÌ 0.01ÃÊ °£°ÝÀ¸·Î ¼öÁýµÇ¾úÀ¸¹Ç·Î, ÀÌ ÇÁ·Î±×·¥ÀÇ ½ÇÇàÁß¿¡ ¿©¼¸ ¹øÀÇ »ùÇøµÀÌ ÀÖ¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù. `self seconds' ÇʵåÀÇ °ªÀ¸·ÎºÎÅÍ ¿©¼¸ ¹øÀÇ »ùÇøµ Áß µÎ °³´Â ÇÁ·Î±×·¥ÀÌ `open' ÇÔ¼ö³»¿¡ ÀÖÀ» ¶§ ÀϾÀ½À» ¾Ë ¼ö ÀÖ´Ù. ´Ù¸¥ ³× ¹øÀÇ »ùÇøµÀº °¢°¢ `offtime', `memccpy', `write', ¿Í `mcount' ÇÔ¼ö¿¡¼ Çѹø¾¿ ¹ß»ýÇÏ¿´´Ù. »ùÇøµÀÌ ¿©¼¸ ¹ø¹Û¿¡ ¹ß»ýÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î, ÀÌµé °ªÁß ¾î´À °Íµµ ½Å·ÚÇÒ ¸¸ÇÑ °ÍÀ¸·Î º¸±â´Â ¾î·Æ´Ù. Áï µ¿ÀÏÇÑ ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇÏ´Â °æ¿ì `mcount' ÇÔ¼öÀÇ `self seconds' ´Â 0.00' ¶Ç´Â `0.02'ÀÌ µÉ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇÑ Á»´õ »ó¼¼ÇÑ ³»¿ëÀº Åë°èÀû »ùÇøµ¿¡ µû¸¥ ¿À·ù ¼½¼ÇÀ» Âü°íÇϱ⠹ٶõ´Ù.
`self seconds' ÇÊµå °ªÀÌ `0.00'ÀÎ ÇÔ¼öµéÀº È÷½ºÅä±×·¥ »ùÇÿ¡¼´Â Ç¥½ÃµÇÁö ¾Ê´Â´Ù. ±×·¯³ª call graph »ó¿¡¼ À̵é ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀÌ ÀÖ¾ú´ø °ÍÀ¸·Î ³ªÅ¸³´Ù¸é ¸®½ºÆõǾî¾ß ÇϹǷÎ, È£Ãâ Ƚ¼ö¸¦ ³ªÅ¸³»´Â `calls' ÇʵåÀÇ ³»¸²Â÷¼øÀ¸·Î Ç¥½ÃµÈ´Ù. À̵é ÇÔ¼ö°¡ ½ÇÇàµÇ´Âµ¥ ½Ã°£ÀÌ ¼ÒºñµÇ±â´Â ÇßÁö¸¸, È÷½ºÅä±×·¥ »ùÇÃÀÇ ¾çÀÌ Àû±â ¶§¹®¿¡ °¢°¢ÀÇ ÇÔ¼ö¿¡¼ ¾ó¸¶¸¸ÅÀÇ ½Ã°£ÀÌ ¼ÒºñµÇ¾ú´Â Áö¸¦ ÆÇ´ÜÇÒ ¼ö°¡ ¾ø´Ù.
°¢ ¶óÀο¡ ÀÖ´Â ÇʵåµéÀÇ Àǹ̴ ´ÙÀ½°ú °°´Ù.
% time
cumulative seconds
self seconds
calls
self ms/call
total ms/call
name
Call graph ´Â °¢°¢ÀÇ ÇÔ¼ö¿Í ±× ÇÔ¼öÀÇ ÀÚ½Ä ÇÔ¼ö(children)¿¡¼ ¼ÒºñµÈ ½Ã°£ÀÇ ¾çÀ» º¸¿©ÁØ´Ù. call graphÀÇ Á¤º¸¸¦ ÀÌ¿ëÇϸé ÇÔ¼ö ÀÚü¿¡¼ ¸¹Àº ½Ã°£À» ¼ÒºñÇÏÁö´Â ¾ÊÁö¸¸, ÇÔ¼ö ³»ºÎ¿¡ ½Ã°£ ¼Òºñ·®ÀÌ ¸¹Àº ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â ÇÔ¼öµéÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù.
´ÙÀ½¿¡ ¿¹½ÃÇÏ´Â call ÀÇ ¿¹´Â ¾ÕÀåÀÇ flat profileÀÇ ¿¹Á¦¿¡¼ »ç¿ëÇÑ ÇÁ·Î±×·¥¿¡
´ëÇÑ gprof
½ÇÇàÀ¸·ÎºÎÅÍ ¾òÀº call graph¿¡¼ ¹ßÃéÇÑ °ÍÀÌ´Ù.
granularity: each sample hit covers 2 byte(s) for 20.00% of 0.05 seconds index % time self children called name <spontaneous> [1] 100.0 0.00 0.05 start [1] 0.00 0.05 1/1 main [2] 0.00 0.00 1/2 on_exit [28] 0.00 0.00 1/1 exit [59] ----------------------------------------------- 0.00 0.05 1/1 start [1] [2] 100.0 0.00 0.05 1 main [2] 0.00 0.05 1/1 report [3] ----------------------------------------------- 0.00 0.05 1/1 main [2] [3] 100.0 0.00 0.05 1 report [3] 0.00 0.03 8/8 timelocal [6] 0.00 0.01 1/1 print [9] 0.00 0.01 9/9 fgets [12] 0.00 0.00 12/34 strncmp <cycle 1> [40] 0.00 0.00 8/8 lookup [20] 0.00 0.00 1/1 fopen [21] 0.00 0.00 8/8 chewtime [24] 0.00 0.00 8/16 skipspace [44] ----------------------------------------------- [4] 59.8 0.01 0.02 8+472 <cycle 2 as a whole> [4] 0.01 0.02 244+260 offtime <cycle 2> [7] 0.00 0.00 236+1 tzset <cycle 2> [26] -----------------------------------------------
Á¡¼±À¸·Î Ç¥½ÃµÈ ¶óÀÎÀº Å×À̺íÀ» ¿£Æ®¸®(entry)º°·Î ±¸ºÐÇϱâ À§ÇÑ °ÍÀÌ´Ù. °¢°¢ÀÇ ÇÔ¼ö¿¡ ÇϳªÀÇ ¿£Æ®¸®°¡ ´ëÀÀÇϸç, °¢°¢ÀÇ ¿£Æ®¸®¿¡´Â Çϳª ÀÌ»óÀÇ ¶óÀεéÀÌ ÀÖ´Ù.
°¢°¢ÀÇ ¿£Æ®¸®¿¡¼ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ(primary line)Àº '['¿Í ']'·Î µÑ·¯½ÎÀÎ À妽º ¹øÈ£·Î ½ÃÀÛÇÑ´Ù. ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ ¸¶Áö¸· ¿¿¡´Â ÇØ´ç ¿£Æ®¸®°¡ ¾î¶² ÇÔ¼ö¿¡ ´ëÇÑ °ÍÀÎÁö¸¦ ³ªÅ¸³½´Ù. ÇÑ °³ÀÇ ¿£Æ®¸®¾È¿¡¼ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ ¾Õ¿¡ ÀÖ´Â ¶óÀÎÀº ÇÁ¶óÀ̸Ӹ® ¶óÀο¡¼ ³ªÅ¸³»´Â ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÔ¼ö(callers)µéÀ» ³ªÅ¸³ª¸ç, ÇÁ¶óÀ̸Ӹ® ¶óÀÎ µÚ¿¡ ÀÖ´Â ¶óÀÎÀº ÇÁ¶óÀ̸Ӹ® ¶óÀο¡¼ ³ªÅ¸³»´Â ÇÔ¼öÀÇ ¼ºê·çƾ( call graph¿¡¼´Â ÀÚ½Ä ÇÔ¼ö- children -À¸·Îµµ ÁöĪÇÑ´Ù)µéÀ» ³ªÅ¸³½´Ù. ¼ºê·çƾ(subroutine)Àº ¿©±â¼ ÇØ´ç ÇÔ¼öÀÇ ³»ºÎ¿¡¼ È£ÃâµÇ´Â ÇÔ¼ö(callee)¸¦ ÁöĪÇÑ´Ù.
¿£Æ®¸®µéÀº ÇØ´ç ÇÔ¼ö¿Í ÇØ´ç ÇÔ¼öÀÇ ¼ºê·çƾ¿¡¼ ¼ÒºñµÈ ½Ã°£À¸·Î Á¤·ÄµÈ´Ù.
ÇÁ·ÎÆÄÀϸµÀ» À§ÇÑ ³»ºÎ ÇÔ¼ö mcount
(Flat Profile
¼½¼Ç ÂüÁ¶)´Â call graph¿¡¼ °í·ÁÇÏÁö ¾Ê´Â´Ù.
ÇϳªÀÇ call graph ¿£Æ®¸®³»¿¡ ÀÖ´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎ(primary line )Àº ÇöÀç ¿£Æ®¸®°¡ ³ªÅ¸³»´Â ÇÔ¼ö°¡ ¾î¶² ÇÔ¼öÀÎÁö¸¦ ¼³¸íÇÏ°í ÇØ´ç ÇÔ¼ö¿¡ ´ëÇÑ ¸ðµç Åë°èÁ¤º¸¸¦ Á¦½ÃÇÑ´Ù.
¾Æ·¡ÀÇ ¿¹´Â ´ÙÀ½ÀÇ ¼³¸í¿¡¼ ÂüÁ¶Çϱâ ÁÁµµ·Ï ÇʵåÀÇ À̸§À» ³ªÅ¸³»´Â Çìµù
¶óÀÎ, report
ÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®¿¡ ÀÖ´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀ» ÇÔ²² ³ªÅ¸³½°ÍÀÌ´Ù.
index % time self children called name ; Çìµù ¶óÀÎ ...
[3] 100.0 0.00 0.05 1 report [3] ; ÇÁ¶óÀ̸Ӹ® ¶óÀÎ
ÇÁ¶óÀ̸Ӹ® ¶óÀο¡ ÀÖ´Â ÇʵåµéÀÌ °¡Áö´Â Àǹ̴ ´ÙÀ½°ú °°´Ù.
index
% time
self
seconds
Çʵ忡 ÀÖ´Â °ª°ú °°¾Æ¾ß ÇÑ´Ù.children
self
Çʵ尪°ú children
Çʵ尪µéÀ» ÀüºÎ ´õÇÑ °ª°ú ÀÏÄ¡ÇÏ¿©¾ß
ÇÑ´Ù.called
report
ÇÔ¼ö´Â main¿¡¼ 1ȸ È£ÃâµÇ¾úÀ½À»
¾Ë ¼ö ÀÖ´Ù.name
gnurr
½ÎÀÌŬ ¹øÈ£
1ÀÇ ÀϺκÐÀÌ°í À妽º ¹øÈ£°¡ 12¶ó¸é ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ name
Çʵå´Â ´ÙÀ½°ú °°ÀÌ Ãâ·ÂµÈ´Ù.gnurr <cycle 1> [12]
ÇϳªÀÇ ÇÔ¼ö¿¡ ´ëÀÀÇÏ´Â ¿£Æ®¸®¿¡´Â ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÔ¼ö¸¦ °¢°¢ ³ªÅ¸³»´Â ¶óÀÎ(caller-line)µéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ÀÌµé ¶óÀÎÀÇ Çʵå´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ Çʵå¿Í ÀÏÄ¡ÇÏÁö¸¸ ÇʵåÀÇ Àǹ̴ ÇÁ¶óÀ̸Ӹ® ¶óÀο¡¼ÀÇ ÇʵåÀÇ Àǹ̿ʹ ´Ù¸£´Ù.
¾Æ·¡ÀÇ ¿¹´Â ´ÙÀ½ÀÇ ¼³¸í¿¡¼ÀÇ ÂüÁ¶¸¦ ÆíÇÏ°Ô Çϵµ·Ï ÇʵåÀ̸§À» ³ªÅ¸³»´Â Çìµù
¶óÀÎ,
report
ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÔ¼öµé¿¡ ´ëÇÑ ·¹ÄÚµåÀÎ caller-line, °ú report
ÇÔ¼ö¿¡
´ëÇÑ ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀ» ÇÔ²² ³ªÅ¸³½ °ÍÀÌ´Ù.
index % time self children called name ; Çìµù¶óÀÎ
... 0.00 0.05 1/1 main [2] ; caller line
[3] 100.0 0.00 0.05 1 report [3] ; ÇÁ¶óÀ̸Ӹ® ¶óÀÎ
main
ÇÔ¼ö¿¡¼ È£ÃâµÈ report
ÇÔ¼öÀÇ caller-line¿¡¼ÀÇ °¢ ÇʵåÀÇ Àǹ̴ ´ÙÀ½°ú °°´Ù.
self
main
ÇÔ¼ö¿¡¼ È£ÃâµÇ¾úÀ» ¶§ report
ÇÔ¼öÀÚ½ÅÀÌ ¼ÒºñÇÑ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡children
main
ÇÔ¼ö¿¡¼ È£ÃâµÇ¾úÀ» ¶§ report
ÇÔ¼öÀÇ ¼ºê·çƾ¿¡¼ ¼ÒºñÇÑ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡. self
Çʵå¿Í children
ÇʵåÀÇ
°ªÀº ÇÕÀº main
ÇÔ¼ö¿¡¼ report
ÇÔ¼ö¸¦ È£Ã⵿¾È¿¡ ¼ÒºñµÈ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡°¡ µÈ´Ù.called
main
ÇÔ¼ö¿¡¼ report
ÇÔ¼ö¸¦ È£ÃâÇÑ È½¼ö¸¦ ³ªÅ¸³»°í
µÎ ¹ø° ¼öÄ¡´Â report
ÇÔ¼öÀÇ ¸ðµç caller¿¡¼ report
ÇÔ¼ö¸¦ ºñÀç±ÍÀûÀ¸·Î È£ÃâÇÑ È½¼öÀÇ ÃÑÇÕÀ» ³ªÅ¸³½´Ù.name and index number
report
ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÔ¼ö(caller)ÀÇ À̸§À» ³ªÅ¸³½´Ù. caller ÇÔ¼öÀÇ
À妽º°¡ ÇÔ¼ö¸íµÚ¿¡ Ãß°¡µÈ´Ù. ¸ðµç ÇÔ¼öµéÀÌ call graph¿¡ ³ªÅ¸³ª´Â °ÍÀº ¾Æ´Ï´Ù.
Áï, gprof
¸í·ÉÀÇ ¿É¼Ç ÁöÁ¤¿¡ µû¶ó ƯÁ¤ ÇÔ¼ö´Â call graph¿¡
³ªÅ¸³ªÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. caller ÇÔ¼öÀÇ ¿£Æ®¸®°¡ ¾ø´Â °æ¿ì¿¡µµ callerÇÔ¼ö°¡
È£ÃâÇÑ ÇÔ¼ö(callee)ÀÇ ¿£Æ®¸®¿¡ caller linesÀÌ ÀÖÀ» ¼öµµ ÀÖ´Ù. callerÇÔ¼ö°¡
Àç±Í ½ÎÀÌŬÀÇ ÀϺκÐÀÏ °æ¿ì¿¡´Â ½ÎÀÌŬ ¹øÈ£°¡ callerÇÔ¼ö À̸§°ú À妽º ¹øÈ£»çÀÌ¿¡
Ãâ·ÂµÈ´Ù.
ÇØ´çÇÔ¼öÀÇ caller ÇÔ¼ö¸¦ È®ÀÎÇÒ ¼ö ¾ø´Â °æ¿ì¿¡, dummy caller lineÀÌ Ãâ·ÂµÇ°í
dummy caller-line¿¡¼ callerÇÔ¼öÀÇ À̸§À» ³ªÅ¸³»´Â name
Çʵå´Â
`<spontaneous>'·Î Ç¥½ÃµÇ°í ³ª¸ÓÁö Çʵå´Â °ø¶õÀ¸·Î
ä¿öÁø´Ù. caller ÇÔ¼ö°¡ ½Ã±×³Î Çڵ鷯 ÇÔ¼öÀÎ °æ¿ì¿¡ dummy caller-line °¡ µÈ´Ù.
ÇϳªÀÇ ÇÔ¼ö¿¡ ´ëÀÀÇÏ´Â ¿£Æ®¸®¿¡´Â ÀÌ ÇÔ¼öÀÇ ³»ºÎ¿¡¼ È£ÃâÇÑ ÇÔ¼öµé(subrountin¶Ç´Â callee)À» °¢°¢ ³ªÅ¸³»´Â ¶óÀÎ(subroutine-line)µéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. callee-lineÀÇ Çʵå´Â ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ Çʵå¿Í µ¿ÀÏÇÏÁö¸¸, ÇʵåÀÇ Àǹ̴ ´Þ¶óÁø´Ù.
¾Æ·¡ÀÇ ¿¹´Â ´ÙÀ½ÀÇ ¼³¸í¿¡¼ÀÇ ÂüÁ¶¸¦ ÆíÇÏ°Ô Çϵµ·Ï ÇʵåÀ̸§À» ³ªÅ¸³»´Â Çìµù
¶óÀÎ,
main
ÇÔ¼ö¿¡ ´ëÇÑ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ, main
ÇÔ¼ö³»ºÎ¿¡¼
È£ÃâÇÑ ÇÔ¼öµé¿¡ ´ëÇÑ ·¹ÄÚµåÀÎ callee-lineÀ» ÇÔ²² ³ªÅ¸³½ °ÍÀÌ´Ù.
index % time self children called name ; Çìµù ¶óÀÎ ... [2] 100.0 0.00 0.05 1 main [2] ; mainÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®ÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀÎ
0.00 0.05 1/1 report [3] ; main ÇÔ¼ö¿¡¼ È£ÃâÇÑ ÇÔ¼ö¿¡ ´ëÇÑ subroutine-line
report
ÇÔ¼ö¸¦ È£ÃâÇÏ´Â main
ÇÔ¼ö¿¡ ´ëÀÀÇÏ´Â ¿£Æ®¸®¿¡¼ÀÇ subroutine-line¿¡¼ÀÇ °¢°¢ÀÇ Çʵå´Â ´ÙÀ½°ú °°Àº
Àǹ̸¦ °¡Áø´Ù.
self
main
ÇÔ¼ö¿¡¼ È£ÃâµÈ report
ÇÔ¼ö ³»ºÎ¿¡¼¸¸ Á÷Á¢ÀûÀ¸·Î
¼ÒºñµÈ ½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡¸¦ ³ªÅ¸³½´Ù.children
main
ÇÔ¼ö¿¡¼ È£ÃâµÈ report
ÇÔ¼öÀÇ ¼ºê·çƾ¿¡¼ ¼ÒºñµÈ
½Ã°£¿¡ ´ëÇÑ ÃßÁ¤Ä¡¸¦ ³ªÅ¸³½´Ù. self
Çʵå¿Í children
Çʵ忡
ÀÖ´Â °ªÀ» ´õÇÑ °ªÀº main
ÇÔ¼ö¿¡¼ È£ÃâµÈ report
ÇÔ¼ö¿¡¼
¼ÒºñµÈ ½Ã°£ÀÇ ÃÑ·®¿¡ ´ëÇÑ ÃßÁ¤Ä¡ÀÌ´Ù.called
called
Çʵå´Â '/'·Î ±¸ºÐµÇ´Â µÎ °³ÀÇ °ªÀ» °¡Áø´Ù. ù ¹ø° °ªÀº main
ÇÔ¼ö¿¡¼ report
ÇÔ¼ö¸¦ È£ÃâÇÑ È½¼ö¸¦ ³ªÅ¸³»°í, µÎ ¹ø° °ªÀº report
ÇÔ¼ö¿¡
´ëÇÑ ºñÀç±ÍÀû È£ÃâÀÇ ÃÑ È½¼ö¸¦ ³ªÅ¸³½´Ù. ÀÌ µÎ °ªÀÇ ºñÀ²·ÎºÎÅÍ main
ÇÔ¼ö¿¡
±âÀÎÇÑ report
ÇÔ¼öÀÇ self
Çʵå¿Í children
Çʵ忡 ÀÖ´Â ½Ã°£ÀÇ ¾çÀ» ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ
³»¿ëÀº children
¿¡¼ ¼ÒºñµÈ ½Ã°£·®ÀÇ
ÃßÁ¤ ¼½¼ÇÀ» Âü°íÇϱ⠹ٶõ´Ù.
name
main
ÇÔ¼öÀÇ ¼ºê·çƾÀÇ À̸§°ú ¼ºê·çƾÀÇ À妽º ¹øÈ£¸¦ ³ªÅ¸³½´Ù.
caller ÇÔ¼ö°¡ Àç±Í ½ÎÀÌŬÀÇ ÀϺκÐÀÏ °æ¿ì, ½ÎÀÌŬ ¹øÈ£°¡ ¼ºê·çƾ À̸§°ú
À妽º ¹øÈ£ »çÀÌ¿¡ Ãâ·ÂµÈ´Ù.
Call graph¿¡ Àç±Í È£ÃâÀÇ ½ÎÀÌŬ(cycles of recursion)ÀÌ Á¸ÀçÇÏ´Â °æ¿ì graph°¡
º¹ÀâÇØÁú ¼öµµ ÀÖ´Ù. ½ÎÀÌŬÀº ÇÔ¼ö a
°¡ ÇÔ¼ö b
¸¦
È£ÃâÇÏ°í, ÇÔ¼ö b
°¡ Á÷/°£Á¢ÀûÀ¸·Î ´Ù½Ã ¿ø·¡ÀÇ ÇÔ¼ö a
¸¦
È£ÃâÇÏ´Â »óȲ¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
µÎ °³ÀÇ ÇÔ¼ö°£¿¡ ¾ç¹æÇâÀ¸·Î call path°¡ ÀÖÀ¸¸é À̵é ÇÔ¼öµéÀº µ¿ÀÏ ½ÎÀÌŬ¿¡ ¼ÓÇÏ°Ô
µÈ´Ù. ÇÔ¼ö a
¿Í ÇÔ¼ö b
°¡ ¼·Î°¡ ¼·Î¸¦ È£ÃâÇÏ°í,
ÇÔ¼ö
b
¿Í ÇÔ¼ö c
°¡ ¼·Î°¡ ¼·Î¸¦ È£ÃâÇÏ´Â °æ¿ì, ÇÔ¼ö a,
b, c
´Â ÇϳªÀÇ ½ÎÀÌŬÀ» Çü¼ºÇÑ´Ù. ¿©±â¼ ÇÑ °¡Áö À¯ÀÇÇÒ Á¡Àº ÇÔ¼ö b
°¡
ÇÔ¼ö a
¸¦ È£ÃâÇÏ°í ÇÔ¼ö a
¿¡¼´Â ÇÔ¼ö b
¸¦
È£ÃâÇÏÁö ¾Ê´Â °æ¿ì¿¡µµ(
gprof
´ÂÀÌ·¯ÇÑ »óȲÀ» ±¸ºÐÇÒ ¼ö ¾ø±â ¶§¹®¿¡), a
¿Í b
¸¦
ÇϳªÀÇ ½ÎÀÌŬ·Î °£ÁÖÇÑ´Ù´Â °ÍÀÌ´Ù.
½ÎÀÌŬ¿¡´Â ¿¬¼ÓÀûÀÎ Á¤¼ö°ªÀ¸·Î ¹øÈ£°¡ ºÎ¿©µÈ´Ù. ¾î¶² ÇÔ¼ö°¡ ÇϳªÀÇ ½ÎÀÌŬ¿¡ ¼ÓÇÒ¶§¸¶´Ù, ¸Å¹ø ÇÔ¼öÀÇ À̸§ÀÌ call graph³»¿¡ ³ªÅ¸³ª°í ÇÔ¼ö À̸§µÚ¿¡ ÇÔ¼ö°¡ ¼ÓÇÏ´Â ½ÎÀÌŬ ¹øÈ£ `<cycle number>' Ãß°¡µÈ´Ù.
½ÎÀÌŬÀÌ ¹®Á¦°¡ µÇ´Â ÀÌÀ¯´Â ½ÎÀÌŬÀÌ Á¸ÀçÇÏ´Â °æ¿ì call graph³»¿¡ ÀÖ´Â ½Ã°£
°ªµé¿¡ ¸ð¼øÀÌ »ý±â±â ¶§¹®ÀÌ´Ù. ÇÔ¼ö a
ÀÇ children¿¡¼ ¼ÒºñµÈ ½Ã°£¿¡´Â
ÇÔ¼ö a
ÀÇ ¼ºê·çƾÀÎ b
¿Í b
ÀÇ ¼ºê·çƾ¿¡¼
¼ÒºñµÈ ½Ã°£ÀÌ Æ÷ÇԵǾî¾ß¸¸ ÇÏÁö¸¸, b
ÀÇ ¼ºê·çƾÁß¿¡´Â a
°¡
Àֱ⠶§¹®¿¡ ¹®Á¦°¡ µÈ´Ù. Áï, ÇÔ¼ö
a
°¡ °£Á¢ Àç±Í È£Ãâ ÇüÅÂÀ϶§, ÇÔ¼ö
a¿¡¼ÀÇ ½Ã°£Áß ¾ó¸¶¸¸ÅÀ» ÇÔ¼ö aÀÇ children¿¡¼ ¼ÒºñµÈ ½Ã°£¿¡ ¹Ý¿µÇÒ °ÍÀΰ¡¶ó´Â
Àǹ®ÀÌ »ý±â°Ô µÈ´Ù.
gprof
¿¡¼´Â ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÏ¿© ÀüüÀûÀÎ ½ÎÀÌŬ¿¡ ´ëÇÏ¿©
ÇϳªÀÇ ½Ì±Û ¿£Æ®¸®¸¦ ¸¸µç´Ù. ÀÌ ½Ì±Û ¿£Æ®¸®ÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀο¡ ½ÎÀÌŬÀ» Çü¼ºÇÏ°í
ÀÖ´Â ÇÔ¼öµé¿¡¼ Á÷Á¢ÀûÀ¸·Î ¼ÒºñµÈ ÃÑ ½Ã°£À» ±â¼úÇÑ´Ù. ½ÎÀÌŬÀÇ "¼ºê·çƾµé"Àº
½ÎÀÌŬÀ» ±¸¼ºÇÏ°í ÀÖ´Â °³º° ÇÔ¼öµé°ú ½ÎÀÌŬÀ» ±¸¼ºÇÏ°í ÀÖ´Â ÇÔ¼öµé¿¡¼ Á÷Á¢ÀûÀ¸·Î
È£ÃâµÈ ´Ù¸¥ ¸ðµç ÇÔ¼öµéÀÇ ÁýÇÕÀ¸·Î Á¤ÀÇÇÑ´Ù. ½ÎÀÌŬÀÇ "caller ÇÔ¼öµé"Àº
½ÎÀÌŬÀÇ ¿ÜºÎ¿¡ ÀÖ´Â ÇÔ¼öÁß ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÔ¼öµéÀÇ ÁýÇÕÀ¸·Î
Á¤ÀÇÇÑ´Ù.
´ÙÀ½ÀÇ ¿¹´Â ÇÔ¼ö a
¿Í ÇÔ¼ö b
°¡ Æ÷ÇÔµÈ ½ÎÀÌŬÀ» ³ªÅ¸³»´Â
call graphÀÇ ÀϺκÐÀÌÀÌ´Ù. main
ÇÔ¼ö¿¡¼ a
ÇÔ¼ö È£ÃâÀ»
ÅëÇÏ¿© ½ÎÀÌŬ¿¡ ÁøÀÔÇÏ°Ô µÇ°í ÇÔ¼ö a
¿Í b
´Â ¸ðµÎ ÇÔ¼ö
c
¸¦ È£ÃâÇÏ°í ÀÖ´Â »óȲÀÌ´Ù.
index % time self children called name ---------------------------------------- 1.77 0 1/1 main [2] [3] 91.71 1.77 0 1+5 <cycle 1 as a whole> [3] 1.02 0 3 b <cycle 1> [4] 0.75 0 2 a <cycle 1> [5] ---------------------------------------- 3 a <cycle 1> [5] [4] 52.85 1.02 0 0 b <cycle 1> [4] 2 a <cycle 1> [5] 0 0 3/6 c [6] ---------------------------------------- 1.77 0 1/1 main [2] 2 b <cycle 1> [4] [5] 38.86 0.75 0 1 a <cycle 1> [5] 3 b <cycle 1> [4] 0 0 3/6 c [6] ----------------------------------------
(ÀÌ ÇÁ·Î±×·¥¿¡ ´ëÇÑ Àüü call graph¿¡¼´Â Ãß°¡ÀûÀ¸·Î main
ÇÔ¼ö¿¡
´ëÇÑ ¿£Æ®¸®¿Í c
ÇÔ¼ö¿¡ ´ëÇÑ ¿£Æ®¸®°¡ Æ÷ÇԵǸç, main
ÇÔ¼ö´Â
a
, ÇÔ¼ö¸¦ È£ÃâÇÏ°í, ÇÔ¼ö c
´Â ÇÔ¼ö
a
¿Í ÇÔ¼ö b
¸¦ caller·Î °¡Áø´Ù.)
index % time self children called name <spontaneous> [1] 100.00 0 1.93 0 start [1] 0.16 1.77 1/1 main [2] ---------------------------------------- 0.16 1.77 1/1 start [1] [2] 100.00 0.16 1.77 1 main [2] 1.77 0 1/1 a <cycle 1> [5] ---------------------------------------- 1.77 0 1/1 main [2] [3] 91.71 1.77 0 1+5 <cycle 1 as a whole> [3] 1.02 0 3 b <cycle 1> [4] 0.75 0 2 a <cycle 1> [5] 0 0 6/6 c [6] ---------------------------------------- 3 a <cycle 1> [5] [4] 52.85 1.02 0 0 b <cycle 1> [4] 2 a <cycle 1> [5] 0 0 3/6 c [6] ---------------------------------------- 1.77 0 1/1 main [2] 2 b <cycle 1> [4] [5] 38.86 0.75 0 1 a <cycle 1> [5] 3 b <cycle 1> [4] 0 0 3/6 c [6] ---------------------------------------- 0 0 3/6 b <cycle 1> [4] 0 0 3/6 a <cycle 1> [5] [6] 0.00 0 0 6 c [6] ----------------------------------------
½ÎÀÌŬÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ self
Çʵå´Â ½ÎÀÌŬÀ» Çü¼ºÇÏ´Â ¸ðµç ÇÔ¼öµé¿¡¼
¼ÒºñµÈ ÃÑ ½Ã°£À» ³ªÅ¸³»¸ç ÀÌ °ªÀº ½ÎÀÌŬÀ» ±¸¼ºÇÏ´Â °³º° ÇÔ¼öµé¿¡¼ÀÇ self
Çʵ尪
(À̵é ÇÔ¼öÀÇ subroutine-line¿¡ ÀÖ´Â ¿£Æ®¸®¿¡¼ ÀÌ °ªÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù)ÀÇ ÇÕ°ú
°°°Ô µÈ´Ù.
½ÎÀÌŬÀÇ ÇÁ¶óÀ̸Ӹ® ¶óÀΰú subroutine-line¿¡ ÀÖ´Â children
ÇʵåÀÇ
°ªÀº ½ÎÀÌŬ ¿ÜºÎ¿¡ ÀÖ´Â ¼ºê·çƾ¸¸À» Ä«¿îÆ®ÇÑ °ªÀÌ´Ù. ÇÔ¼ö a
°¡
ÇÔ¼ö
b
¸¦ È£ÃâÇÏ¿´´ÙÇÏ¿©µµ, ÇÔ¼ö
b
¸¦ È£ÃâÇÑ ÇÔ¼öµé¿¡¼ ¼ÒºñµÈ ½Ã°£Àº ÇÔ¼ö
a
ÀÇ children
ÀÇ ½Ã°£¿¡´Â Ä«¿îÆ®µÇÁö ¾Ê´Â´Ù. µû¶ó¼,
b
¸¦ È£ÃâÇÑ ÇÔ¼öµéÀÇ ½Ã°£¿¡ ÇÔ¼ö a
·ÎÀÇ ¿ª¹æÇâ °£Á¢
Àç±Í È£Ãâ(indirect
recursive calls back to a
)ÀÌ Æ÷ÇԵǴ ¹®Á¦¸¦ ÇÇÇÒ ¼ö ÀÖ´Ù.
½ÎÀÌŬÀÇ ¿£Æ®¸®¿¡ ÀÖ´Â caller-lineÀÇ children
Çʵå´Âcaller°¡
½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¸¦ È£ÃâÇßÀ» ¶§, ½ÎÀÌŬ Àüü¿Í ½ÎÀÌŬÀÇ ´Ù¸¥ ¼ºê·çƾ¿¡¼
¿¡¼ ¼ÒºñµÈ ½Ã°£·®¿¡ ´ëÇÑ ÃßÁ¤°ªÀÌ´Ù
½ÎÀÌŬ¿¡ ÇØ´çÇÏ´Â ÇÁ¶óÀ̸Ӹ® ¶óÀο¡ ÀÖ´Â calls
Çʵå´Â µÎ °³ÀÇ
¼öÄ¡¸¦ °¡Áö°í ÀÖ´Ù. ù ¹ø° ¼öÄ¡´Â ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö°¡ ½ÎÀÌŬ ¿ÜºÎ¿¡ ÀÖ´Â
ÇÔ¼ö¿¡ ÀÇÇØ È£ÃâµÈ Ƚ¼öÀ̸ç, µÎ ¹ø° ¼öÄ¡´Â ½ÎÀÌŬ ³»¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ÀÇÇØ ½ÎÀÌŬ³»¿¡
ÀÖ´Â ÇÔ¼ö°¡ È£ÃâµÈ Ƚ¼öÀÌ´Ù( ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö°¡ ÀÚ±â ÀÚ½ÅÀ» È£ÃâÇßÀ» °æ¿ì,
ÀÌ ½Ã°£µµ Æ÷ÇÔµÈ °ªÀÌ´Ù). calls
Çʵ忡 ÀÖ´Â µÎ °³ÀÇ ¼öÄ¡°ªÀº
È£Ãâ Ƚ¼ö¸¦ Àç±Í È£Ãâ(recursive call) Ƚ¼ö°ú ºñÀç±Í È£Ãâ (nonrecursive call)
Ƚ¼ö·Î ºÐ·ùÇÑ °ÍÀÇ ÀϹÝÈÀÌ´Ù.
½ÎÀÌŬÀÇ ¿£Æ®¸®¿¡ ÀÖ´Â ½ÎÀÌŬÀ» ±¸¼ºÇÏ´Â ÇÔ¼ö¿¡ ´ëÇÑ subroutin-lineÀÇ calls
Çʵå´Â
±× ÇÔ¼ö°¡ ½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ÀÇÇØ È£ÃâµÈ Ƚ¼ö¸¦ ³ªÅ¸³½´Ù. ÀÌ Çʵ尪Àº ÀüºÎ
´õÇÑ °ªÀÌ ÇÁ¶óÀ̸Ӹ® ¶óÀÎÀÇ calls
ÇʵåÀÇ µÎ ¹ø° °ªÀÌ´Ù.
½ÎÀÌŬ³»¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ´ëÇÑ °³º° ¿£Æ®¸®¿¡´Â µ¿ÀÏÇÑ ½ÎÀÌŬ³»¿¡ ÀÖ´Â ´Ù¸¥ ÇÔ¼öµéÀÌ
¼ºê·çƾ(callees, subroutines)°ú callers·Î½á subroutine-line°ú caller-line¿¡
³ªÅ¸³¯ ¼öµµ ÀÖ´Ù. subroutine-line°ú caller-lineÀº ½ÎÀÌŬ³»¿¡ ÀÖ´Â °¢°¢ÀÇ ÇÔ¼ö°¡
È£ÃâµÈ Ƚ¼ö ¶Ç´Â ½ÎÀÌŬ³»¿¡¼ ¼·Î°£¿¡ ¾ó¸¶³ª È£ÃâÀÌ µÇ¾ú´ÂÁö¸¦ º¸¿©ÁØ´Ù. subroutine-line°ú
caller-line¿¡ ÀÖ´Â self
ÇÊµå ¹× children
Çʵå´Â Àç±ÍÈ£ÃâÀÌ
°è¼ÓµÉ ¶§ ÀÌ ÇʵåÀÇ Àǹ̸¦ Á¤ÀÇÇϱ⠰ï¶õÇϱ⠶§¹®¿¡ °ø¶õÀ¸·Î Ç¥½ÃÇÑ´Ù.
gprof
ÀÇ `-l' ¿É¼ÇÀ» »ç¿ëÇÏ¿© ÇÁ·Î±×·¥ÀÌ ¶óÀÎ ´ÜÀ§ÀÇ
ÇÁ·ÎÆÄÀϸµÀ» Çϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå¿¡¼, È÷½ºÅä±×·¥ »ùÇõéÀº
ÇÔ¼öº°·Î Àû¿ëµÇ´Â ´ë½Å¿¡ ¼Ò½º ÄÚµå ³»ÀÇ °¢°¢ÀÇ ¶óÀκ°·Î Àû¿ëµÈ´Ù. ¶óÀÎ ´ÜÀ§
ÇÁ·ÎÆÄÀϸµÀ» À§Çؼ´Â ¼Ò½ºÄÚµå ¶óÀο¡ ´ëÇÑ µð¹ö±ë ½Éº¼ Á¤º¸°¡ ÇÊ¿äÇϹǷÎ, µð¹ö±ë
½Éº¼ Á¤º¸¸¦ »ý¼ºÇϱâ À§Çؼ ÄÄÆÄÀÏ ½Ã¿¡ `-pg' ¿¡ `-g' ¿É¼ÇÀ»
Ãß°¡ÇÏ¿© ÄÄÆÄÀÏÇÏ¿©¾ß ÇÑ´Ù.
¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå¿¡¼ °¡Àå À¯¿ëÇÑ Ãâ·Â Å×À̺íÀº flat profileÀÌ´Ù.
ÇöÀç ¹öÀüÀÇ gprof
¿¡¼´Â call graph arcs¸¦ ¼Ò½º ÄÚµå ¶óÀο¡¼
ÇØ´ç ¼Ò½º ÄÚµå¶óÀÎÀ» Æ÷ÇÔÇÏ´Â ÇÔ¼ö·Î Àü´ÞÇÏÁö ¸øÇϱ⠶§¹®¿¡ call graph´Â ¶óÀÎ
´ÜÀ§ ÇÁ·ÎÆÄÀϸµ¸ðµå¿¡¼ ÀÏ¹Ý ¸ðµå(ÇÔ¼ö ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå)¿¡¼¸¸ÅÀº À¯¿ëÇÏÁö
¾Ê´Ù.
¾Æ·¡ÀÇ È¸é ´ýÇÁ´Â ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµÀ» »ç¿ëÇÏÁö ¾ÊÀº °æ¿ìÀÇ gprof
Ãâ·Â °á°úÀÇ ÇÑ ¿¹ÀÌ´Ù. ct_init
°¡ 4°³ÀÇ È÷½ºÅä±×·¥ hits¿¡ ÇØ´çÇÏ°í
init_block
ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀÌ
13327 ȸ ÀÖ¾úÀ½À» À¯ÀÇÇÏ¿© º¸±â ¹Ù¶õ´Ù.
Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls us/call us/call name 30.77 0.13 0.04 6335 6.31 6.31 ct_init Call graph (explanation follows) granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds index % time self children called name 0.00 0.00 1/13496 name_too_long 0.00 0.00 40/13496 deflate 0.00 0.00 128/13496 deflate_fast 0.00 0.00 13327/13496 ct_init [7] 0.0 0.00 0.00 13496 init_block
´ÙÀ½Àº µ¿ÀÏÇÑ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ°í, ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¸ðµå·Î gprof Ãâ·ÂÇßÀ»
¶§ÀÇ È¸é ´ýÇÁÀÇ ÀϺÎÀÌ´Ù. ct_init
¿¡¼ÀÇ
4°³ÀÇ È÷½ºÅä±×·¥ hits°¡ ¼Ò½ºÄڵ忡 ÀÖ´Â ³× °³ÀÇ ¶óÀκ°·Î ³ª´µ¾îÁ³À½À» À¯ÀÇÇÏ¿©
º¸±â ¹Ù¶õ´Ù. ¶óÀιøÈ£ 49, 351, 382, 385¿¡¼ °¢°¢ ÇϳªÀÇ hit°¡ ¹ß»ýÇÏ¿´À½À» º¼
¼ö ÀÖ´Ù. Call graph¿¡¼
ct_init
ÇÔ¼ö¿¡¼ init_block
ÇÔ¼ö¸¦ 13327 ¹ø È£ÃâÇÑ
°ªÀÌ ¶óÀÎ 396¿¡¼ÀÇ 1ȸ È£Ãâ, ¶óÀÎ 384¿¡¼ÀÇ 3071ȸ È£Ãâ, ¶óÀÎ 385¿¡¼ÀÇ 730 È£Ãâ,
¶óÀÎ 387¿¡¼ÀÇ 6525ȸ È£Ãâ·Î Á»´õ ¼¼ºÐÈÇÏ¿© ºÐ·ùµÈ °Íµµ ÁÖÀÇÇÏ¿© º¸¾Æ¾ß ÇÒ
ºÎºÐÀÌ´Ù.
Flat profile: Each sample counts as 0.01 seconds. % cumulative self time seconds seconds calls name 7.69 0.10 0.01 ct_init (trees.c:349) 7.69 0.11 0.01 ct_init (trees.c:351) 7.69 0.12 0.01 ct_init (trees.c:382) 7.69 0.13 0.01 ct_init (trees.c:385) Call graph (explanation follows) granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds % time self children called name 0.00 0.00 1/13496 name_too_long (gzip.c:1440) 0.00 0.00 1/13496 deflate (deflate.c:763) 0.00 0.00 1/13496 ct_init (trees.c:396) 0.00 0.00 2/13496 deflate (deflate.c:727) 0.00 0.00 4/13496 deflate (deflate.c:686) 0.00 0.00 5/13496 deflate (deflate.c:675) 0.00 0.00 12/13496 deflate (deflate.c:679) 0.00 0.00 16/13496 deflate (deflate.c:730) 0.00 0.00 128/13496 deflate_fast (deflate.c:654) 0.00 0.00 3071/13496 ct_init (trees.c:384) 0.00 0.00 3730/13496 ct_init (trees.c:385) 0.00 0.00 6525/13496 ct_init (trees.c:387) [6] 0.0 0.00 0.00 13496 init_block (trees.c:408)
gprof
ÀÇ `-A' ¿É¼ÇÀ» »ç¿ëÇϸé annotate source ¸®½ºÆÃÀ»
¾òÀ» ¼ö ÀÖ´Ù. annotated source ¸®½ºÆÃÀº ÇÁ·Î±×·¥ ¼Ò½º¿¡ °¢°¢ÀÇ ÇÔ¼ö°¡ È£ÃâµÈ
Ƚ¼ö°¡ Æ÷ÇԵǾîÁø °ÍÀÌ´Ù. gprof
°¡ ¿ø·¡ÀÇ ¼Ò½º ÄÚµå ÆÄÀÏÀ» ãÁö
¸øÇÏ´Â °æ¿ì¿¡´Â
`-I' ¿É¼ÇÀ¸·Î ¼Ò½º ÄÚµå ÆÄÀÏÀÇ °æ·Î¸íÀ» ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÏ¸é µÈ´Ù.
¾Æ·¡¿Í °°ÀÌ ÄÄÆÄÀÏ ¿É¼ÇÀ» ÁöÁ¤Çϸé ÇÔ¼ö Ä«¿îÆà ÄÚµå(function counting code)¿¡ Ãß°¡ÇÏ¿© ±âº» ºí·Ï Ä«¿îÆà ÄÚµå(block counting code)°¡ ÇÁ·Î±×·¥¿¡ Æ÷ÇԵǾîÁø´Ù.
`gcc ... -g -pg -a'
ÄÄÆÄÀÏ ½Ã¿¡ À§¿Í °°Àº ¿É¼Ç ¼³Á¤Àº gprof
¿¡¼ ÄÚµåÀÇ °¢ ¶óÀÎÀÌ
½ÇÇàµÈ Ƚ¼ö¸¦ °áÁ¤ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. gzip ¼Ò½º¿¡¼ ¹ßÃéÇÑ ´ÙÀ½ ÇÔ¼öÀÇ
Äڵ带 ¿¹·Î »ìÆ캸ÀÚ. (¶óÀÎÀÇ ¾Õ¿¡ ÀÖ´Â ¼ýÀÚ´Â ¶óÀÎ ¹øÈ£ÀÌ´Ù.)
1 ulg updcrc(s, n) 2 uch *s; 3 unsigned n; 4 { 5 register ulg c; 6 7 static ulg crc = (ulg)0xffffffffL; 8 9 if (s == NULL) { 10 c = 0xffffffffL; 11 } else { 12 c = crc; 13 if (n) do { 14 c = crc_32_tab[...]; 15 } while (--n); 16 } 17 crc = c; 18 return c ^ 0xffffffffL; 19 }
À§ÀÇ Äڵ忡¼ pdcrc
ÇÔ¼ö´Â ÃÖ¼Ò 5°³ÀÇ ±âº» ºí·ÏÀ» °¡Áö°í ÀÖ´Ù.
ù ¹ø° ±âº» ºí·ÏÀº ÇÔ¼ö ÀÚüÀÌ°í, µÎ ¹ø°¿Í ¼¼ ¹ø° ±âº» ºí·ÏÀº ¶óÀÎ 9ÀÇ
if
¹®Àº if
ÀÇ Á¶°Ç ÆÇ´Ü¿¡ µû¸¥ ºÐ±â¿¡ µû¶ó ¸¸µé¾îÁö´Â
µÎ °³ ÀÌ»óÀÇ ±âº» ºí·ÏÀ̸ç, ³× ¹ø° ±âº» ºí·°Àº ¶óÀÎ 13ÀÇ
if
¹®¿¡ ÀÇÇØ Á¤ÀǵǴ ±âº» ºí·ÏÀ̸ç, ´Ù¼¸ ¹ø° ±âº» ºí·ÏÀº do
·çÇÁÀÇ
³»¿ë¿¡ ÀÇÇØ ¸¸µé¾îÁö´Â ±âº» ºí·°ÀÌ´Ù. ÄÄÆÄÀÏ·¯¿¡¼ ¿©·¯ °¡Áö Ư¼öÇÑ °æ¿ì¸¦ ó¸®Çϱâ
À§ÇÏ¿© Ãß°¡ÀûÀÎ ±âº» ºí·ÏµéÀ» ¸¸µé¾î ³¾ ¼öµµ ÀÖ´Ù.
±âº» ºí·Ï Ä«¿îÆà Äڵ尡 Ãß°¡µÈ ÇÁ·Î±×·¥Àº
gprof -l -A
¿É¼ÇÀ» »ç¿ëÇÏ¿© ºÐ¼®ÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡ `-x' ¿É¼ÇÀº
¼Ò½ºÄÚµåÀÇ
°¢°¢ÀÇ ¶óÀÎÀÌ ÃÖ¼Ò 1ȸÀÌ»ó ·¹À̺íµÇ°Ô ÇϹǷΠ`-x' ¿É¼ÇÀ» Ãß°¡ÇÏ¿©
»ç¿ëÇϱ⸦ ±ÇÀåÇÑ´Ù. ¾Æ·¡ÀÇ ¿¹´Â gzip
½ÇÇàÀ» ÅëÇØ ¾òÀº updcrc
ÇÔ¼öÀÇ annotated source ¸®½ºÆÃÀÌ´Ù.
ulg updcrc(s, n) uch *s; unsigned n; 2 ->{ register ulg c; static ulg crc = (ulg)0xffffffffL; 2 -> if (s == NULL) { 1 -> c = 0xffffffffL; 1 -> } else { 1 -> c = crc; 1 -> if (n) do { 26312 -> c = crc_32_tab[...]; 26312,1,26311 -> } while (--n); } 2 -> crc = c; 2 -> return c ^ 0xffffffffL; 2 ->}
À§ÀÇ ¿¹¿¡¼ º¸´Â °Í°ú °°ÀÌ updcrc
ÇÔ¼ö´Â 2ȸ È£ÃâµÇ¾úÀ¸¸ç, ¶óÀÎ
9¿¡ ÀÖ´Â if
¹®ÀÇ °¢°¢ÀÇ ºÐ±â¸¦ Çѹø¾¿ Åë°úÇÏ¿´À½À» ¾Ë ¼ö ÀÖ´Ù.
do
·çÇÁ º»Ã¼´Â ÃÑ 26312 ȸ ½ÇÇàµÇ¾ú´Ù. while
¹®°ú °ü·ÃµÈ annotationÀ» ÁÖÀÇÇÏ¿© º¸¸é, °¢ iteration´ç 1¹ø¾¿ 26312ȸ ½ÇÇàµÇ¾ú´Ù.
26312ȸÀÇ ½ÇÇàÁß 1¹øÀº ( 26312¹ø° ½ÇÇà) while
¹®À» exitÇϴµ¥ »ç¿ëµÇ¾ú°í ³ª¸ÓÁö 26311ȸÀÇ ½ÇÇàÀº ·çÇÁÀÇ ½ÃÀÛ½ÃÁ¡À¸·ÎÀÇ ¿ª¹æÇâ
ºÐ±â¿¡¼ »ç¿ëµÈ °ÍÀÌ´Ù.