¡¡¡¡ÔÚÉÏ´ÎÍê³ÉǶÈëʽӦÓõÄLinux²Ã¼õºó£¬LinuxµÄÆô¶¯Ê±¼äÈÔÐèÒª 7s ×óÓÒ£¬ËäÈ»ÃãÇ¿¿ÉÒÔ½ÓÊÜ£¬µ«ÈÔȻûÓдﵽÎÒ¸öÈËËù×·ÇóµÄÄ¿±ê----2s ÒÔÄÚ¡£¿öÇÒ£¬ÔÚʵ¼ÊµÄÉÌÓû·¾³ÖУ¬É豸¿É¿¿ÐÔµÄÒªÇó¿ÉÊÇ¡°5¸ö9¡±£¨99.999%£¬¼´OOSʱ¼äµÍÓÚ5·ÖÖÓ/Ä꣩£¬Õâ¾ÍÒâζ×Åÿ¼õÉÙÒ»ÃëÖÓLinuxÆô¶¯£¨É豸¸´Î»£©Ê±¼ä£¬¶Ô¿É¿¿ÐÔ¶¼ÊÇÒ»¸öÃ÷ÏÔµÄÌáÉý¡£
¡¡¡¡ÑÔ¹éÕý´«£¬ÈçºÎ×ÅÊÖ¶ÔLinuxµÄÆô¶¯Ê±¼ä½øÐÐÓÅ»¯ÄØ£¿
¡¡¡¡CELF(The Consumer Electronics Linux Forum)ÂÛ̳ΪÎÒÃÇÖ¸ÒýÁËÒ»¸ö·½Ïò¡£
¡¡¡¡£¨1£©Ê×ÏÈÊǶÔLinuxÆô¶¯¹ý³ÌµÄ¸ú×ٺͷÖÎö£¬Éú³ÉÏêϸµÄÆô¶¯Ê±¼ä±¨¸æ¡£
¡¡¡¡½ÏΪ¼òµ¥¿ÉÐеķ½Ê½ÊÇͨ¹ýPrintkTime¹¦ÄÜΪÆô¶¯¹ý³ÌµÄËùÓÐÄÚºËÐÅÏ¢Ôö¼Óʱ¼ä´Á£¬±ãÓÚ»ã×Ü·ÖÎö¡£PrintkTime×îÔçΪCELFËùÌṩµÄÒ»¸öÄں˲¹¶¡£¬ÔÚºóÀ´µÄKernel 2.6.11°æ±¾ÖÐÕýʽÄÉÈë±ê×¼Äںˡ£ËùÒÔ´ó¼Ò¿ÉÄÜÔÚа汾µÄÄÚºËÖÐÖ±½ÓÆôÓøù¦ÄÜ¡£Èç¹ûÄãµÄLinuxÄÚºËÒòΪijЩÔÒò²»ÄܸüÐÂΪ2.6.11Ö®ºóµÄ°æ±¾£¬ÄÇô¿ÉÒԲο¼CELFÌṩµÄ·½·¨Ð޸ĻòÖ±½ÓÏÂÔØËüÃÇÌṩµÄ²¹¶¡£ºhttp://tree.celinuxforum.org/CelfPubWiki/PrintkTimes
¡¡¡¡¿ªÆôPrintkTime¹¦Äܵķ½·¨ºÜ¼òµ¥£¬Ö»ÐèÔÚÄÚºËÆô¶¯²ÎÊýÖÐÔö¼Ó¡°time¡±¼´¿É¡£µ±È»£¬ÄãÒ²¿ÉÒÔÑ¡ÔñÔÚ±àÒëÄÚºËʱֱ½ÓÖ¸¶¨¡°Kernel hacking¡±Öеġ°Show timing information on printks¡±À´Ç¿ÖÆÿ´ÎÆô¶¯¾ùΪÄÚºËÐÅÏ¢Ôö¼Óʱ¼ä´Á¡£ÕâÒ»ÖÖ·½Ê½»¹ÓÐÁíÒ»¸öºÃ´¦£ºÄã¿ÉÒԵõ½ÄÚºËÔÚ½âÎöÆô¶¯²ÎÊýÇ°ËùÓÐÐÅÏ¢µÄʱ¼ä¡£Òò´Ë£¬ÎÒÑ¡ÔñºóÒ»ÖÖ·½Ê½¡£
¡¡¡¡µ±Íê³ÉÉÏÊöÅäÖúó£¬ÖØÐÂÆô¶¯Linux£¬È»ºóͨ¹ýÒÔÏÂÃüÁÄÚºËÆô¶¯ÐÅÏ¢Êä³öµ½Îļþ£º
¡¡¡¡dmesg -s 131072 > ktime
¡¡¡¡È»ºóÀûÓÃÒ»¸ö½Å±¾¡°show_delta¡±£¨Î»ÓÚLinuxÔ´ÂëµÄscriptsÎļþ¼ÐÏ£©½«ÉÏÊöÊä³öµÄÎļþת»»ÎªÊ±¼äÔöÁ¿ÏÔʾ¸ñʽ£º
¡¡¡¡/usr/src/linux-x.xx.xx/scripts/show_delta ktime > dtime
¡¡¡¡ÕâÑù£¬Äã¾ÍµÃµ½ÁËÒ»·Ý¹ØÓÚLinuxÆô¶¯Ê±¼äÏûºÄµÄÏêϸ±¨¸æ¡£
¡¡¡¡£¨2£©È»ºó£¬ÎÒÃǾÍÀ´Í¨¹ýÕâ·Ý±¨¸æ£¬ÕÒ³öÆô¶¯ÖÐÏà¶ÔºÄʱµÄ¹ý³Ì¡£
¡¡¡¡±ØÐëÃ÷È·Ò»µã£º±¨¸æÖеÄʱ¼äÔöÁ¿ºÍÄÚºËÐÅÏ¢Ö®¼äûÓбØÈ»µÄ¶ÔÓ¦¹Øϵ£¬ÕæÕýµÄʱ¼äÏûºÄ±ØÐë´ÓÄÚºËÔ´ÂëÈëÊÖ·ÖÎö¡£
¡¡¡¡ÕâÒ»µã¶ÔÓÚÉÔ΢ÊìϤ±à³ÌµÄÅóÓÑÀ´Ëµ¶¼²»ÄÑÀí½â£¬ÒòΪʱ¼äÔöÁ¿Ö»ÊÇÁ½´Îµ÷ÓÃprintkÖ®¼äµÄʱ¼ä²îÖµ¡£Í¨³£À´Ëµ£¬ÄÚºËÆô¶¯¹ý³ÌÖÐÔÚÍê³ÉһЩºÄʱµÄÈÎÎñ£¬Èç´´½¨hashË÷Òý¡¢probeÓ²¼þÉ豸µÈ²Ù×÷ºó»áͨ¹ýprintk½«½á¹û´òÓ¡³öÀ´£¬ÕâÖÖÇé¿öÏ£¬Ê±¼äÔöÁ¿ÍùÍù·´Ó³µÄÊÇÐÅÏ¢¶ÔÓ¦¹ý³ÌµÄºÄʱ£»µ«ÓÐЩʱºò£¬ÄÚºËÊÇÔÚµ÷ÓÃprintkÊä³öÐÅÏ¢ºó²Å¿ªÊ¼ÏàÓ¦µÄ¹ý³Ì£¬ÄÇô±¨¸æÖÐÄÚºËÐÅÏ¢ÏàÓ¦¹ý³ÌµÄʱ¼äÏûºÄ¶ÔÓ¦µÄÊÇÆäÏÂÒ»ÐеÄʱ¼äÔöÁ¿£»»¹ÓÐһЩʱºò£¬Ê±¼äÏûºÄÔÚÁËÁ½´ÎÄÚºËÐÅÏ¢Êä³öÖ®¼äµÄij¸ö²»È·¶¨µÄʱ¶Î£¬ÕâÑùʱ¼äÔöÁ¿¿ÉÄܾÍÍêÈ«ÎÞ·¨Í¨¹ýÄÚºËÐÅÏ¢·´Ó¦³öÀ´ÁË¡£
¡¡¡¡ËùÒÔ£¬ÎªÁË׼ȷÅжÏÕæÕýµÄʱ¼äÏûºÄ£¬ÎÒÃÇÐèÒª½áºÏÄÚºËÔ´Âë½øÐзÖÎö¡£±ØÒªµÄʱºò£¬ÀýÈçÉÏÊöµÚÈýÖÖÇéÐÎÏ£¬»¹µÃ×Ô¼ºÔÚÔ´ÂëÖвåÈëprintk´òÓ¡£¬ÒÔ½øÒ»²½È·¶¨Êµ¼ÊµÄʱ¼äÏûºÄ¹ý³Ì¡£
¡¡¡¡ÒÔÏÂÊÇÎÒÉϴβüõºóLinuxÄں˵ÄÆô¶¯·ÖÎö£º
¡¡¡¡ÄÚºËÆô¶¯×Üʱ¼ä£º 6.188s
¡¡¡¡¹Ø¼üµÄºÄʱ²¿·Ö£º
¡¡¡¡1) 0.652s - Timer,IRQ,Cache,Mem PagesµÈºËÐIJ¿·ÖµÄ³õʼ»¯
¡¡¡¡2) 0.611s - ÄÚºËÓëRTCʱÖÓͬ²½
¡¡¡¡3) 0.328s - ¼ÆËãCalibrating Delay£¨4¸öCPUºËÐĵÄ×ÜÏûºÄ£©
¡¡¡¡4) 0.144s - У׼APICʱÖÓ
¡¡¡¡5) 0.312s - У׼Migration Cost
¡¡¡¡6) 3.520s - Intel E1000Íø¿¨³õʼ»¯
¡¡¡¡ÏÂÃ棬½«Õë¶ÔÉÏÊö¸÷²¿·Ö½øÐÐÖðÒ»·ÖÎöºÍ»¯½â¡£
¡¡¡¡£¨3£©½ÓÏÂÀ´£¬½øÐоßÌåµÄ·ÖÏîÓÅ»¯¡£
¡¡¡¡CELFÒѾÌá³öÁËÒ»ÕûÌ×Õë¶ÔÏû·ÑÀàµç×Ó²úÆ·ËùʹÓõÄǶÈëʽLinuxµÄÆô¶¯ÓÅ»¯·½°¸£¬µ«ÊÇÓÉÓÚÃæÏò²»Í¬Ó¦Óã¬ËùÒÔÎÒÃÇÖ»Äܲ¿·Ö½è¼øËûÃǵľÑ飬Õë¶Ô×Ô¼ºÃæ¶ÔµÄÎÊÌâ×÷³ö¾ßÌåµÄ·ÖÎöºÍ³¢ÊÔ¡£
¡¡¡¡Äں˹ؼü²¿·Ö£¨Timer¡¢IRQ¡¢Cache¡¢Mem Pages¡¡£©µÄ³õʼ»¯Ä¿Ç°ÔÝʱûÓбȽϿɿ¿ºÍ¿ÉÐеÄÓÅ»¯·½°¸£¬ËùÒÔÔݲ»¿¼ÂÇ¡£
¡¡¡¡¶ÔÓÚÉÏÃæ·ÖÎö½á¹ûÖÐµÄ 2¡¢3 Á½ÏCELFÒÑÓÐרÏîµÄÓÅ»¯·½°¸£º¡°RTCNoSync¡±ºÍ¡°PresetLPJ¡±¡£
¡¡¡¡Ç°Õßͨ¹ýÆÁ±ÎÆô¶¯¹ý³ÌÖÐËù½øÐеÄRTCʱÖÓͬ²½»òÕß½«ÕâÒ»¹ý³Ì·Åµ½Æô¶¯ºó½øÐУ¨ÊÓ¾ßÌåÓ¦ÓöÔʱÖÓ¾«¶ÈµÄÐèÇó¶ø¶¨£©£¬ÊµÏÖÆðÀ´±È½ÏÈÝÒ×£¬µ«ÐèҪΪÄں˴ò²¹¶¡¡£ËƺõCELFÄ¿Ç°µÄ¹¤×÷½ö½öÊÇÈ¥µôÁ˸ùý³Ì£¬¶øûÓÐʵÏÖËùÌáµ½µÄ¡°ÑÓºó¡±´¦ÀíRTCʱÖÓµÄͬ²½¡£¿¼Âǵ½Õâ¸öÔÒò£¬Îҵķ½°¸ÖÐÔÝʱûÓÐÒýÈëÕâÒ»ÓÅ»¯£¨±Ï¾¹ËüËù´øÀ´µÄʱ¼äƯÒÆÒѾ´ïµ½ÁË¡°Ã롱¼¶£©£¬¼ÌÐø¹Ø×¢ÖС£
¡¡¡¡ºóÕßÊÇͨ¹ýÔÚÆô¶¯²ÎÊýÖÐÇ¿ÖÆÖ¸¶¨LPJÖµ¶øÌø¹ýʵ¼ÊµÄ¼ÆËã¹ý³Ì£¬ÕâÊÇ»ùÓÚLPJÖµÔÚÓ²¼þÌõ¼þ²»±äµÄÇé¿öϲ»»á±ä»¯µÄ¿¼ÂÇ¡£ËùÒÔÔÚÕý³£Æô¶¯ºó¼Ç¼ÏÂÄÚºËÐÅÏ¢Öеġ°Calibrating Delay¡±ÊýÖµºó¾Í¿ÉÒÔÔÚÆô¶¯²ÎÊýÖÐÒÔÏÂÃæµÄÐÎʽǿÖÆÖ¸¶¨LPJÖµÁË£º
¡¡¡¡lpj=9600700
¡¡¡¡ÉÏÃæ·ÖÎö½á¹ûÖÐµÄ 4¡¢5 Á½ÏÊÇSMP³õʼ»¯µÄÒ»²¿·Ö£¬Òò´Ë²»ÔÚCELFÑо¿µÄ·¶³ë£¨»òÐí½«À´»áÓвÉÓöàºËµÄMP4³öÏÖ£¿¡¡£©£¬Ö»ÄÜ×ÔÁ¦¸üÉúÁË¡£Ñо¿ÁËÒ»ÏÂSMPµÄ³õʼ»¯´úÂ룬·¢ÏÖ¡°Migration Cost¡±ÆäʵҲ¿ÉÒÔÏñ¡°Calibrating Delay¡±²ÉÓÃÔ¤Öõķ½Ê½Ìø¹ýУ׼ʱ¼ä¡£·½·¨ÀàËÆ£¬×îºóÔÚÄÚºËÆô¶¯²ÎÊýÖÐÔö¼Ó£º
¡¡¡¡migration_cost=4000,4000
¡¡¡¡¶øIntelµÄÍø¿¨Çý¶¯³õʼ»¯ÓÅ»¯ÆðÀ´¾Í±È½ÏÂé·³ÁË£¬ËäȻҲÊÇ¿ªÔ´£¬µ«¶ÁÓ²¼þÇý¶¯ÍêÈ«²»±È¶ÁÒ»°ãµÄC´úÂ룬¿öÇÒ½¨Á¢ÔÚÈç´Ë·ôdzÀí½â»ù´¡Éϵġ°ÓÅ»¯¡±ÐÞ¸ÄҲʵÔÚÄѱ£ÍòÈ«¡£»ùÓÚ¿É¿¿ÐԵĿ¼ÂÇ£¬ÎÒ×îÖÕÔÚÁ½´Î³¢ÊÔ¾ù¸æʧ°Üºó·ÅÆúÁËÕâÒ»Ìõ·¡£ÄÇô£¬»»Ò»¸ö˼ά½Ç¶È£¬¿ÉÒÔ½è¼øCELFÔÚ¡°ParallelRCScripts¡±·½°¸Öеġ°²¢Ðгõʼ»¯¡±Ë¼Ï룬½«Íø¿¨Çý¶¯¶ÀÁ¢±àÒëΪģ¿é£¬·ÅÔÚ³õʼ»¯½Å±¾ÖÐÓëÆäËüÄ£¿éºÍÓ¦ÓÃͬ²½¼ÓÔØ£¬´Ó¶øÏû³ýProbe×èÈû¶ÔÆô¶¯Ê±¼äµÄÓ°Ïì¡£¿¼Âǵ½Ó¦Óóõʼ»¯Ò²¿ÉÄÜʹÓõ½ÍøÂ磬¶øÔÚÎÒÃǵÄʵ¼ÊÓ²¼þ»·¾³ÖУ¬Ö»ÓÐeth0Êǹ©Ó¦ÓÃʹÓõģ¬Òò´ËÐèÒª½«µÚÒ»¸öÍø¿Ú³õʼ»¯µÄ0.3sʱ¼ä¼ÆËãÔÚÄÚ¡£
¡¡¡¡³ýÁËÔÚÎҵķ½°¸ÖÐËùÓöµ½µÄÉÏÊö¸÷ÓÅ»¯µã£¬CELF»¹Ìá³öÁËһЩÄã¿ÉÄÜ»á¸ÐÐËȤµÄÓÐÌض¨Õë¶ÔÐÔµÄרÏîÓÅ»¯£¬È磺
¡¡¡¡ShortIDEDelays - Ëõ¶ÌIDE̽²âʱ³¤£¨ÎÒµÄÓ¦Óó¡¾°Öв»°üº¬Ó²ÅÌ£¬ËùÒÔÓò»ÉÏ£©
¡¡¡¡KernelXIP - Ö±½ÓÔÚROM»òFlashÖÐÔËÐÐÄںˣ¨¿¼Âǵ½¼æÈÝÐÔÒòËØ£¬Î´²ÉÓã©
¡¡¡¡IDENoProbe - Ìø¹ýδÁ¬½ÓÉ豸µÄIDE¿Ú
¡¡¡¡OptimizeRCScripts - ÓÅ»¯initrdÖеÄlinuxrc½Å±¾£¨ÎÒ²ÉÓÃÁËBusyBox¸ü¼ò½àµÄlinuxrc£©
¡¡¡¡ÒÔ¼°ÆäËüһЩÉд¦ÓÚÉèÏë½×¶ÎµÄÓÅ»¯·½°¸£¬¸ÐÐËȤµÄÅóÓÑ¿ÉÒÔ·ÃÎÊCELF Developer WikiÁ˽âÏêÇé¡£
¡¡¡¡£¨4£©ÓÅ»¯½á¹û
¡¡¡¡¾¹ýÉÏÊöרÏîÓÅ»¯£¬ÒÔ¼°¶Ôinittab¡¢rcS½Å±¾µÄÈßÓà²Ã¼õ£¬Õû¸öLinuxÄں˵ÄÆô¶¯Ê±¼ä´ÓÓÅ»¯Ç°µÄ 6.188s Ͻµµ½ÁË×îÖÕµÄ 2.016s£¬Èç¹û²»°üº¬eth0µÄ³õʼ»¯£¬Ôò½öÐè 1.708s£¨eth0³õʼ»¯¿ÉÒÔºÍϵͳÖмä¼þ¼°²¿·ÖÓ¦ÓüÓÔز¢ÐУ©£¬»ù±¾´ïµ½Á˼ȶ¨Ä¿±ê¡£ÓëKexecÅäºÏ£¬¿ÉÒÔ´ó´ó½µµÍÈí¼þ¹ÊÕϵ¼Öµĸ´Î»Ê±¼ä£¬ÓÐЧµÄÌáÉýÁ˲úÆ·µÄ¿É¿¿ÐÔ¡£