Äں˰汾2.6.18-RC7
profileÖ»ÊÇÄں˵ÄÒ»¸öµ÷ÊÔÐÔÄܵŤ¾ß£¬Õâ¸ö¿ÉÒÔͨ¹ýmenuconfigÖеÄInstrumentation Support->profile´ò¿ª¡£
1. ÈçºÎʹÓÃprofile£º
Ê×ÏÈÈ·ÈÏÄÚºËÖ§³Öprofile£¬È»ºóÔÚÄÚºËÆô¶¯Ê±¼ÓÈëÒÔϲÎÊý£ºprofile=1»òÕ߯äËü²ÎÊý£¬ еÄÄÚºËÖ§³Öprofile=schedule 1
2. ÄÚºËÆô¶¯ºó»á´´½¨/proc/profileÎļþ£¬Õâ¸öÎļþ¿ÉÒÔͨ¹ýreadprofile¶ÁÈ¡£¬
Èçreadprofile -m /proc/kallsyms | sort -nr > ~/cur_profile.log,
»òÕßreadprofile -r -m /proc/kallsyms |sort -nr,
»òÕßreadprofile -r && sleep 1 && readprofile -m /proc/kallsyms |sort -nr >~/cur_profile.log
3. ¶ÁÈ¡/proc/profile¿É»ñµÃÄÄЩÄÚÈÝ£¿
¸ù¾ÝÆô¶¯ÅäÖÃprofile£½£¿µÄ²»Í¬£¬»ñÈ¡µÄÄÚÈݲ»Í¬£º
Èç¹ûÅäÖóÉprofile=? ¿ÉÒÔ»ñµÃÿ¸öº¯ÊýÖ´ÐдÎÊý£¬ÓÃÀ´µ÷ÊÔº¯ÊýÐÔÄܺÜÓÐÓÃ
Èç¹ûÉèÖóÉprofile=schedule ?¿ÉÒÔ»ñµÃÿ¸öº¯Êýµ÷ÓÃscheduleµÄ´ÎÊý£¬ÓÃÀ´µ÷ÊÔscheduleºÜÓÐÓÃ
profileµÄʵÏÖ£º
ÔÚÄÚºËÖд´½¨Ò»¸ö/proc/profile½Ó¿Ú£¬ÔÚϵͳÆô¶¯Ê±ÓÃprofile_init()·ÖÅäºÃ´æ·ÅprofileÐÅÏ¢µÄÄڴ棬ÿÌõÖ¸Áî¶¼ÓÐÒ»¸ö¼ÆÊýÆ÷¡£
Èç¹ûÉèÖõÄÊÇprofile=? ͳ¼ÆÃ¿ÌõÖ¸ÁîÖ´ÐеĴÎÊý¡£ÔÚʱÖÓÖжÏÖе÷Óà profile_tick(CPU_PROFILING, regs)£¬½«µ±Ç°Ö¸Áîregs->eipµÄ¼ÆÊýÖµ+1¡£Õâ¸öͳ¼ÆÓе㲻׼£¬ÒòΪһ¸öjiffiesÖ®¼ä£¬¿ÉÄÜÖ´ÐкܶຯÊý£¬¶øÍ³¼ÆµÄÖ»ÊÇÇ¡ºÃ·¢ÉúʱÖÓÖжÏʱµÄÄǸöº¯Êý¡£µ«È¡Ñùµã¶àÁË£¬ÕâЩÐÅÏ¢»¹ÊÇÄÜ˵Ã÷ÎÊÌâ¡£
Èç¹ûÉèÖõÄÊÇprofile=schedule ? ͳ¼ÆÃ¿¸öÖ¸Áîµ÷ÓÃschedule()µÄ´ÎÊý£¬ÔÚschedule()Öе÷ÓÃprofile_hit(SCHED_PROFILING, __builtin_return_address(0));
ÆäÊµÕæÕýµ÷ÓÃscheduleµÄÖ¸ÁîÖ»ÓÐÓÐÏ޵ö£¬µ«ÕâЩÐÅÏ¢¿ÉÒÔ»ñµÃµ÷¶ÈµãµÄ¾«È·ÐÅÏ¢¡£
profile_hit()µÄ×÷ÓÃÊǽ«µ±Ç°Ö¸ÁîµÄ¼ÆÊýÖµ¼Ó1
profile_tick()ÊÇÔÚÿ¸öʱÖÓtickµÄʱºò½«ÏìÓ¦µÄÖ¸Áî¼ÆÊýÖµ¼Ó1
time_hook Ò»°ã±»ÆäËüprofile¹¤¾ß£¬ÈçoprofileÓÃÀ´ÔÚÿ´ÎÖжϷ¢Éúʱ£¬Ìí¼Ó×Ô¼ºµÄ´¦Àíº¯Êý¡£
profileÐÅÏ¢Æäʵ°üÀ¨ÈÎÎñµÄËùÓÐͳ¼ÆÐÅÏ¢£¬ËùÒÔ¿ÉÒÔÓÃprofile_event_register()ÔÚÈÎÎñÍ˳ö»òÕßÓû§¿Õ¼äÄÚ´æÊÍ·Åʱ£¬¹ÒÔØ×Ô¼ºµÄ»Øµ÷º¯Êý£¬ÒÔͳ¼ÆÕâЩÐÅÏ¢¡£
profileÐÅÏ¢µÄͳ¼ÆÔÚsmpºÍupϲ»Í¬£¬¼´profile_hitµÄʵÏÖ²»Í¬£¬smpµÄʵÏÖÖÐÓÐÒ»¸öPerCPU cache£¬Õâ¿É±ÜÃâ¶à¸öCPUÔÚprofileͳ¼ÆÊ±Ð§ÂʵÍÏÂÎÊÌâ¡£¾ßÌå¿ÉÒԲ쿴Դ´úÂëkernel/profile.c, ¿ÉÒÔ¿´¿´driver/oprofileµÄʵÏÖ¡£

