Gprofile¸¦ ÀÌ¿ëÇÑ C/C++ ÇÁ·Î±×·¥ ÃÖÀûÈ­
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


GProf profiler¸¦ ÀÌ¿ëÇÑ C/C++ ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­

GProf profiler¸¦ ÀÌ¿ëÇÑ C/C++ ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­

Arnout Engelen

arnouten@bzzt.net

À±»ó¹è

dreamyun@yahoo.co.kr

고친 과정
고침 0.82003³â 3¿ù 1ÀÏ 23½Ã
ÃÖÃÊ ¹®¼­ÀÛ¼º

1. ¼Ò°³


Áö±ÝÀº Çϵå¿þ¾îÀÇ ¼º´ÉÀÌ ¿ö³«¿¡³ª ÁÁ¾ÆÁøµ¥´Ù°¡ ÄÄÆÄÀÏ·¯ ¿ª½Ã ±×¿¡ ¹ß¸ÂÃß¾î ÃÖÀûÈ­µÇ¾îÀֱ⠶§¹®¿¡, ¼º´Éº¸´Ù °³¹ß¼Óµµ¿Í À¯Áöº¸¼ö¸¦ Áß¿ä½ÃÇÏ´Â °æ¿ì°¡ ¸¹°ÚÁö¸¸ ¿©ÀüÈ÷ ÃÖÀûÀÇ ¼º´ÉÀ» ¿ä±¸ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ¾ß ÇÏ´Â Çʿ䰡 »ý±ä´Ù. ÀÌ·² °æ¿ì ÇÁ·Î±×·¥ ÃÖÀûÈ­´Â Çʼö ÀûÀÎ ÀÛ¾÷À̵ȴÙ.

ÃÖÀûÈ­¸¦ ÅëÇØ¼­ ¾î¶² ÇÔ¼ö°¡ 0.04ÃÊ Á¤µµ ¼öÇà½Ã°£À» ´ÜÃà½ÃÄ×´Ù°í °¡Á¤ÇØ º¸ÀÚ. °íÀÛÇØ¾ß 0.04ÃÊ ¾Æ²¸¼­ ¹¹ÇÏ´À³Ä¶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸ ÀÌ ÇÔ¼ö°¡ 1ÃÊ µ¿¾È 100¹ø È£ÃâµÈ´Ù°í ÇÏ¸é ¹«·Á 4Ãʸ¦ ¾Æ³¢°Ô µÈ´Ù. ÄÄÇ»ÅÍ·Î ¾î¶²ÀÏÀ» ó¸®Çϴµ¥ 4Ãʶó¸é °ÅÀÇ ¹«ÇÑ¿¡ °¡±î¿î ½Ã°£À̶ó°í º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¹®Á¦´Â ÇϳªÀÇ ÇÁ·Î±×·¥Àº ÀÛ°Ô´Â ¼ö½Ê¿¡¼­ ¸¹°Ô´Â ¼ö¹é/¼öõ°³ÀÇ ÇÔ¼ö·Î ÀÌ·ç¾î Áú°ÍÀε¥, ÀÌÁß ¾î¶² ÇÔ¼ö¸¦ ¼±ÅÃÇØ¼­ ÃÖÀûÈ­¸¦ ½ÃÄÑÁà¾ß ÇÏ´ÂÁöÀÌ´Ù. ½Ã°£¸¸ ÃæºÐÇÏ´Ù¸é ¸ðµç ÇÔ¼ö¸¦ ¶óÀδÜÀ§·Î ÇϳªÇϳª ºÐ¼®Çذ¡¸é¼­ ÃÖÀûÈ­ ½Ãų ¼öµµ ÀÖ°ÚÁö¸¸, ½Ã°£µµ ÃæºÐÇÏÁö ¾ÊÀ» »Ó´õ·¯, È¿°ú´ëºñ ³Ê¹«³ª ¸¹Àº ½Ã°£ÀÌ ¼Ò¸ðµÉ ¼öµµ ÀÖ´Ù.

¿©±â¿¡¼­´Â ÀÌ·¯ÇÑ ¹®Á¦ÀÇ ÇØ°áÀ» À§ÇØ gprop¶ó´Â ÇÁ·Î±×·¥À» »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ÀÌ ÅøÀ» ÀÌ¿ëÇÏ¸é °³¹ßÀÚ´Â ÇÁ·Î±×·¥ÀÇ °¢ ÇÔ¼öº°·Î È£Ãâºóµµ¿Í ¼Ò¸ðµÈ ½Ã°£µî¿¡ ´ëÇÑ ¼º´ÉÁ¤º¸¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù.

¹®¼­ÀÇ ¿ø¹®Àº linuxfocus¸¦ È®ÀÎÇϱ⠹ٶõ´Ù.


2. grpop¸¦ »ç¿ëÇÑ ÇÁ·Î±×·¥ ÃÖÀûÈ­

2.1. gpropÀÇ °³³ä

gropÀÇ ÀÛµ¿¹æ½ÄÀº °£´ÜÇÏ´Ù. ÇÁ·Î±×·¥ ¼öÇà½Ã°£µ¿¾È °¢ ÇÔ¼öÀÇ È£ÃâȽ¼ö¿Í ÇÔ¼ö È£Ãâ½Ã ÁøÀÔ¿¡¼­ Á¾·áÇÒ ¶§ ±îÁöÀÇ ½Ã°£À» ±â·ÏÇØµÎ°í ÀÌ Á¤º¸¿¡ ´ëÇÑ Åë°è¸¦ Á¦°øÇÏ´Â ¹æ½ÄÀÌ´Ù.

Àú·¯ÇÑ ÀÏÀ» Çϱâ À§Çؼ­´Â °¢ ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù Ƚ¼ö¸¦ ¼¼°ÔÇϰí, ½Ã°£ÇÔ¼ö¸¦ ÀÏÀÏÀÌ ³Ö¾îÁà¾ß ÇÏÁö ¾Ê°Ú´À³Ä°í »ý°¢ÇÒ ¼ö ÀÖ°ÚÁö¸¸, °ÆÁ¤ÇÒ ÇÊ¿ä ¾ø´Ù. ÄÄÆÄÀϽà -pg¿É¼Ç¸¸ ÁÖ¸é ¾Ë¾Æ¼­ Àú·¯ÇÑ Á¤º¸µéÀÌ »ý¼ºµÈ´Ù. ±× ÈÄ °³¹ßÀÚ´Â gprop¸¦ ½á¼­ Åë°èÁ¤º¸¸¦ ¾ò¾î¿À±â¸¸ ÇÏ¸é µÈ´Ù.


2.2. Pathalizer¸¦ ÅëÇÑ Å×½ºÆ®

ÀÌÇØ¸¦ ½±°Ô Çϱâ À§Çؼ­ pathalizerÀ̶ó´Â ÇÁ·Î±×·¥À» ÅëÇØ¼­ Å×½ºÆ®¸¦ ÇØº¸µµ·Ï ÇϰڴÙ.

ÀÏ´Ü À§ ÇÁ·Î±×·¥À» ¹Þ¾Æ¼­ ÄÄÆÄÀÏ Çϵµ·Ï ÇÏÀÚ. ÄÄÆÄÀÏ ¹æ¹ýÀº °£´ÜÇÏ´Ï ¼³¸íÇÏÁö ¾Êµµ·Ï ÇϰڴÙ.


2.3. ÇÁ·Î±×·¥ ¼öÇà ½Ã°£

ÇÁ·Î±×·¥ÀÇ ¼öÇà ½Ã°£À» ÃøÁ¤Çϱâ À§Çؼ­ ÇÊÀÚ´Â apacheÀÇ ·Î±×ÆÄÀÏÀ» pathalizer¸¦ ÅëÇØ¼­ ºÐ¼®Çغ¸µµ·Ï Çß´Ù. ÀÌ apache·Î±×ÆÄÀÏÀº ¾à 500000ÁÙÀÇ Á¤º¸¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.

[root@ns src]# time ./event2dot logfile
real    3m36.316s
user    0m55.590s
sys     0m1.070s
			


2.4. profiling

±×·³ À§ÀÇ ÇÁ·Î±×·¥À» ºÐ¼®Çϱâ À§Çؼ­ profile Á¤º¸¸¦ ³²°Üº¸µµ·Ï ÇϰڴÙ. ¾Æ·¡¿Í °°ÀÌ -pg ¿É¼ÇÀÌ »ç¿ëµÇµµ·Ï MakefileÀ» ¼öÁ¤Çϵµ·Ï ÇÏÀÚ.

all: event2dot apache2events

OPTIONS=-O2 -g -pg

apache2events: config.o apache2events.o
...
...
			
´Ù½Ã make¸¦ ½ÃµµÇؼ­ Àç ÄÄÆÄÀÏÀ» Çϰí ./event2dot apache_access_log¸¦ ¼öÇàÇϵµ·Ï ÇÑ´Ù. ÇÁ·Î±×·¥À» ¼öÇàÇÏ°í ³ª¸é ÇØ´ç µð·ºÅ丮¿¡ gmon.out¶ó´Â ÆÄÀÏÀÌ »ý¼ºµÈ°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ grpof¸¦ ÀÌ¿ëÇØ¼­ °¢ ÇÔ¼öº° ¼º´ÉÁ¤º¸¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
# gprof ./event2dot | less
 % cumulative  self              self     total
 time seconds  seconds  calls s/call s/call name
43.32   46.03  46.03 339952989  0.00  0.00 CompareNodes(Node *,Node *)
25.06   72.66  26.63    55000   0.00  0.00 getNode(char *,NodeListNode *&)
16.80   90.51  17.85 339433374  0.00  0.00 CompareEdges(Edge *,AnnotatedEdge *)
12.70  104.01  13.50    51987   0.00  0.00 addAnnotatedEdge(AnnotatedGraph *,Edge *)
 1.98  106.11   2.10    51987   0.00  0.00 addEdge(Graph *,Node *,Node *)
 0.07  106.18   0.07        1   0.07  0.07 FindTreshold(AnnotatedEdge *,int)
 0.06  106.24   0.06        1   0.06 28.79 getGraphFromFile(char *,NodeListNode *&,Config *)
 0.02  106.26   0.02        1   0.02 77.40 summarize(GraphListNode *,Config *)
 0.00  106.26   0.00    55000   0.00  0.00 FixName(char *)
			
¿©±â¿¡¼­ °¡Àå Áß¿äÇÑ Çʵå´Â ù¹øÂ° Çʵå·Î, ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â µ¿¾È ÇØ´çÇÔ¼ö°¡ ¼ÒºñÇÑ ½Ã°£ÀÇ ¹éºÐÀ²À» º¸¿©ÁØ´Ù.


2.5. gprof °á°ú¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¥ ÃÖÀûÈ­

±×·³ ÀÌÁ¦ ÇÁ·Î±×·¥À» ÃÖÀûÈ­¸¦ ÇØº¸µµ·Ï ÇÏÀÚ. ¸ðµç ÇÔ¼ö¸¦ ÃÖÀûÈ­ Çϸé ÁÁ°ÚÁö¸¸ ¿ª½Ã ½Ã°£´ëºñ È¿À²ÀÇ ¹®Á¦°¡ ÀÖÀ½À¸·Î °¡´ÉÇϸé Á¶±×¸¶ÇÑ ¼öÁ¤À¸·Î Å« È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ´Â ÇÔ¼ö¸¦ ¼±ÅÃÇÏ´Â°Ô ÁÁÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é ¿©·¯¹ø È£ÃâµÇ´Â ÇÔ¼öÁß¿¡¼­ ¼öÇà½Ã°£ÀÌ ¸¹ÀÌ °É¸®´Â ÇÔ¼ö¸¦ ¼±º°Çؼ­ ¼öÁ¤ÇÏ´Â°Ô °¡Àå ÁÁÀ» °ÍÀÌ´Ù.

¿©±â¿¡¼­ ¿ì¸®´Â CompareNodes¶ó´Â ÇÔ¼ö°¡ ¸Å¿ì ¸¹Àº ½Ã°£À» ¼ÒºñÇϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ±×·¡¼­ CompareNodesÇÔ¼ö¸¦ ºÐ¼®Çؼ­ ºñÈ¿À²ÀûÀÎ ºÎºÐÀ» °³¼±À» Çϱâ·Î °áÁ¤Çß´Ù.

¸î¹øÀÇ ºÐ¼®À» ÅëÇØ¼­ ÀڷᱸÁ¶ÀÇ À¯Áö¸¦ À§Çؼ­ »ç¿ëÇÏ´Â ¸µÅ©µå¸®½ºÆ®°¡ ¸Å¿ì ºñÈ¿À²ÀûÀ¸·Î µÇ¾îÀÖ´Ù´Â °ÍÀ» ¹ß°ßÇϰí e-edges¸¦ ÀÌÁøÆ®¸®·Î º¯°æÇϱâ·Î °áÁ¤À» Çß´Ù.

Äڵ带 º¯°æÇÑ´ÙÀ½ Å×½ºÆ®¸¦ ÇѰá°ú ´ÙÀ½°ú °°Àº °á°ú¸¦ º¸¿©Áá´Ù. 1ÃÊÀÌ»óÀÇ ½Ã°£À» ´ÜÃà½ÃÄ×À½À» ¾Ë ¼ö ÀÖ´Ù.

real    2m19.314s
user    0m36.370s
sys     0m0.940s
			


2.6. ÃÖÀûÈ­ ÈÄ gprof °á°ú

´ÙÀ½Àº ÄÚµå ÃÖÀûÈ­ ÈÄ ÇÁ·Î±×·¥ÀÇ gprof °á°ú´Ù.

%   cumulative self           self    total
 time   seconds seconds calls  s/call  s/call name
87.01     25.25  25.25  55000    0.00    0.00 getNode(char *,NodeListNode *&)
10.65     28.34   3.09  51987    0.00    0.00 addEdge(Graph *,Node *,Node *)
			
°¢ ÇÔ¼ö¿¡¼­ 2¹è°¡±îÀÌ ½Ã°£À» Àý¾àÇÑ°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.


2.7. ´Ù¸¥ profile ÇÁ·Î±×·¥µé

GUIÈ­¸éÀ» ¼±È£ÇÏ´Ù¸é kProf¿Í cgprofcgprof°°Àº ÇÁ·Î±×·¥µµ ÀÖÀ¸´Ï °ü½ÉÀÖ´Ù¸é »ç¿ëÀ» ÇØº¸±â ¹Ù¶õ´Ù.


Cache Error
category_C
category__1
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.