[LinuxFocus-icon]
<--  | վ���ͼ  | ����  | ����

���� | �����ڿ� | ���� | ����LF
This document is available in: English  ChineseGB  Deutsch  Francais  Russian  

Arnout Engelen
by Arnout Engelen
<arnouten(Q)bzzt.net>

��������:

Arnout Engelen �Ǻ���Nijmegen��ѧ�����ϵ��ѧ����Ҳ�����簲ȫ��˾TUNIX�Ĺ�Ա���ڿ���ʱ�䣬��ϲ�����ܺʹ����������˹��


Ŀ¼:

 

ʹ��GProf���Ż����C/C++����

Profiling with GProf

ÕªÒª:

���Ż������ʱ��Ҫ��ס����ֵ���Ż��ĵط��Ż���û�б�Ҫ���ϼ���Сʱ���Ż�һ��ʵ����ֻ����0.04��ij���

GProf ʹ����һ���쳣�򵥵��Ƿdz���Ч�ķ������Ż�C/C++ ���򣬶����ܺ����׵�ʶ���ֵ���Ż��Ĵ��롣һ���򵥵İ�������������ʾ��GProf���ͨ��ʶ���Ż������ؼ������ݽṹ����ʵ��Ӧ���еij����3���ӵ�����ʱ�Ż���5��ġ�

��������������׷�ݵ�1982����ڱ������������ر����۴�ᣨthe SIGPLAN Symposium on Compiler Construction�����������������˸���UNIX ƽ̨�ϵ�һ����׼���ߡ�

_________________ _________________ _________________

 

Profiling in a nutshell

�����Ҫ�����ĸ���dz��òµ¥£ï¿½Í¨ï¿½ï¿½ï¿½ï¿½Â¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Äµï¿½ï¿½ÃºÍ½ï¿½ï¿½ï¿½Ê±ï¿½ä£¬ï¿½ï¿½ï¿½Ç¿ï¿½ï¿½Ô¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê±ï¿½Ä³ï¿½ï¿½ï¿½Î¡ï¿½ ���ַ����������ƺ�Ҫ���Ѻܶ������������˵��ǣ�������ʵ����������Զ������ֻ��Ҫ���� gcc ����ʱ����һ������IJ���('-pg')���������������õģ��������Ѽ������Ҫ�������й����ݣ���Ȼ������'gprof'�Ը�����ķ�����Щ�����  

��������: Pathalizer

��ʹ����һ����ʵ��ʹ�õij�������Ϊ���ӣ��� pathalizer��һ����: ��event2dot��һ����·�����¼��������ļ�ת��Ϊͼ�λ���dot���ļ��Ĺ��ߣ�executable which translates a pathalizer 'events' file to a graphviz 'dot' file����

�òµ¥µï¿½Ëµï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ò»ï¿½ï¿½ï¿½Ä¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½È¡ï¿½ï¿½ï¿½ï¿½ï¿½Â¼ï¿½ï¿½ï¿½È»ï¿½ï¿½ï¿½ï¿½ï¿½Ç·Ö±ð±£´ï¿½ÎªÍ¼ï¿½ï¿½(��ҳΪ�ڵ㣬�ҽ�ҳ��ҳ֮���ת����Ϊ�ߣ���Ȼ����Щͼ������Ϊһ�Ŵ��ͼ�Σ�������Ϊͼ�λ���'dot'��ʽ�ļ���  

�������ʱ

�������Ǹ�����δ���Ż��ij����һ��ʱ���������ǵ�����Ҫ����ʱ�䡣���ҵļ������ʹ��event2dot����Դ�����������Ϊ���루���55000�����ݣ�������Ҫ���ֶ��ӣ�

real    3m36.316s
user    0m55.590s
sys     0m1.070s
 

�������

Ҫʹ��gprof ����Ҫ�������ڱ����ʱ��Ҫ����'-pg' ѡ����Ǿ����������±���Դ�����£�
g++ -pg dotgen.cpp readfile.cpp main.cpp graph.cpp config.cpp -o event2dot

�������ǿ����ٴ�����event2dot����ʹ������ǰ��ʹ�õIJ������ݡ�����������е�ʱ��event2dot���еķ������ݻᱻ�Ѽ���������'gmon.out'�ļ��У����ǿ���ͨ������'gprof event2dot | less'���鿴�����

gprof ����ʾ�����µĺ����Ƚ���Ҫ��

 % 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 *)
���Կ�������һ�������Ƚ���Ҫ: ����������󲿷ֵ�����ʱ��������ռ���ˡ�  

�Ż�

���������Կ������������󲿷ֵ�ʱ�䶼������CompareNodes�����ϣ��� grep �鿴һ������CompareNodes ֻ�DZ�CompareEdges������һ�ζ���, ��CompareEdges��ֻ��addAnnotatedEdge���á������Ƕ���������������嵥�С������������Ӧ�������Ż��ĵط��˰ɣ�

����ע�⵽addAnnotatedEdge������һ����������Ȼ����������ʵ�֣�����ȴʵ�ڲ�����õ��������͡����Ǿ��������� g->edges �ö�����������: �⽫��ʹ�ò��Ҹ��졣  

���

�������ǿ�һ���Ż�������н��:
real    2m19.314s
user    0m36.370s
sys     0m0.940s
 

�ڶ���

�ٴ����� 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 *)
��������ǰռ�ô�������ʱ�ĺ��������Ѿ�������ռ������ʱ�Ĵ�ͷ�ˣ�������һ�����Ż�һ���أ��ýڵ��ϣ����ȡ���ڵ�����

��μ�ֱ�Ǹ��޴�Ľ���:

real    0m3.269s
user    0m0.830s
sys     0m0.090s
 

���� C/C++ ���������

���������ܶ����������ʹ��gprof ������, ����KProf (����) �� cgprof����Ȼͼ�ν���Ŀ���������������Ҹ�����Ϊ�����е�gprof ʹ�ø����㡣
 

���������Եij�����з���

���������������gprof ����C/C++ �ij�����з�����������������ʵһ����������: �� Perl,���ǿ�����Devel::DProf ģ�顣��ij���Ӧ����perl -d:DProf mycode.pl����ʼ����ʹ��dprofpp���鿴���������������������gcj ���������Java ������Ҳ����ʹ��gprof��Ȼ��Ŀǰ��ֻ֧�ֵ��̵߳�Java ���롣  

����

���������Ѿ������ģ����ǿ���ʹ�ó����Ҫ�������ٵ��ҵ�һ����������ֵ���Ż��ĵط�����ֵ���Ż��ĵط��Ż������ǿ��Խ�һ�����������ʱ�� 3��36�� ���ٵ����� 5�룬�������������ӿ�����һ����  

References

 

����ƪ���·�������

ÿƪ���¶��и��Եķ���ҳ�档�����ҳ����������ύ���ۣ�Ҳ���Բ鿴�������ߵ����ۣ�




��ҳ��LinuxFocus�༭��ά��
© Arnout Engelen
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
������Ϣ:
en --> -- : Arnout Engelen <arnouten(Q)bzzt.net>
en --> CN: С �� (homepage)

2005-05-07, generated by lfparser version 2.52