¶øÔÚÕâÒ»ÁìÓòÖУ¬Linux ÐÔÄÜ¼à¿Øµ¥Ôª£¨Performance Monitoring Unit£¬¼ò³Æ PMU£©Æ¾½èÆäÇ¿´óµÄ¹¦ÄܺÍÁé»îÐÔ£¬³ÉΪÁËϵͳÐÔÄܵ÷ÓÅÓë¹ÊÕÏÅŲéµÄµÃÁ¦ÖúÊÖ
±¾ÎĽ«ÉîÈë̽ÌÖ Linux PMU µÄ¼¼ÊõÔÀí¡¢Ó¦ÓÃÓÅÊÆÒÔ¼°ÆäÔÚÏÖ´ú¼ÆËã»·¾³ÖеÄÖØÒª×÷Óã¬Ö¼ÔÚΪ¶ÁÕß½ÒʾÕâÒ»¼¼ÊõµÄ·Ç·²Ç±Á¦
Ò»¡¢Linux PMU ¼¼Êõ¸ÅÀÀ ÐÔÄÜ¼à¿Øµ¥Ôª£¨PMU£©ÊÇÏÖ´ú´¦ÀíÆ÷ÄÚÖõÄÒ»ÖÖÓ²¼þ×é¼þ£¬×¨ÃÅÓÃÓÚÊÕ¼¯ºÍ¼Ç¼´¦ÀíÆ÷µÄ¸÷ÖÖÐÔÄÜÖ¸±ê£¬È绺´æÎ´ÃüÖС¢·ÖÖ§Ô¤²â´íÎó¡¢Ö¸ÁîÍÌÍÂÁ¿µÈ
ÕâЩָ±ê¶ÔÓÚÀí½âϵͳÐÐΪ¡¢Ê¶±ðÐÔÄÜÆ¿¾±ÒÔ¼°ÓÅ»¯Èí¼þÐÔÄÜÖÁ¹ØÖØÒª
Linux ²Ù×÷ϵͳͨ¹ý¼¯³É¶Ô PMU µÄÖ§³Ö£¬ÎªÓû§ºÍ¿ª·¢ÕßÌṩÁËÒ»Ì×Ç¿´óµÄ¹¤¾ß¼¯£¬Ê¹ËûÃÇÄܹ»ÉîÈë¶´²ìϵͳÄÚ²¿µÄ¹¤×÷»úÖÆ
Linux PMU µÄÖ§³ÖµÃÒæÓÚһϵÁÐÄÚºËÄ£¿éºÍÓû§¿Õ¼ä¹¤¾ßµÄÐͬ¹¤×÷
ÔÚÄں˲ãÃæ£¬`perf` ×ÓϵͳÊÇ×îΪºËÐĵIJ¿·Ö£¬Ëü¸ºÔð³õʼ»¯ PMU¡¢ÅäÖÃ¼à¿ØÊ¼þ¡¢ÊÕ¼¯Êý¾ÝÒÔ¼°Ìṩ½Ó¿Ú¹©Óû§¿Õ¼ä³ÌÐò·ÃÎÊ
¶øÓû§¿Õ¼äÔòͨ¹ý `perf` ÃüÁî¡¢`perf_event` API ÒÔ¼°ÖîÈç`OProfile`¡¢`Intel VTune Profiler` µÈ¸ß¼¶·ÖÎö¹¤¾ß£¬ÊµÏÖ¶Ô PMU Êý¾ÝµÄ²É¼¯ºÍ·ÖÎö
¶þ¡¢Linux PMU µÄ¼¼ÊõÌØÐÔ 1.¸ß¾«¶ÈÓëµÍ¿ªÏú£ºPMU Ö±½ÓǶÈë´¦ÀíÆ÷ÄÚ²¿£¬Äܹ»ÒÔ¼«µÍµÄÑӳٺͿªÏú²¶»ñÐÔÄÜʼþ
ÕâÒâζ׿´Ê¹Ôڸ߸ºÔØÇé¿öÏ£¬PMU Ò²ÄÜÌṩ׼ȷµÄÊý¾Ý£¬¶ø²»»áÏÔÖøÓ°ÏìϵͳµÄÕý³£ÔËÐÐ
2.·á¸»µÄ¼à¿ØÊ¼þ£º²»Í¬¼Ü¹¹µÄ´¦ÀíÆ÷Ö§³Ö²»Í¬ÀàÐ굀 PMU ʼþ£¬´Ó»ù±¾µÄ CPU ÖÜÆÚ¼ÆÊýµ½¸´ÔÓµÄÄÚ´æ·ÃÎÊģʽ¡¢»º´æÐÐΪ·ÖÎö£¬¼¸ºõº¸ÇÁËËùÓпÉÄÜÓ°ÏìÐÔÄܵķ½Ãæ
Linux ͨ¹ý³éÏó²ãͳһÁËÕâЩʼþ£¬Ê¹µÃ¿çƽ̨ÐÔÄÜ·ÖÎö³ÉΪ¿ÉÄÜ
3.Áé»îµÄÅäÖÃÓë²ÉÑù£ºÓû§¿ÉÒÔ¸ù¾ÝÐèÇóÁé»îÅäÖà PMU¼à¿ØµÄʼþÀàÐÍ¡¢²ÉÑùƵÂÊÒÔ¼°Êý¾ÝÊÕ¼¯·½Ê½
ÕâÖÖÁé»îÐÔʹµÃÐÔÄÜ·ÖÎöÄܹ»Õë¶ÔÌØ¶¨ÎÊÌâ½øÐо«Ï¸µ÷ÓÅ£¬±ÜÃâ²»±ØÒªµÄÊý¾ÝÊÕ¼¯¿ªÏú
4.Ç¿´óµÄ·ÖÎö¹¤¾ß£ºLinux Éú̬ϵͳÖÐµÄ perf ¹¤¾ßÁ´ÌṩÁ˷ḻµÄÊý¾Ý·ÖÎö¹¦ÄÜ£¬°üÀ¨Ê¼þ¼ÆÊý¡¢Ê±¼äÏß·ÖÎö¡¢º¯Êýµ÷ÓÃͼ¡¢»ðÑæÍ¼µÈ£¬°ïÖú¿ª·¢ÕßÖ±¹ÛÀí½âϵͳÐÔÄÜÆ¿¾±
Èý¡¢Linux PMU µÄÓ¦ÓÃʵ¼ù 1.ÐÔÄÜÆ¿¾±Ê¶±ðÓëÓÅ»¯£ºÍ¨¹ý¼à¿ØÌض¨ÐÔÄÜÖ¸±ê£¬È绺´æÎ´ÃüÖÐÂÊ¡¢ÉÏÏÂÎÄÇл»ÆµÂʵȣ¬¿ª·¢Õß¿ÉÒÔ¿ìËÙ¶¨Î»ÐÔÄÜÆ¿¾±
ÀýÈ磬Èç¹û·¢ÏÖij¶Î´úÂëÆµ·±´¥·¢»º´æÎ´ÃüÖУ¬¿ÉÒÔ¿¼ÂÇÓÅ»¯Êý¾Ý½á¹¹²¼¾Ö»òÔö¼Ó»º´æ´óСÀ´¸ÄÉÆÐÔÄÜ
2.¹¦ºÄ¹ÜÀí£ºÔÚÒÆ¶¯É豸ºÍ·þÎñÆ÷ÁìÓò£¬¹¦ºÄЧÂÊÊǹؼü¿¼Á¿ÒòËØ
ÀûÓà PMU ¼à¿Ø CPU ƵÂÊ¡¢µçÔ´ÃÅ¿Ø×´Ì¬µÈÐÅÏ¢£¬¿ÉÒÔÓÅ»¯µçÔ´¹ÜÀí²ßÂÔ£¬¼õÉÙ²»±ØÒªµÄÄܺģ¬ÑÓ³¤µç³ØÊÙÃü»òÌá¸ßÄÜЧ±È
3.°²È«Éó¼ÆÓë¹ÊÕÏÅŲ飺PMU »¹¿ÉÒÔÓÃÓÚ¼à¿ØÒì³£ÐÐΪ£¬Èç²àÐŵÀ¹¥»÷µÄ¼£Ïó£¨Èç¼ÆÊ±¹¥»÷£©£¬»òÊÇÓ²¼þ¹ÊÕϵÄÔçÆÚÔ¤¾¯
ͨ¹ý·ÖÎö PMU Êý¾Ý£¬°²È«ÍŶÓÄܹ»¼°Ê±·¢ÏÖDZÔÚÍþв£¬²¢²ÉÈ¡ÏàÓ¦´ëÊ©
4.Èí¼þÐÔÄÜ»ù×¼²âÊÔ£ºÔÚÈí¼þ¿ª·¢¹ý³ÌÖУ¬Ê¹Óà PMU ½øÐлù×¼²âÊÔ¿ÉÒÔÈ·±£´úÂëÓÅ»¯Ç°ºóµÄÐÔÄܱ仯µÃµ½×¼È·²âÁ¿
Õâ¶ÔÓÚÑéÖ¤Ëã·¨¸Ä½ø¡¢¿â¸üлòÓ²¼þÉý¼¶µÄЧ¹ûÖÁ¹ØÖØÒª
ËÄ¡¢Linux PMU µÄδÀ´Õ¹Íû Ëæ×Å´¦ÀíÆ÷¼Ü¹¹µÄ²»¶ÏÑݽø£¬Linux PMU Ò²ÃæÁÙ×ÅеÄÌôÕ½Óë»úÓö
Ò»·½Ã棬мܹ¹Èç ARMv8-A µÄ PMU ÌṩÁ˸ü¸´ÔÓµÄ¼à¿ØÄÜÁ¦ºÍ¸ü¸ßµÄ¾«¶È£¬ÒªÇó Linux Äں˺͹¤¾ßÁ´²»¶Ï¸üÐÂÒÔÊÊÓ¦ÕâЩ±ä»¯
ÁíÒ»·½Ãæ£¬Ëæ×ÅÈ˹¤ÖÇÄÜ¡¢´óÊý¾ÝµÈÓ¦ÓõÄÐËÆð£¬¶ÔϵͳÐÔÄÜµÄ¼à¿ØÐèÇóÈÕÒæ¸´ÔÓ£¬Linux PMU ÐèÒª½øÒ»²½À©Õ¹Æä¼à¿Ø·¶Î§£¬±ÈÈçÔö¼Ó¶Ô GPU¡¢´æ´¢×ÓϵͳµÈÐÔÄÜµÄ¼à¿ØÖ§³Ö
´ËÍâ£¬Ëæ×ÅÈÝÆ÷»¯ºÍ΢·þÎñ¼Ü¹¹µÄÆÕ¼°£¬ÈçºÎÔÚÕâЩÐÂÐͲ¿Êð»·¾³ÖÐÓÐЧÀûÓà PMU ½øÐÐÐÔÄÜ¼à¿Ø£¬Ò²ÊÇδÀ´ÐèҪ̽Ë÷µÄ·½Ïò
ÀýÈ磬ͨ¹ý¼¯³Éµ½ Kubernetes µÈÈÝÆ÷±àÅÅÆ½Ì¨ÖУ¬ÊµÏÖ¿çÈÝÆ÷µÄÐÔÄÜ¼à¿ØÓëµ÷ÓÅ£¬½«¼«´óµØÌáÉýÔÆÔÉúÓ¦ÓõÄÔËάЧÂÊ
Îå¡¢½áÓï Linux PMU ×÷ΪÏÖ´ú²Ù×÷ϵͳÐÔÄÜ¼à¿ØµÄ»ùʯ£¬ÆäÖØÒªÐÔ²»ÑÔ¶øÓ÷
Ëü²»½öΪ¿ª·¢ÕßÌṩÁËÉîÈë¶´²ìϵͳÐÔÄܵĴ°¿Ú£¬¸üÊÇÍÆ¶¯ÏµÍ³ÓÅ»¯¡¢ÌáÉýÄÜЧÓ밲ȫÐԵĹؼü¹¤¾ß
Ëæ×ż¼ÊõµÄ²»¶Ï½ø²½ºÍÓ¦Óó¡¾°µÄÍØÕ¹£¬Linux PMU ½«ÔÚδÀ´¼ÌÐø·¢»Ó²»¿ÉÌæ´úµÄ×÷Óã¬ÒýÁìÐÔÄÜ¼à¿ØÓë·ÖÎöÁìÓòµÄÐÂÒ»ÂÖ¸ïÐÂ
¶ÔÓÚÈκιØ×¢ÏµÍ³ÐÔÄÜ¡¢ÖÂÁ¦ÓÚÈí¼þÓÅ»¯Ó밲ȫ·À»¤µÄרҵÈËÊ¿¶øÑÔ£¬ÕÆÎÕ Linux PMU µÄʹÓÃÓëÔÀí£¬ÎÞÒÉÊÇͨÍù׿ԽÐÔÄÜÓë¸ßЧÔËάµÄ±Ø¾Ö®Â·