±à¼ÍƼö: |
±¾ÎÄÖ÷Òª±¾ÎļòÒª½éÉÜÁ˶àºË¶àÏ̻߳·¾³µÄÌØÐÔ£¬¶ÔÈí¼þÉè¼Æ¾ö²ßµÄÓ°ÏìÒÔ¼°Ð©ÖØÒª¿¼ÂÇÊÂÏîºÍ¼¼ÇÉ¡£
±¾ÎÄÀ´×ÔÓÚIBM£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
¼ò½é
¼ÆËãÓ²¼þÕýÔÚ¿ìËÙÅ·¢Õ¹¡£ÔÚʱÖÓËÙ¶È³ÊÆ½ÎÈ״̬µÄͬʱ£¬¾§Ìå¹ÜÃܶÈÔÚ²»¶ÏÔö³¤¡£´¦ÀíÆ÷ÖÆÔìÉÌÏ£Íûͨ¹ýÈÃÿ¸öоƬӵÓжà¸öºËºÍÓ²¼þÏß³ÌÀ´Ìá¸ß¶à´¦ÀíÄÜÁ¦¡£ÀýÈ磬IBM
POWER7? ¶Ô³Æ¶à´¦ÀíÆ÷¼Ü¹¹Í¨¹ýÿ¸öºËÖ§³Ö¶à´ï 4 ¸öÏ̡߳¢Ã¿¸öоƬ֧³Ö 8 ¸öºË¡¢Ã¿Ì¨·þÎñÆ÷Ö§³Ö
32 ¸öоƬ²å²ÛÀ´ÊµÏָ߶Ȳ¢ÐÐÐÔ£¬×ܹ² 1024 ¸ö²¢·¢Ó²¼þÏ̡߳£Ïà±È֮ϣ¬IBM POWER6?
¼Ü¹¹½öÖ§³Öÿ¸öºË 2 ¸öÏ̡߳¢Ã¿¸öоƬ 2 ¸öºË¡¢Ã¿Ì¨·þÎñÆ÷ 32 ¸öоƬ²å²Û£¬×ܹ² 128 ¸ö²¢ÐÐÓ²¼þÏ̡߳£
¿ª·¢Èí¼þʱ£¬Ä¿Ç°Éè¼ÆÈËÔ±ÐèÒª¿¼ÂÇ¿ÉÄܻᲿÊðÈí¼þµÄ¶à´¦ÀíÆ÷¡¢¶àºË¼Ü¹¹¡£ÕâÊÇÒòΪ£º
ͨ¹ýʹÓøü¶àºË¡¢Ó²¼þÏ̡߳¢¸ü¸ßµÄÄڴ棬ӦÓóÌÐòÓ¦¸Ã»á¸üºÃµØÖ´Ðк͸ü³öÉ«µØÉìËõÐÔ£¬²¢ÄÜÂú×ã²»¶ÏÔö³¤µÄÐÔÄܺÍЧÂÊÐèÇó¡£
Ëæ×ÅÔ½À´Ô½¶àµØÊ¹ÓöàºË¡¢¶à´¦ÀíÆ÷ϵͳ£¬Èí¼þÉè¼Æ×¢ÒâÊÂÏîÏÖÔÚÓ¦¸Ã¿¼Âǰüº¬Äܹ»ÔÚÕâЩ¼ÆËã×ÊÔ´Ö®¼äÓÐЧµØ·Ö·¢Èí¼þ¹¦Äܵķ½·¨¡£
Èç¹ûÔÚÉè¼ÆµÄ¹ý³ÌÖÐûÓп¼ÂÇÕâЩ¿¼ÂÇÊÂÏÄÇôÔÚ¶à´¦ÀíÆ÷¡¢¶àºË»·¾³ÖÐÔËÐÐÓ¦ÓóÌÐò¿ÉÄܻᵼÖÂÑÏÖØÇÒ²»Ò×·¢ÏÖµÄÐÔÄÜÎÊÌâ¡£
±¾ÎĽ«»á¼òÒª½éÉÜΪ¶àºË¡¢¶à´¦ÀíÆ÷»·¾³Éè¼ÆÈí¼þʱµÄÒ»Ð©ÖØÒª×¢ÒâÊÂÏî¡£
ÔÚоƬ¶àÏ̡߳¢¶àºË¡¢¶à´¦ÀíÆ÷¼Ü¹¹ÉÏÈí¼þ¿ÉÉìËõÐÔµÄ×è°
Ó¦ÓóÌÐòÓ¦¸ÃÄܹ»ÔÚ¶àºË¡¢¶à´¦ÀíÆ÷»·¾³ÖиüºÃµØÉìËõ¡¢¸ü³öÉ«µØÖ´ÐС£µ«ÊÇ£¬Èç¹ûÓ¦ÓóÌÐòÉè¼ÆµÄЧÂʵÍÏ£¬Ôò¿ÉÄÜ»áÔÚÕâÑùµÄ»·¾³ÖÐÖ´Ðеýϲµ«Í¨¹ýʹÓÿÉÓõļÆËã×ÊÔ´¿ÉÒÔ¸üºÃµØÉìËõºÍ¸ü³öÉ«µØÖ´ÐС£Õâ¸ö¿ÉÉìËõÐÔµÄÒ»Ð©ÖØÒª×è°¿ÉÄÜÊÇ£º
ЧÂʵÍϵIJ¢Ðл¯£ºµ¥Æ¬Ó¦ÓóÌÐò»òÈí¼þÎÞ·¨ÓÐЧʹÓÿÉÓõļÆËã×ÊÔ´¡£ÄúÐèÒª½«Ó¦ÓóÌÐò×éÖ¯³É²¢ÐÐÈÎÎñ¡£ÔÚ´«Í³µÄ²»Ö§³Ö¶àÏ̵߳ÄÓ¦ÓóÌÐò»òÈí¼þÖУ¬ÎÒÃǻᾳ£¿´µ½Õâ¸öÎÊÌâ¡£ÕâЩӦÓóÌÐòÔÚ¶àºË¡¢¶à´¦ÀíÆ÷¡¢Ð¾Æ¬¶àÏß³ÌÓ²¼þÉÏÎÞ·¨ÉìËõ£¬²¢ÇÒÎÞ·¨ÊµÏÖ¸üºÃµÄÍÌÍÂÁ¿¡£Ïß³ÌÌ«¶à¿ÉÄÜ»áºÍÏß³ÌÌ«ÉÙÒ»Ñù£¬¶¼²»»á²úÉúºÃµÄ½á¹û¡£
´®ÐÐÆ¿¾±£ºÔÚ¶à¸öÏ̻߳ò½ø³ÌÖ®¼ä¹²ÏíÊý¾Ý½á¹¹µÄÓ¦ÓóÌÐò¿ÉÄÜ»áÓд®ÐÐÆ¿¾±¡£ÎªÁ˱£³ÖÊý¾ÝÍêÕûÐÔ£¬¿ÉÄܱØÐëʹÓÃËø¶¨ºÍ´®Ðл¯¼¼Êõ£¨ÀýÈ磬¶ÁÈ¡Ëø¡¢¶ÁÐ´Ëø¡¢Ð´ÈëËø¡¢×ÔÐýËø¡¢»¥³âµÈ£©½«ÕâЩ¹²ÏíÊý¾Ý½á¹¹µÄ·ÃÎÊ´®Ðл¯¡£Éè¼ÆµÃЧÂʵÍϵÄËø¿ÉÄÜ»áÓÉÓÚ¶à¸öÏ̻߳ò½ø³ÌÖ®¼äµÄ¸ß¶ÈËøÕùÓöøµ¼Ö´®ÐÐÆ¿¾±£¬´Ó¶ø³¢ÊÔ»ñÈ¡Ëø¡£Õâ¿ÉÄÜ»áDZÔڵؽµµÍÓ¦ÓóÌÐò»òÈí¼þµÄÐÔÄÜ¡£Ó¦ÓóÌÐòµÄÐÔÄÜ¿ÉÄÜ»áËæ×źËÐÄ»ò´¦ÀíÆ÷ÊýÁ¿µÄÔö¼Ó¶ø½µµÍ¡£
¶Ô²Ù×÷ϵͳ (OS) »òÔËÐÐʱ»·¾³µÄ¹ý¶ÈÒÀÀµ£ºÄú²»ÄÜÒÀÀµ²Ù×÷ϵͳ¡¢ÔËÐÐʱ»·¾³»ò±àÒëÆ÷À´Íê³ÉÉìËõÓ¦ÓóÌÐò»òÈí¼þËùÐèµÄÒ»ÇвÙ×÷¡£µ«ÊÇ£¬±àÒëÆ÷ºÍÔËÐÐʱ»·¾³¿ÉÒÔ°ïÖúÌṩһ¶¨µÄÓÅ»¯£¬Äú²»ÄÜÒÀÀµËüÃǽâ¾öËùÓпÉÉìËõÐÔÎÊÌâ¡£ÀýÈ磬²»ÄÜÒÀÀµ
Java? ÐéÄâ»ú (JVM) ͨ¹ý×Ô¶¯²¢ÐÐÀ´·¢ÏÖ Java Ó¦ÓóÌÐòµÄ×î¼Ñ¿ÉÉìËõµÄ»ú»á¡£
¹¤×÷¸ºÔصIJ»Æ½ºâ¿ÉÄÜÊÇÒ»¸öÆ¿¾±£º¹¤×÷¸ºÔصIJ»¾ùÔÈ·Ö²¼¿ÉÄܵ¼ÖÂÎÞ·¨ÓÐЧµØÀûÓüÆËã×ÊÔ´¡£Äú¿ÉÄܱØÐ뽫½Ï´óµÄÈÎÎñ»®·Ö³É¿ÉÒÔ²¢ÐÐÔËÐеĽÏСµÄÈÎÎñ£¬»¹¿ÉÄܱØÐ뽫´®ÐÐËã·¨¸ü¸ÄΪ²¢ÐÐËã·¨£¬ÒÔ±ãÌá¸ßÐÔÄܺͿÉÉìËõÐÔ¡£
I/O Æ¿¾±£ºÓÉÓÚ×èÖ¹´ÅÅÌÊäÈë/Êä³ö (I/O) »ò¸ßÍøÂçÑÓ³Ù¶øµ¼ÖÂµÄÆ¿¾±¿ÉÄÜ»áÑÏÖØÒÖÖÆÓ¦ÓóÌÐòµÄ¿ÉÉìËõÐÔ¡£
ÎÞЧµÄÄÚ´æ¹ÜÀí£ºÔÚ¶àºËƽ̨ÉÏ£¬ÒòΪÓкܶദÀíµ¥Ôª£¬Òò´Ë´¿¼ÆËã¿ÉÄܷdz£Á®¼Û£¬²¢ÇÒÖ÷ÒªÄÚ´æ¿ÉÄÜÒ²²»ÊÇÎÊÌ⣬ÒòΪËüÕýÔÚ±äµÃÔ½À´Ô½´ó¡£µ«ÊÇ£¬ÄÚ´æ´ø¿íÒ»Ö±ÊÇÒ»¸öÆ¿¾±£¬ÒòΪËùÓд¦ÀíÆ÷ºËÐͼ¹±Ï×ÁËÒ»¸öͨÓõÄ×ÜÏß¡£ÎÞЧµÄÄÚ´æ¹ÜÀí¿ÉÄܵ¼ÖÂһЩÄÑÒÔ¼ì²âµ½µÄÐÔÄÜÎÊÌ⣬±ÈÈçα¹²Ïí¡£
µÍ´¦ÀíÆ÷ÀûÓÃÂÊ¿ÉÄÜ»áÃ÷È·±íÃ÷×ÊÔ´ÀûÓÃÂÊδ´ïµ½×î¼ÑÖµ¡£ÎªÁËÁ˽âÐÔÄÜÎÊÌ⣬ÄúÐèÒªÆÀ¹ÀÒ»ÏÂÓ¦ÓóÌÐòÊÇ·ñ¾ßÓÐÌ«ÉÙ»òÌ«¶àµÄỊ̈߳¬ÊÇ·ñÓÐËø¶¨»òͬ²½ÎÊÌâ¡¢ÍøÂç»ò
I/O ÑÓ³Ù¡¢ÄÚ´æ¶¶¶¯»òÆäËûÄÚ´æ¹ÜÀíÎÊÌâ¡£Ö»Òª×ÊÔ´ÊÇ»¨·ÑÔÚÓÐÒâÒåµÄ¹¤×÷µÄÓ¦ÓóÌÐòÏß³ÌÉÏ£¬¸ß´¦ÀíÆ÷ÀûÓÃÂÊͨ³£¶¼»á²»´í¡£
оƬ¶àÏß³Ì (CMT)¡¢¶àºËºÍ¶à´¦ÀíÆ÷ (MP) ϵͳ¸ÅÊö
ÔÚÌÖÂÛоƬ¶àÏ̡߳¢¶àºË¡¢¶à´¦ÀíÆ÷»·¾³µÄÉè¼Æ×¢ÒâÊÂÏî֮ǰ£¬ÎÒÃÇ»á¼òÒª½éÉÜÕâÀàϵͳ¡£Í¼ 1 ËùÊöµÄϵͳÓÐÁ½¸ö´¦ÀíÆ÷£¬Ã¿¸ö´¦ÀíÆ÷ÓÐÁ½¸öºËÐÄ£¬²¢ÇÒÿ¸öºËÐÄÓÐÁ½¸öÓ²¼þÏ̡߳£Ã¿¸öºËÐÄÓÐÒ»¸ö
L1 »º´æºÍÒ»¸ö L2 »º´æ¡£Òò´Ë£¬Ã¿¸öºËÐÄ¿ÉÄܶ¼ÓµÓÐ×Ô¼ºµÄ L2 »º´æ£¬»òÕßͬһ¸ö´¦ÀíÆ÷ÉϵĺËÐÄ¿ÉÄܻṲÏí
L2 »º´æ¡£Í¬Ò»¸öºËÉϵÄÓ²¼þÏ̻߳ṲÏí L1 ºÍ L2 »º´æ¡£
ͼ 1. Ò»¸öµäÐ͵ÄоƬ¶àÏ̡߳¢¶àºË¡¢¶à´¦ÀíÆ÷ϵͳ

ÃèÊöоƬ¶àÏ̡߳¢¶àºË¡¢¶à´¦ÀíÆ÷ϵͳµÄ·½¿òͼ¡£
ËùÓк˺ʹ¦ÀíÆ÷¶¼¹²Ïíϵͳ×ÜÏߣ¬²¢Í¨¹ýϵͳ×ÜÏß·ÃÎÊÖ÷ÒªÄÚ´æ»ò RAM¡£¶ÔÓÚÓ¦ÓóÌÐòºÍ²Ù×÷ϵͳ£¬¸Ãϵͳ¿´ÆðÀ´¾ÍÏñÊÇ
8 ¸öÂß¼´¦ÀíÆ÷¡£
ÒÔÏÂÖØÒª¸ÅÄ°ïÖúÎÒÃÇÁ˽âΪÕâÑùÒ»¸öоƬ¶àÏ̡߳¢¶àºË¡¢¶à´¦ÀíÆ÷»·¾³Éè¼ÆÓ¦ÓóÌÐòʱËùÃæÁÙµÄÌôÕ½¡£
»º´æÒ»ÖÂÐÔ
»º´æÒ»ÖÂÐÔÊDZíʾ´¦ÀíÆ÷»º´æÖеÄÊý¾ÝÏîĿֵÓëϵͳÄÚ´æÖеÄÊý¾ÝÏîĿֵÏàͬµÄÒ»ÖÖ״̬¡£¸Ã״̬¶ÔÓÚÈí¼þÀ´ËµÊÇ͸Ã÷µÄ¡£µ«ÊÇ£¬ÏµÍ³ÎªÁ˱£³Ö»º´æÒ»ÖÂÐÔ¶øÖ´ÐеIJÙ×÷¿ÉÄÜ»áÓ°ÏìÈí¼þµÄÐÔÄÜ¡£
¿¼ÂÇÕâÑùÒ»¸öʾÀý£ºÎÒÃǼٶ¨ÔÚͼ 1 ËùÊöµÄϵͳÖУ¬Ïß³Ì 1 ÕýÔÚ´¦ÀíÆ÷ 0 ÉÏÔËÐУ¬¶øÏß³Ì 2 ÕýÔÚ´¦ÀíÆ÷
1 ÉÏÔËÐС£Èç¹ûÕâÁ½¸öÏ̶߳¼ÕýÔÚ¶ÁÈ¡ºÍдÈëÏàͬµÄÊý¾ÝÏÄÇô¸Ãϵͳ±ØÐëÖ´ÐжîÍâµÄ²Ù×÷£¬ÒÔÈ·±£ÔÚ½øÐÐÿ¸ö¶ÁÈ¡ºÍдÈë²Ù×÷ʱ£¬Ï̶߳¼¿´µ½ÏàͬµÄÊý¾ÝÖµ¡£
µ±Ïß³Ì 1 ÔÚÓëÏß³Ì 2 ¹²ÏíµÄÊý¾ÝÏîÖÐÖ´ÐÐдÈë²Ù×÷ʱ£¬»áÔÚÆä´¦ÀíÆ÷»º´æºÍϵͳÄÚ´æÖиüиÃÊý¾ÝÏµ«²»»áÔÚÏß³Ì
2 ´¦ÀíÆ÷µÄ»º´æÖÐÁ¢¼´¸üÐÂÊý¾Ý£¬ÒòΪÏß³Ì 2 ¿ÉÄܲ»ÔÙÐèÒª·ÃÎʸÃÊý¾ÝÏî¡£Èç¹ûÏß³Ì 2 Ö®ºó·ÃÎʸÃÊý¾ÝÏÔòÆä´¦ÀíÆ÷ÉϵĻº´æ×Óϵͳ±ØÐëÊ×ÏÈ´ÓϵͳÄÚ´æÖлñȡеÄÊý¾ÝÖµ¡£Òò´Ë£¬Ïß³Ì
1 µÄдÈë»áÆÈʹÏß³Ì 2 ÔÚÏ´ηÃÎʸÃÊý¾ÝʱµÈ´ý´ÓϵͳÄÚ´æÖжÁÈ¡Êý¾Ý¡£½öµ±Êý¾Ý±»ÆäÖÐÒ»¸öÏß³ÌÐÞ¸Äʱ£¬²Å»á³öÏÖÕâÖÖÇé¿ö¡£Èç¹ûÿ¸öÏ̶߳¼½øÐÐÁËһϵÁеÄдÈë²Ù×÷£¬ÄÇôÕâ¿ÉÄÜ»áÑÏÖØÓ°ÏìϵͳµÄÐÔÄÜ£¬ÒòΪËùÓÐʱ¼ä¶¼»¨·ÑÔڵȴý¸üÐÂϵͳÄÚ´æÖеÄÊý¾ÝÖµÉÏ¡£ÕâÖÖÇé¿ö±»³ÆÎª¡°Æ¹ÅÒЧӦ¡±£¬µ±ÔÚ¶à´¦ÀíÆ÷ºÍ¶àºËϵͳÉÏÔËÐÐʱ£¬Ó¦±ÜÃâ·¢ÉúÕâÖÖÇé¿ö£¬ÕâÊÇÒ»ÏîÖØÒªµÄÈí¼þÉè¼Æ×¢ÒâÊÂÏî¡£
Ðá̽ - Snooping
ÕâÊÇÒ»¸ö¸ú×Ùÿ¸ö»º´æÐеÄ״̬µÄ»º´æ×Óϵͳ¡£¸ÃϵͳʹÓÃÒ»¸ö³ÆÎª ¡°×ÜÏß¶¯Ì¬¼àÊÓ¡± »òÕß³ÆÎª¡°×ÜÏßÐá̽¡±
µÄ¼¼ÊõÀ´¼àÊÓÔÚϵͳ×ÜÏßÉÏ·¢ÉúµÄËùÓÐÊÂÎñ£¬ÒÔ¼ì²â»º´æÖеÄij¸öµØÖ·ÉϺÎʱ·¢ÉúÁ˶ÁÈ¡»òдÈë²Ù×÷¡£
µ±Õâ¸ö»º´æ×ÓϵͳÔÚϵͳ×ÜÏßÉϼì²âµ½¶Ô»º´æÖмÓÔØµÄÄÚ´æÇøÓò½øÐеĶÁÈ¡²Ù×÷ʱ£¬Ëü»á½«¸Ã»º´æÐеÄ״̬¸ü¸ÄΪ
¡°shared¡±¡£Èç¹ûËü¼ì²âµ½¶Ô¸ÃµØÖ·µÄдÈë²Ù×÷ʱ£¬»á½«»º´æÐеÄ״̬¸ü¸ÄΪ ¡°invalid¡±¡£
¸Ã»º´æ×ÓϵͳÏëÖªµÀ£¬µ±¸ÃϵͳÔÚ¼àÊÓϵͳ×ÜÏßʱ£¬ÏµÍ³ÊÇ·ñÔÚÆä»º´æÖаüº¬Êý¾ÝµÄΩһ¸±±¾¡£Èç¹ûÊý¾ÝÓÉËü×Ô¼ºµÄ
CPU ½øÐÐÁ˸üУ¬ÄÇôÕâ¸ö»º´æ×Óϵͳ»á½«»º´æÐеÄ״̬´Ó ¡°exclusive¡± ¸ü¸ÄΪ ¡°modified¡±¡£Èç¹û¸Ã»º´æ×Óϵͳ¼ì²âµ½ÁíÒ»¸ö´¦ÀíÆ÷¶Ô¸ÃµØÖ·µÄ¶ÁÈ¡£¬Ëü»á×èÖ¹·ÃÎÊ£¬¸üÐÂϵͳÄÚ´æÖеÄÊý¾Ý£¬È»ºóÔÊÐí¸Ã´¦ÀíµÄ·ÃÎʼÌÐø½øÐС£Ëü»¹ÔÊÐí½«¸Ã»º´æÐеÄ״̬±ê¼ÇΪ
shared¡£
ÓйØÕâЩ¸ÅÄîµÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄ ²Î¿¼×ÊÁÏ ²¿·ÖÖÐÓÐ¹Ø ¡°¶àºË¶à´¦ÀíÆ÷ϵͳµÄÈí¼þÉè¼ÆÎÊÌ⡱ µÄÎÄÕ¡£
¶àºË¶à´¦ÀíÆ÷»·¾³¶ÔÈí¼þÉè¼Æ¾ö²ßµÄÓ°Ïì
µ±Éè¼ÆÒªÔÚ¶àºË»ò¶à´¦ÀíÆ÷ϵͳÉÏÔËÐеÄÈí¼þʱ£¬Ö÷ÒªµÄ¿¼ÂÇÊÂÏîÊÇÈçºÎ·ÖÅ佫ÔÚ¿ÉÓõĴ¦ÀíÆ÷ÉÏÍê³ÉµÄ¹¤×÷¡£·ÖÅä¸Ã¹¤×÷µÄ×î³£Ó÷½·¨ÊÇʹÓÃÒ»¸öÏß³ÌÄ£ÐÍ£¬¸ÃÄ£ÐͿɽ«¹¤×÷·Ö³É¿ÉÒÔÔÚ²»Í¬´¦ÀíÆ÷Éϲ¢ÐÐÔËÐеĸ÷¸öÖ´Ðе¥Ôª¡£Èç¹ûÏß³ÌÖ®¼ä±Ë´ËÍêÈ«¶ÀÁ¢£¬ÄÇôËüÃǵÄÉè¼ÆÎÞÐ迼ÂÇËüÃÇÖ®¼äµÄ½»»¥·½Ê½¡£ÀýÈ磬ÔÚÒ»¸öϵͳÉÏÔËÐеÄÁ½¸ö³ÌÐò£¬Ã¿¸ö³ÌÐò¶¼Ê¹Óõ¥¶ÀµÄ½ø³ÌÔÚ×Ô¼ºµÄºËÐÄÉÏÔËÐУ¬Òò´ËÎÞÐè±Ë´Ë½øÐйØ×¢¡£³ÌÐòµÄÐÔÄܲ»»áÊܵ½ÈκÎÓ°Ï죬³ý·ÇËüÃÇÕùÓù²ÏíµÄ×ÊÔ´£¬±ÈÈçϵͳÄÚ´æ»òÏàͬµÄ
I/O É豸¡£
½ÓÏÂÀ´ÒªÌÖÂÛµÄÖØµãÊǺËÐĺʹ¦ÀíÆ÷ÓëÖ÷ÒªÄÚ´æµÄ¹µÍ¨·½Ê½£¬ÒÔ¼°Õâ¶ÔÈí¼þÉè¼Æ¾ö²ßÓкÎÓ°Ïì¡£
Çë²Î¼ûÒÔÏÂÖØÒªµÄÉè¼Æ×¢ÒâÊÂÏî¡£
±ÜÃâÄÚ´æÕùÓÃ
ÔÚÄÚ´æºÍ»º´æÖУ¬¸÷ÖÖ²»Í¬µÄºË¹²ÏíÒ»¸öͨÓõÄÊý¾ÝÇøÓò£¬ÕâÐèÒªÔÚËüÃÇÖ®¼ä½øÐÐͬ²½¡£µ±²»Í¬µÄºËͬʱ·ÃÎÊͬһ¸öÊý¾ÝÇøÓòʱ£¬»á·¢ÉúÄÚ´æÕùÓá£ÔÚ²»Í¬µÄºËÖ®¼äͬ²½Êý¾Ý»áÒò×ÜÏßͨÐÅ¡¢Ëø¶¨³É±¾ÒÔ¼°»º´æÈ±Ê§¶øÓкܴóµÄÐÔÄÜËðʧ¡£
Èç¹ûÓ¦ÓóÌÐòÓжà¸öỊ̈߳¬²¢ÇÒËùÓÐÏ̶߳¼¸üлòÐÞ¸Äͬһ¸öÄÚ´æµØÖ·£¬ÄÇôÕýÈçÇ°Ãæ²¿·ÖËùÌÖÂÛµÄÄÇÑù£¬ÎªÁ˱£³Ö»º´æÒ»ÖÂÐÔ£¬¿ÉÄÜ»á²úÉúÒ»´ÎÖØ´óµÄƹÅÒЧӦ¡£Õâ»áµ¼ÖÂÐÔÄܽµµÍ¡£
ÓйصÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄ ²Î¿¼×ÊÁÏ ²¿·ÖÖÐ ¡°¶àºËƽ̨µÄÄÚ´æÎÊÌ⡱ ÎÄÕ嵀 ¡°ÄÚ´æÕùÓá± ²¿·Ö¡£¸ÃÎÄÕ°üº¬Ò»¸ö¼òµ¥µÄ³ÌÐò£¬´Ë³ÌÐòÑÝʾÁËÄÚ´æÕùÓõIJ»Á¼Ó°Ïì¡£¸ÃʾÀýչʾ£¬¼´Ê¹¶à¸öÏß³ÌÖ®¼äÖ»¹²ÏíÒ»¸ö±äÁ¿£¬µ±¶Ô¸üÐÂʹÓÃÔ×ÓÖ¸Áîʱ£¬ÐÔÄÜËðʧҲ»áºÜ´ó¡£
±ÜÃâÄÚ´æÕùÓõļ¼ÇÉ
²»ÒªÔÚºËÖ®¼ä¹²Ïí¿ÉдÈëµÄ״̬£º
ΪÁË×î´ó³Ì¶ÈµØ¼õÉÙÄÚ´æ×ÜÏßͨÐÅ£¬¿ÉÒÔͨ¹ý×îС»¯¹²ÏíλÖÃ/Êý¾Ý¾¡¿ÉÄܵؼõÉÙºËÐĽ»»¥£¬¼´Ê¹¹²ÏíÊý¾ÝûÓÐËø±£»¤£¬¶øÓÐһЩӲ¼þ¼¶±ðÔ×ÓÖ¸ÁÈç
Microsoft? Windows? 32 λƽ̨É쵀 InterlockedExchangeAdd64£©±£»¤Ò²ÊÇÈç´Ë¡£
¼õÉÙÏß³ÌÖ®¼äµÄÄÚ´æÕùÓõÄÒ»¸ö·½·¨ÊÇ´Ó¶à¸öÏß³ÌÖÐÏû³ý¶Ô¹²ÏíÄÚ´æÇøÓòµÄ¸üС£ÀýÈ磬¼´±ãÊÇÔÚ¶à¸öÏß³ÌÐèÒª¸üÐÂÈ«¾Ö¼ÆÊýÆ÷»òÀÛ¼Æ×ÜÊý£¨Èçͳ¼ÆÊý¾Ý£©Ê±£¬¸÷¸öÏß³ÌÒ²¿ÉÒÔ±£³ÖÏ̱߳¾µØ×ÜÊý£¬²¢ÈÃÈ«¾Ö×ÜÊý½öÔÚÐèҪʱͨ¹ýÒ»¸öͨÓõÄÏ߳̽øÐиüС£Òò´Ë£¬ÔÚ¹²ÏíÄÚ´æÇøÓòÉϵÄÕùÓûá´ó´ó¼õÉÙ¡£
Ç÷ÏòÓÚ¼õÉÙËøÕùÓõÄģʽ»á¼õÉÙÄÚ´æÍ¨ÐÅ£¬ÒòΪËüÊÇÒ»¸ö¹²ÏíµÄ¿ÉдÈë״̬£¬¸Ã״̬ÐèҪʹÓÃËø²¢²úÉúÕùÓá£
±ÜÃâÓɺ˻º´æÔì³ÉµÄα¹²Ïí¡£ÓйصÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄÏÂһС½Ú¡£
±ÜÃâα¹²Ïí
Èç¹ûÁ½¸ö»ò¶à¸ö´¦ÀíÆ÷ÕýÔÚÏòͬһ»º´æÐеIJ»Í¬²¿·ÖÖÐдÈëÊý¾Ý£¬ÄÇôºÜ¶à»º´æºÍ×ÜÏßͨÐÅ¿ÉÄܻᵼÖÂÆäËû´¦ÀíÆ÷ÉϵľÉÐеÄÿ¸ö»º´æ¸±±¾Ê§Ð§»ò½øÐиüС£Õâ³ÆÎª
¡°Î±¹²Ïí¡± »òÕßÒ²³ÆÎª ¡°CPU »º´æÐиÉÈÅ¡±¡£ºÍÁ½¸ö»ò¶à¸öÏ̹߳²ÏíͬһÊý¾Ý£¨Òò´ËÐèÒª³ÌÐò»¯µÄͬ²½»úÖÆÀ´È·±£°´Ë³Ðò·ÃÎÊ£©µÄÕæÕý¹²Ïí²»Í¬£¬µ±Á½¸ö»ò¶à¸öÏ̷߳ÃÎÊλÓÚͬһ»º´æÐÐÉϵÄÎÞ¹ØÊý¾Ýʱ£¬¾Í»á²úÉúα¹²Ïí¡£
ͨ¹ýÒÔÏ´úÂëÆ¬¶Î¸üºÃµØÁ˽âα¹²Ïí£¨²Î¿¼£ºÎ±¹²Ïí£©¡£
Çåµ¥ 1. ÓÃÓÚÑÝʾα¹²ÏíµÄ´úÂëʾÀý
double sumLocal[N_THREADS];
. . . . .
. . . . .
void ThreadFunc(void *data)
{
. . . . . . .
int id = p->threadId;
sumLocal[id] = 0.0;
. . . . . .
. . . . . .
for (i=0; i<N; i++)
sumLocal[id] += p[i];
. . . . . .
} |
ÔÚÉÏÃæµÄ´úÂëʾÀýÖУ¬±äÁ¿ sumLocal µÄ´óСÓëÏ̵߳ÄÊýÁ¿Ïàͬ¡£Êý×é
sumLocal ¿ÉÄܻᵼÖÂα¹²Ïí£¬ÒòΪµ±ËüÃÇÐ޸ĵÄÔªËØÎ»ÓÚͬһ»º´æÐÐÉÏʱ£¬¶à¸öÏ̻߳áÔÚÊý×éÖÐÖ´ÐÐдÈë²Ù×÷¡£Í¼
2 ÑÝʾÁ˵±ÔÚ sumLocal ÖÐÐÞ¸ÄÁ½¸öÁ¬ÐøµÄÔªËØÊ±£¬Ïß³Ì 0 ºÍÏß³Ì 1 Ö®¼äµÄα¹²Ïí¡£Ïß³Ì
0 ºÍÏß³Ì 1 ÕýÔÚÐÞ¸ÄÊý×é sumLocal ÖÐÁ¬ÐøµÄ²»Í¬ÔªËØ¡£ÕâÐ©ÔªËØÔÚÄÚ´æÖб˴ËÁÚ½ü£¬Òò´Ë½«Î»ÓÚͬһ¸ö»º´æÐÐÉÏ¡£ÈçͼËùʾ£¬»º´æÐб»¼ÓÔØµ½
CPU0 ºÍ CPU1 µÄ»º´æÖУ¨»ÒÉ«¼ýÍ·£©¡£¼´Ê¹Ïß³ÌÕýÔÚÐÞ¸ÄÄÚ´æÖеIJ»Í¬ÇøÓò£¨ºìÉ«ºÍÀ¶É«¼ýÍ·£©£¬ÎªÁ˱£³Ö»º´æÒ»ÖÂÐÔ£¬ÔÚ¼ÓÔØ¸Ã»º´æÐеÄËùÓд¦ÀíÆ÷ÉÏ£¬¸Ã»º´æÐлáʧЧ£¬´Ó¶øÇ¿ÖƽøÐиüС£
ͼ 2. α¹²Ïí£¨²Î¿¼£º²Î¿¼×ÊÁϲ¿·ÖÖеıÜÃâºÍ±êʶÏß³ÌÖ®¼äµÄα¹²Ïí¡££©

ÃèÊöÏß³Ì 0 ºÍÏß³Ì 1 Ö®¼äα¹²ÏíµÄ·½¿òͼ¡£
α¹²Ïí»áÑÏÖØ½µµÍÓ¦ÓóÌÐòµÄÐÔÄÜ£¬²¢ÇҺܲ»ÈÝÒ×¼ì²âµ½¡£ÓйØÑÝʾα¹²Ïí²»Á¼Ó°ÏìµÄ¼òµ¥³ÌÐò£¬Çë²ÎÔÄ ²Î¿¼×ÊÁÏ
²¿·ÖÖеÄÎÄÕ ¡°¶àºËƽ̨ - CS Liu µÄÄÚ´æÎÊÌ⡱¡£
±ÜÃâα¹²ÏíµÄ¼¼ÇÉ
¿ÉÒÔʹÓÿÉÓÃÓÚ¶Ôij¸öÌØ¶¨´¦ÀíÆ÷½øÐÐÓÐÌõ¼þµØ±àÒëµÄ±àÒëÆ÷¶ÔÆëÖ¸Áͨ¹ý½«Êý¾Ý½á¹¹Ó뻺´æÐб߽ç¶ÔÆëÀ´±ÜÃâα¹²Ïí¡£ÀýÈ磬ÔÚ
Linux? ƽ̨ÉÏ£¬Í·Îļþ adm-i386/cache.h Ϊ Intel? x86 ¼Ü¹¹ÏµÁеÄ
L1 »º´æÐдóС¶¨ÒåÁ˺ê L1_CACHE_BYTES¡£ÄúÒ²¿ÉÒÔͨ¹ý±à³Ì·½Ê½È·¶¨´¦Àí»º´æÐеĴóС¡£ÓйØÔÚ»º´æÐб߽çÉÏ¶ÔÆëÊý¾Ý½á¹¹ÒÔ¼°Í¨¹ý±à³Ì·½Ê½´´½¨¿çƽ̨º¯ÊýÒÔ»ñÈ¡»º´æÐдóСµÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄ
²Î¿¼×ÊÁÏ ²¿·Ö¡£
ÁíÒ»¸ö¼¼ÇÉÉæ¼°¶Ô¾³£·ÃÎʵÄÊý¾Ý½á¹¹ÁìÓò½øÐзÖ×飬ÒÔ±ãÈÃËüÃdzÉΪµ¥¸öµÄ»º´æÐУ¬Òò´Ë¿ÉÒÔͨ¹ýµ¥¸öÄÚ´æ·ÃÎÊÀ´¼ÓÔØËüÃÇ¡£Õâ»á¼õÉÙÄÚ´æÑÓ³Ù¡£µ«ÊÇÈç¹ûÊý¾Ý½á¹¹·Ç³£¾Þ´ó£¬Ôò¿ÉÄÜ»áÔö¼Ó»º´æÕ¼Ó㬲¢ÇÒ¿ÉÄÜÐèÒªÎþÉüһЩ´ò°üЧÂÊÀ´¼õÉÙ»òÏû³ýα¹²Ïí¡£ÓйØÏêϸÐÅÏ¢£¬Çë²ÎÔÄ
²Î¿¼×ÊÁÏ ²¿·ÖÖÐµÄ ¡°»º´æ±à³ÌÑùʽµÄÔªËØ¡± ÎÄÕ¡£
ΪÁË·ÀÖ¹Êý×éÖз¢Éúα¹²Ïí£¬Ó¦¸Ã½«Êý×éÓ뻺´æµÄ´óСƥÅä¡£½á¹¹µÄ´óС±ØÐëÊÇ´¦ÀíÆ÷»º´æÐдóСµÄÕûÊý±¶¡£
Èç¹ûÐèÒª¼Ù¶¨»º´æÐдóСÒÔ±ãÇ¿ÖÆ¶ÔÆë£¬ÔòӦʹÓà 32 ×Ö½Ú¡£Çë×¢Ò⣺
32 ×Ö½Ú¶ÔÆëµÄ»º´æÐÐͬʱҲÊÇ 16 ×Ö½Ú¶ÔÆëµÄ»º´æÐС£
ÔÚ´ó¶àÊý´¦ÀíÆ÷ÉÏ£¬Êʺϼٶ¨ 32 ×Ö½Ú»º´æÐдóС¡£ÀýÈ磬IBM PowerPC? 601 ÃûÒåÉÏÓÐÒ»¸ö
64 ×Ö½Ú»º´æÐУ¬µ«Ëüʵ¼ÊÉÏÓÐÁ½¸öÒÑÁ¬½ÓµÄ 32 ×Ö½Ú»º´æÐС£Sparc64 ÓÐÒ»¸ö 32 ×Ö½Ú L1
ºÍÒ»¸ö 64 ×Ö½Ú L2 »º´æÐС£Alpha ÓÐÒ»¸ö 32 ×Ö½Ú L1 »º´æÐС£Itanium ¼Ü¹¹ÓÐÒ»¸ö
64 ×Ö½Ú L1 »º´æÐУ¬IBM System z? ÓÐÒ»¸ö 256K L1 »º´æÐÐºÍ 128 ×Ö½Ú»º´æÐУ¬¶ø
x86 ´¦ÀíÆ÷ÓÐ 64 ×Ö½Ú L1 »º´æÐС£
ÔÚÒ»¸öºËÉÏÓÐЧִÐеÄͨÓùæÔòÊǽ«Êý¾Ý½ô½ô°ü¹ü£¬ÒÔ±ã¸ÃÊý¾ÝÕ¼ÓýÏÉٵĿռ䡣µ«ÔÚ¶àºË´¦ÀíÆ÷ÉÏ£¬°ü¹ü¹²ÏíÊý¾Ý¿ÉÄܻᵼÖÂÑÏÖØµÄα¹²Ïí¡£Í¨³££¬½â¾ö·½°¸Êǽô½ô°ü¹üÊý¾Ý£¬¸øÃ¿¸öÏß³ÌÌṩËü×Ô¼ºµÄרÓø±±¾ÒÔ±ãʹÆä¼ÌÐø¹¤×÷£¬Ö®ºóÔÙ½«½á¹û½øÐкϲ¢¡£
Ïß³ÌʹÓÃÁ˳ĵæ½á¹¹»òÊý¾Ý£¬È·±£²»Í¬Ïß³ÌËùÓµÓлòÐ޸ĵÄÊý¾ÝλÓÚ²»Í¬µÄ»º´æÐÐÉÏ¡£
Ïû³ýα¹²Ïí£¿´íÎó£¡
ÔÚÀíÏëÇé¿öÏ£¬ÎÒÃǵÄÄ¿±êÊÇÏû³ý¹²Ïí£¬¶ø²»Ö»ÊÇα¹²Ïí¡£Í¨³££¬Èí¼þÉè¼ÆÓ¦¸Ã¾¡Á¦Ïû³ý¶ÔËø¡¢Í¬²½»úÖÆÒÔ¼°¹²ÏíµÄÐèÇó¡£ÓйصÄÖØÒª¹Ûµã£¬Çë²ÎÔÄ
Dmitriy Vyukov µÄÎÄÕ¡£
α¹²Ïí²»ÈÝÒ×¼ì²â£¬µ«Óм¸¸ö¹¤¾ß£¨Èç Oprofile ºÍ Valgrind µÄ Êý¾ÝÕùÓüì²â (DRD)
Ä£¿é£©¿ÉÒÔΪÄúÌṩ°ïÖú¡£
Ïû³ý»ò¼õÉÙËøÕùÓÃ
Õâ¸öÉè¼Æ×¢ÒâÊÂÏîÊÇÇ°ÃæÌáµ½µÄÁ½¸ö¿¼ÂÇÊÂÏîµÄÀ©Õ¹£¬Ä¿µÄÊDZÜÃâÄÚ´æÕùÓúÍα¹²Ïí¡£ÕýÈçÇ°Ãæ²¿·ÖËùÊö£¬Èí¼þÉè¼ÆÕßµÄÖ÷ҪĿ±êÓ¦¸ÃÊÇÏû³ý¹²Ïí£¬ÒÔ±ãÏ̻߳ò½ø³ÌÖ®¼ä²»»á·¢Éú×ÊÔ´ÕùÓá£Ç°Ã沿·ÖÖÐËùÊöµÄһЩ¼¼ÇÉ£¨ÈçʹÓÃÏ̱߳¾µØ±äÁ¿´úÌæÈ«¾Ö¹²ÏíÇøÓò£©¿ÉÒÔ·ÀÖ¹·¢ÉúÄÚ´æÕùÓúÍα¹²Ïí¡£µ«ÊÇ£¬¸Ã¼¼Çɲ¢²»ÊÊÓÃÓÚËùÓÐÇé¿ö¡£
ÀýÈ磬Èç¹ûÓÐÒ»¸ö±£³Ö×ÊԴ״̬µÄÊý¾Ý½á¹¹£¬ÔòÓпÉÄÜÎÞ·¨ÔÚÿ¸öÏß³ÌÖаüº¬¸Ã½á¹¹µÄ¸±±¾¡£¸ÃÊý¾Ý½á¹¹¿ÉÄܱØÐëÓÉÓ¦ÓóÌÐòÖеÄËùÓÐÏ̶߳ÁÈ¡ºÍÐ޸ġ£Òò´Ë£¬±ØÐëʹÓÃͬ²½¼¼ÊõÀ´±£³ÖÊý¾ÝµÄÒ»ÖÂÐÔÒÔ¼°´ËÀ๲ÏíÊý¾Ý½á¹¹µÄÍêÕûÐÔ¡£Èç¹û´æÔÚÓÃÓÚ±£»¤¹²Ïí×ÊÔ´µÄËø»òͬ²½¹¹Ô죬Ôò¿ÉÄÜ»áÔÚ¶à¸öÏ̻߳ò½ø³ÌÖ®¼ä³öÏÖËøÕùÓ㬴Ӷø½µµÍÐÔÄÜ¡£
ÔÚ¶àºË¡¢¶à´¦ÀíÆ÷ϵͳÉÏ£¬¿ÉÄÜÓпռäÀ´Í¬Ê±ÔËÐдóÁ¿Ï̻߳ò½ø³Ì£¬µ«ÊÇ£¬Èç¹ûÕâЩÏ̱߳ØÐë²»¶ÏµØ±Ë´Ë¾ºÕù£¬ÒÔ·ÃÎÊ»òÐ޸Ĺ²Ïí×ÊÔ´»òÊý¾Ý½á¹¹£¬ÄÇôϵͳµÄ×ÜÌåÍÌÍÂÁ¿»áÓÐËù½µµÍ¡£Õâ»áµ¼ÖÂÓ¦ÓóÌÐòÎÞ·¨Í¨¹ýÉìËõÀ´ÓÐЧµØÀûÓÿÉÓõļÆËã×ÊÔ´¡£ÔÚÓÉÓÚËøÕùÓöøµ¼ÖÂÐÔÄܽµµÍµÄ¼«»µÇé¿öÏ£¬Ëæ×źËÐÄ»ò´¦ÀíÆ÷ÊýÁ¿µÄÔö¼Ó£¬Ó¦ÓóÌÐòµÄÐÔÄÜ»áÓÐËù½µµÍ¡£
±ÜÃâËøÕùÓõļ¼ÇÉ
±ÜÃâÔÚÊý¾Ý½á¹¹Öз¢ÉúËøÕùÓõķ½·¨Ö®Ò»ÊDzÉÓò¢·¢Êý¾Ý½á¹¹Éè¼ÆºÍÎÞËøËã·¨£¬Õâ»áÏû³ýËøÒÔ¼°´«Í³µÄͬ²½¼¼ÇÉ£¨±ÈÈ绥³â£©¡£ÓжàÖÖ²¢·¢Êý¾Ý½á¹¹µÄÉè¼Æ²¢²»ÐèÒªÀûÓÃͬ²½»úÖÆ£¬±ÈÈ绥³â¡£ÓйشËÀಢ·¢Êý¾Ý½á¹¹Éè¼ÆµÄһЩʾÀý£¬Çë²ÎÔÄ
²Î¿¼×ÊÁÏ ²¿·Ö¡£
ÎÞËøËã·¨µÄһЩʾÀýÈçÏ£º
ʹÓà Ïà¶ÔÂÛ±à³Ì µÄ¿ÉÉìËõ²¢·¢¹þÏ£±í£º¸Ã¼¼ÇɵÄ×î¼òµ¥Ê¾ÀýÊÇ Read Copy Update (RCU)£¬ËüרÓÃÓÚ
Linux Äںˣ¬´ó´óÌá¸ßÁË Linux Äں˵ÄÐÔÄÜ£¬²¢¼ò»¯ÁË Linux Äں˵ĴúÂë¡£
ÎÞËø¿ÉÀ©Õ¹ÓÐÐò·Ö¸îµÄ¹þÏ£ÁÐ±í£ºÕâ¸öÎÞËøµÝ¹é¿ÉÀ©Õ¹¹þÏ£Ë㷨ʹÓÃÁËÎÞËøµÄÁ´½ÓÁÐ±í£¬ÕâЩÁбíʹÓÃÔ×ÓÖ¸ÁîÀ´ÐÞ¸ÄÁ´½ÓµÄÁÐ±í¡£
ÔÚ Linux ÄÚºËÖУ¬¹ã·ºÊ¹ÓÃÁËÿ´¦ÀíÆ÷±äÁ¿£¬ÏµÍ³ÉϵÄÿ¸ö´¦ÀíÆ÷¶¼»ñµÃÁË×Ô¼ºµÄÒ»¸ö¸ø¶¨±äÁ¿µÄ¸±±¾¡£·ÃÎÊÿ´¦ÀíÆ÷±äÁ¿²»ÐèҪʹÓÃËø£¬´ËÍ⣬ÒòΪÔÚ²»Í¬µÄ´¦ÀíÆ÷ÉÏ£¬ÕâЩ±äÁ¿Î´ÔÚÏß³ÌÖ®¼ä¹²Ïí£¬Òò´ËûÓÐα¹²Ïí»òÄÚ´æÕùÓá£ÕâÖÖ¼¼Çɷdz£ÊʺÏÊÕ¼¯Í³¼ÆÐÅÏ¢¡£
¼õÉÙËøÕùÓõļ¼ÇÉ
µ±Ê¹Óô«Í³Ëø»òͬ²½¼¼ÇÉ£¨Èç×ÔÐýËø£©Ê±£¬±ØÐë×¢ÒâµÄÊÇ£¬²»ÒªÊ¹Óõ¥Æ¬Ëø»òÈ«¾ÖËø£¬¶øÊǽ«ÕâÐ©Ëø·Ö³É¸üϸСµÄ²¿·Ö¡£Òò´Ë£¬Ëø»á±£»¤Êý¾Ý½á¹¹ÖеÄij¸öÌØ¶¨ÇøÓòÒÔ¼°½ÏСµÄÇøÓò¡£ÕâÑù¶à¸öÏ߳̾ÍÄܹ»Í¨¹ý»ñÈ¡±£»¤ÕâЩ³ÉÔ±µÄÏàÓ¦Ëø£¬ÔÚͬһÊý¾Ý½á¹¹µÄ²»Í¬³ÉÔ±Éϲ¢·¢½øÐвÙ×÷¡£ÕâÖÖ·½·¨¿ÉÒÔʵÏÖ¸ü¶à²¢·¢¡£
ÉõÖÁµ±Èí¼þÉè¼ÆÖеÄͬ²½»úÖÆÄܹ»ÊµÏÖ¸üºÃµÄ²¢·¢ºÍ¼õÉÙËøÕùÓÃʱ£¬Ò²¿ÉÄÜ»áÓÉÓÚα¹²Ïí¶øµ¼Ö·¢ÉúÐÔÄÜÎÊÌâ¡£ÀýÈ磬¿¼ÂÇÒ»¸ö¹þÏ£Êý¾Ý½á¹¹¡£Èç¹û´æÔÚÒ»¸ö×ÔÐýËøÊý×飬ÓÃÓÚ±£»¤¹þÏ£ÖеÄÿ¸ö¹þϣͰ£¬ÄÇôÔÚ×ÔÐýËøÊý×éÖпÉÄÜ»á³öÏÖα¹²Ïí¡£Á½¸öÏß³ÌÔÚÁ½¸ö²»Í¬µÄ´¦ÀíÆ÷ÉÏÔËÐУ¬Ã¿¸öÏ̶߳¼Ëø¶¨¹þÏ£ÖеIJ»Í¬¹þϣͰ£¬ÄÇôµ±ËüÃÇËùÐèµÄ×ÔÐýËøÎ»ÓÚͬһ¸ö»º´æÐÐÉÏʱ£¬¿ÉÄܻᷢÉúα¹²Ïí¡£Òò´Ë£¬ÔÚÉè¼Æ´ËÀàË㷨ʱÐèÒª¿¼ÂDzÉÓñÜÃâ·¢Éúα¹²ÏíµÄͨÓü¼ÇÉ¡£
¼ì²âËøÕùÓÃÒÔ¼°Ïû³ý»ò¼õÉÙËøÕùÓöÔÓÚÔÚ¶àºË¡¢¶à´¦ÀíÆ÷»·¾³ÖÐÌṩӦÓóÌÐòµÄ¿ÉÉìËõÐԷdz£ÖØÒª¡£²Ù×÷ϵͳÌṩÁËÓÃÓÚ¼ì²âºÍ¶ÈÁ¿ÓÉÓÚËøÕùÓöøµ¼ÖÂÐÔÄÜÆ¿¾±µÄʵÓù¤¾ß¡£ÀýÈ磬Solaris
ÌṩÁË Lockstat ʵÓù¤¾ß£¬ÓÃÓÚ¶ÈÁ¿ÄÚºËÄ£¿éÖеÄËøÕùÓá£Í¬Ñù£¬Linux ÄÚºËÒ²ÌṩÁË Lockstat
ºÍ Lockdep ¿ò¼Ü£¬ÓÃÓÚ¼ì²âºÍ¶ÈÁ¿ËøÕùÓÃÒÔ¼°ÐÔÄÜÆ¿¾±¡£"Windows ÐÔÄܹ¤¾ß°ü
- Xperf" ÔÚ Windows ÉÏÌṩÁËÀàËÆµÄ¹¦ÄÜ¡£ÓйصÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄ ²Î¿¼×ÊÁÏ
²¿·Ö¡£
±ÜÃâ¶ÑÕùÓÃ
C/C++ ±ê×¼ÄÚ´æ¹ÜÀíÀý³ÌÊÇʹÓÃÌØ¶¨ÓÚÆ½Ì¨µÄÄÚ´æ¹ÜÀí API ʵÏֵģ¬Ëüͨ³£»ùÓڶѵĸÅÄî¡£ÕâЩ¿âÀý³Ì£¨ÎÞÂÛÊǵ¥Ḭ̈߳汾»¹ÊǶàḬ̈߳汾£©ÔÚµ¥¸ö¶ÑÉÏ·ÖÅä»òÊÍ·ÅÄÚ´æ¡£ËüÊÇÈ«¾Ö×ÊÔ´£¬ÔÚij¸ö½ø³ÌÖеÄÏß³ÌÖ®¼ä¹²Ïí²¢ÕùÓ᣶ÑÕùÓÃÊÇÄÚ´æÃܼ¯ÐͶàÏß³ÌÓ¦ÓóÌÐòµÄÆ¿¾±Ö®Ò»¡£
±ÜÃâ¶ÑÕùÓõļ¼ÇÉ
ʹÓÃÏ̱߳¾µØ/רÓöѽøÐÐÄÚ´æ¹ÜÀí£¬´Ó¶øÏû³ýÁË×ÊÔ´ÕùÓá£ÔÚ Windows ƽ̨ÉÏ£¬¿ÉÒÔʹÓà HeapCreate()
Ϊÿ¸öÏ̴߳´½¨Ò»¸öרÓöѣ¬²¢½«·µ»ØµÄ¶Ñ¾ä±ú´«µÝ¸ø HeapAlloc()/HeapFree() º¯Êý¡£
²Î¿¼×ÊÁÏ ²¿·ÖÖÐµÄ ¡°¶àºËƽ̨µÄÄÚ´æÎÊÌâ - CS Liu¡± ÎÄÕÂÌṩÁËÒ»¸ö¶ÑÕùÓÃʾÀý¡£ÔÚÕâ¸ö²Î¿¼×ÊÁÏÖУ¬×÷ÕßÑÝʾÁËÈçºÎʹÓÃרÓöѽ«ÐÔÄÜÌá¸ß
3 ±¶×óÓÒ£¨ÓëʹÓÃÈ«¾Ö¶ÑÏà±È£©¡£
×¢Ò⣺
ÔÚ Windows ƽ̨ÉÏ£¬µ±´´½¨¶Ñʱ£¬¿ÉÒÔÉèÖà heap_no_serialization ±êÖ¾£¬ÕâÒâζ×Å´Ó¶à¸öÏ̷߳ÃÎÊËüʱ²»ÐèÒª½øÐÐͬ²½¡£µ«ÊÂʵ֤Ã÷£¬ÔÚ
vista ¼°¸ü¸ß°æ±¾µÄ²Ù×÷ϵͳÉÏ£¬½«¸Ã±êÖ¾ÉèÖÃΪÏß³Ì˽ÓжÑËÙ¶È»áºÜÂý¡£
Heap_no_serialization ºÍһЩµ÷ÊÔ·½°¸½«½ûÓà ¡°Low Fragment Heap¡±
¹¦ÄÜ£¬ÏÖÔÚÕâÊǶѵÄÊÂʵĬÈϲßÂÔ£¬Òò´Ë½øÐÐÁ˸߶ÈÓÅ»¯¡£
Ìá¸ß´¦ÀíÆ÷¹ØÁª
´¦ÀíÆ÷¹ØÁªÊÇÒ»¸öÏ̻߳ò½ø³ÌÊôÐÔ£¬¸ÃÊôÐÔ¸æËß²Ù×÷ϵͳ¿ÉÒÔÔÚÄÄЩºË»òÂß¼´¦ÀíÆ÷ÉÏÔËÐнø³Ì¡£Õâ¸üÊʺÏǶÈëʽÈí¼þÉè¼Æ¡£
ͼ 3 ÏÔʾÁËÒ»¸öϵͳÅäÖ㬸ÃÅäÖðüº¬Á½¸ö´¦ÀíÆ÷£¬Ã¿¸ö´¦ÀíÆ÷ÓÐÁ½¸öºË£¬ÕâÁ½¸öºË¶¼ÓÐÒ»¸ö¹²ÏíµÄ L2
»º´æ¡£ÔÚ¸ÃÅäÖÃÖУ¬ÔÚͬһ´¦ÀíÆ÷ÉϵÄÁ½¸öºËÖ®¼äÒÔ¼°²»Í¬´¦ÀíÆ÷ÉϵÄÁ½¸öºËÖ®¼ä£¬»º´æ×ÓϵͳµÄÐÐΪ½«»áÓÐËù²»Í¬¡£Èç¹ûÁ½¸öÏà¹ØµÄ½ø³Ì»òij¸ö½ø³ÌµÄÁ½¸öÏà¹ØÏ̱߳»·ÖÅä¸øÍ¬Ò»´¦ÀíÆ÷ÉϵÄÁ½¸öºË£¬ÄÇôËüÃÇ¿ÉÒÔ¸üºÃµØÀûÓù²ÏíµÄ
L2 »º´æ£¬¶øÇÒ¿ÉÒÔ¼õÉÙ±£³Ö»º´æÒ»ÖÂÐԵĿªÏú¡£
ͼ 3. ¶à¸öºË¹²ÏíÒ»¸ö L2 »º´æµÄϵͳ

ÃèÊö¶àºË¶à´¦ÀíÆ÷ϵͳ£¨Ä³¸ö´¦ÀíÆ÷Éϵĺ˹²ÏíÒ»¸ö L2 »º´æ£©µÄ·½¿òͼ¡£
Éè¼Æ×¢ÒâÊÂÏî
ǶÈëʽϵͳµÄÈí¼þÉè¼ÆÕß¿ÉÒÔÀûÓÃÕâ¸ö±£³Ö»º´æÒ»ÖÂÐÔÏà¶Ô½ÏµÍµÄ¿ªÏú£¬Í¨¹ý±à³Ì¿ØÖÆÏòºË·ÖÅäÏ̡߳£
ÔÚ Linux ºÍ Windows ²Ù×÷ϵͳÉϵÄÒÔÏÂϵͳµ÷ÓÿÉÒÔ¸æËßÓ¦ÓóÌÐò£¬¶ÔÓÚÌØ¶¨µÄ½ø³ÌÀ´Ëµ£¬´¦ÀíÆ÷ÊÇÈçºÎ¹ØÁªµÄ£¬²¢Îª½ø³ÌÉèÖô¦ÀíÆ÷¹ØÁªÑÚÂ룺
Çåµ¥ 2. ÓÃÓÚ¹ÜÀí´¦ÀíÆ÷¹ØÁªµÄϵͳµ÷ÓÃ
Linux Example:
/* Get a process' CPU affinity mask */
extern int
sched_getaffinity(pid_t pid, size_t cpusetsize,
cpu_set_t *cpuset);
/* Set a process's affinity mask */
extern int
sched_setaffinity(pid_t pid, size_t cpusetsize,
const cpu_set_t *cpuset);
Windows Example:
/* Set processor affinity */
BOOL WINAPI
SetProcessAffinityMask (Handle hProcess, DWORD_PTR
dwProcessAffinityMask);
/* Set Thread affinity */
DWORD_PTR WINAPI
SetThreadAffinityMask (Handle hThread, DWORD_PTR
dwThreadAffinityMask);
|
±à³ÌÄ£ÐÍ
µ±ÎªÓ¦ÓóÌÐòÖеÄÏ̷߳ÖÅ乤×÷ʱ£¬Èí¼þÉè¼ÆÕß¿ÉÒÔ¿¼ÂÇÁ½¸ö²»Í¬µÄ±à³ÌÄ£ÐÍ¡£ËüÃÇÊÇ£º
¹¦ÄÜ·Ö½â
¸ÃÄ£Ð͵ÄÄ¿±êÊÇÁ˽âÓ¦ÓóÌÐò»òÈí¼þ±ØÐëÖ´ÐеIJÙ×÷£¬²¢½«Ã¿¸ö²Ù×÷·ÖÅ䏸²»Í¬µÄÏ̡߳£
¿ÉÒÔ½«¶à¸ö²Ù×÷×éºÏÔÚÒ»¸öÏß³ÌÖУ¬µ«¹¦ÄÜ·Ö½âµÄ½á¹ûÊÇÿ¸ö²Ù×÷¶¼ÓÉÌØ¶¨µÄÏß³ÌÀ´Ö´ÐС£
Óò·Ö½â»ò³ÆÎªÊý¾Ý·Ö½â
¸ÃÄ£Ð͵ÄÄ¿±êÊÇ·ÖÎöÈí¼þ»òÓ¦ÓóÌÐòËùÐèµÄÊý¾Ý¼¯£¬ÒÔ±ã¶ÔËüÃǽøÐйÜÀí»ò´¦Àí£¬²¢½«ÕâЩÊý¾Ý¼¯·Ö½â³É¿ÉÒÔµ¥¶À´¦ÀíµÄ½ÏС×é¼þ¡£
Èí¼þÖеÄÏ̻߳áÖØ¸´ÒªÖ´ÐеIJÙ×÷£¬µ«Ã¿¸öÏ߳̽«ÔÚµ¥¶ÀµÄÊý¾Ý×é¼þÉÏÖ´ÐвÙ×÷¡£
Èí¼þËùÐèµÄ²Ù×÷ÀàÐÍÒÔ¼°Êý¾ÝÌØÐÔ¶¼»áÓ°ÏìÄ£Ð͵ÄÑ¡Ôñ£¬µ«ÊDZØÐëÁ˽âÕâЩģÐÍÈçºÎÔÚ¶à´¦ÀíÆ÷»ò¶àºË»·¾³ÖÐÖ´ÐС£
Èí¼þÉè¼ÆÕßÐèÒª¿¼Âǵö×¢ÒâÊÂÏî
¾¡¹ÜÊý¾Ý·Ö½âÖеĻº´æ½»»¥¿´ËƷdz£¼òµ¥£¨Òâζ×ÅÊý¾Ý·Ö½âÓÅÓÚ¹¦Äֽܷ⣩£¬µ«Ö§³ÖÓò·Ö½âËùÐèµÄÈí¼þÉè¼Æ¿ÉÄÜÃæÁٷdz£´óµÄÌôÕ½¡£
·Ö½âÄ£ÐÍÖеÄÊý¾ÝÈÔÈ»ÐèҪλÓÚ²»Í¬µÄ»º´æÐÐÉÏ£¬ÒÔ±ÜÃâ³öÏÖα¹²ÏíµÄ¿ÉÄÜ¡£
ÔÚ ²Î¿¼×ÊÁϲ¿·ÖÖеĶàºË¶à´¦ÀíÆ÷ϵͳµÄÈí¼þÉè¼ÆÎÊÌâ²Î¿¼ÎÄÏ×ÖУ¬Ïêϸ½éÉÜÁ˱à³ÌÄ£ÐÍ¡¢Îª¶àºË¶à´¦ÀíÆ÷¼Ü¹¹½øÐÐÈí¼þÉè¼ÆÊ±Ó¦ÓÃÕâЩģÐ͵ÄÌôÕ½ºÍÓÅÊÆ¡£
½áÊøÓï
±¾ÎļòÒª½éÉÜÁ˶àºË¶àÏ̻߳·¾³µÄÌØÐÔ£¬»¹½éÉÜÁËÔÚ¶àºË¶à´¦ÀíÆ÷ϵͳÉÏ¿ÉÄܵ¼Ö½µµÍÓ¦ÓóÌÐòÐÔÄÜ»ò·Á°Ó¦ÓóÌÐò¿ÉÉìËõÐÔµÄÒ»Ð©ÖØÒªÎÊÌ⣬ÌÖÂÛÁËÔÚÕâÑùµÄ»·¾³ÖÐÉè¼ÆÈí¼þʱµÄÒ»Ð©ÖØÒª¿¼ÂÇÊÂÏîºÍ¼¼ÇÉ¡£¿¼ÂÇÁËÕâЩ¿¼ÂÇÊÂÏî¶øÉè¼ÆµÄÈí¼þ»òÓ¦ÓóÌÐò¿ÉÒÔÓÐЧµØÀûÓÿÉÓõļÆËã×ÊÔ´£¬»¹¿ÉÒÔ±ÜÃâÐÔÄܺͿÉÉìËõÐÔÎÊÌâ |