LinuxµÄ¸ßЧµÄÊý¾Ý´«Êä¼¼Êõ-Relay

¡¶LinuxµÄ¸ßЧµÄÊý¾Ý´«Êä¼¼Êõ-Relay¡·ÕªÒª£º Relay ÊÇÒ»ÖÖ´Ó Linux Äں˵½Óû§¿Õ¼äµÄ¸ßЧÊý¾Ý´«Êä¼¼Êõ¡£Í¨¹ýÓû§¶¨ÒåµÄ relay ͨµÀ£¬Äں˿ռäµÄ³ÌÐòÄܹ»¸ßЧ¡¢¿É¿¿¡¢±ã½ÝµØ½«Êý¾Ý´«Êäµ½Óû§¿Õ¼ä¡£Relay ·Ç·²ÊÊÓÃÓÚÄں˿ռäÓдóÁ¿Êý¾ÝÐèÒª´¡­
¡¡¡¡ Relay ÊÇÒ»ÖÖ´Ó Linux Äں˵½Óû§¿Õ¼äµÄ¸ßЧÊý¾Ý´«Êä¼¼Êõ¡£Í¨¹ýÓû§¶¨ÒåµÄ relay ͨµÀ£¬Äں˿ռäµÄ³ÌÐòÄܹ»¸ßЧ¡¢¿É¿¿¡¢±ã½ÝµØ½«Êý¾Ý´«Êäµ½Óû§¿Õ¼ä¡£Relay ·Ç·²ÊÊÓÃÓÚÄں˿ռäÓдóÁ¿Êý¾ÝÐèÒª´«Êäµ½Óû§¿Õ¼äµÄÇéÐΣ¬Ä¿Ç°ÒѾ­¹ã·ºÓ¦ÓÃÔÚÄں˵÷ÊÔ¹¤¾ßÈç SystemTapÖС£±¾ÎĽéÉÜÁË Relay µÄÀúÊ·ºÍÔ­Àí£¬²¢ÇÒÓÃÒ»¸ö¼òµ¥µÄʵÀý½éÉÜÁË Relay µÄ¾ßÌåÓ÷¨¡£

¡¡¡¡Relay Òª½â¾öµÄÎÊÌâ

¡¡¡¡¶ÔÓÚÈκÎÔÚÄں˹¤×÷µÄ³ÌÐò¶øÑÔ£¬ÈçºÎ°Ñ´óÁ¿µÄµ÷ÊÔÐÅÏ¢´ÓÄں˿ռ䴫Êäµ½Óû§¿Õ¼ä¶¼ÊÇÒ»¸ö´óÂé·³£¬¶ÔÓÚÔËÐÐÖеÄÄں˸üÊÇÈç´Ë¡£·Ç·²ÊǶÔÓÚÄÄЩÓÃÓÚµ÷ÊÔÄÚºËÐÔÄܵŤ¾ß£¬¸üÊÇÈç´Ë¡£

¡¡¡¡¶ÔÓÚÕâÖÖ´óÁ¿Êý¾ÝÐèÒªÔÚÄÚºËÖлº´æ²¢´«Êäµ½Óû§¿Õ¼äÐèÇ󣬺ܶഫͳµÄ·½·¨¶¼Òѵ½´ïÁ˼«ÏÞ£¬ÀýÈçÄں˳ÌÐòÔ±ºÜÊìϤµÄ printk() µ÷ÓᣴËÍ⣬¼ÙÈ粻ͬµÄÄÚºË×Óϵͳ¶¼¿ª·¢×Ô¼ºµÄ»º´æºÍ´«Êä´úÂ룬Ôì³ÉºÜ´óµÄ´úÂëÈßÓ࣬¶øÇÒÒ²´øÀ´Î¬»¤ÉϵÄÀ§ÄÑ¡£

¡¡¡¡ÕâЩ£¬¶¼ÒªÇ󿪷¢Ò»Ì×Äܹ»¸ßЧ¿É¿¿µØ½«Êý¾Ý´ÓÄں˿ռäת·¢µ½Óû§¿Õ¼äµÄϵͳ£¬¶øÇÒÕâ¸öϵͳӦ¸Ã¶ÀÁ¢ÓÚ¸÷¸öµ÷ÊÔ×Óϵͳ¡£ÕâÑù¾Íµ®ÉúÁË RelayFS¡£

¡¡¡¡RelayµÄ·¢Õ¹ÀúÊ·

¡¡¡¡Relay µÄǰÉíÊÇ RelayFS£¬¼´×÷Ϊ Linux µÄÒ»¸öÐÂÐÍÎļþϵͳ¡£2003Äê3Ô£¬RelayFSµÄµÚÒ»¸ö°æ±¾µÄ´úÂë±»¿ª·¢³öÀ´£¬ÔÚ7ÔÂ14ÈÕ£¬µÚÒ»¸öÕë¶Ô2.6Äں˵İ汾Ҳ¿ªÊ¼ÌṩÏÂÔØ¡£¾­¹ý¹ã·ºµÄÊÔÓú͸Ľø£¬Ö±µ½2005Äê9Ô£¬RelayFS²Å±»¼ÓÈëmainlineÄÚºË(2.6.14)¡£Í¬Ê±£¬RelayFSÒ²±»ÒÆÖ²µ½2.4ÄÚºËÖС£ÔÚ 2006Äê2Ô£¬´Ó2.6.17¿ªÊ¼£¬RelayFS²»ÔÙ×÷Ϊµ¥¶ÀµÄÎļþϵͳ´æÔÚ£¬¶øÊdzÉΪÄں˵ÄÒ»²¿·Ö¡£ËüµÄÔ´ÂëÒ²´Ófs/Ŀ¼ÏÂ×ªÒÆµ½ kernel/relay.cÖУ¬Ãû³ÆÖÐÒ²´ÓRelayFS¸Ä³ÉÁËRelay¡£

¡¡¡¡RelayFSĿǰÒѾ­±»Ô½À´Ô½¶àµÄÄں˹¤¾ßʹÓ㬰üÀ¨Äں˵÷ÊÔ¹¤¾ßSystemTap¡¢LTT£¬ÒÔ¼°Ò»Ð©·Ç·²µÄÎļþϵͳÀýÈçDebugFS¡£

¡¡¡¡RelayµÄ»ù±¾Ô­Àí

¡¡¡¡×ܵÄ˵À´£¬RelayÌṩÁËÒ»ÖÖ»úÖÆ£¬Ê¹µÃÄں˿ռäµÄ³ÌÐòÄܹ»Í¨¹ýÓû§¶¨ÒåµÄrelayͨµÀ(channel)½«´óÁ¿Êý¾Ý¸ßЧµÄ´«Êäµ½Óû§¿Õ¼ä¡£

¡¡¡¡Ò»¸örelayͨµÀÓÉÒ»×éºÍCPUÒ»Ò»¶ÔÓ¦µÄÄں˻º³åÇø×é³É¡£ÕâЩ»º³åÇøÓÖ±»³ÆÎªrelay»º³åÇø(buffer)£¬ÆäÖеÄÿһ¸öÔÚÓû§¿Õ¼ä¶¼ÓÃÒ»¸ö³£¹æÎļþÀ´±íʾ£¬Õâ±»½Ð×örelayÎļþ(file)¡£Äں˿ռäµÄÓû§¿ÉÒÔÀûÓÃrelayÌṩµÄAPI½Ó¿ÚÀ´Ð´ÈëÊý¾Ý£¬ÕâЩÊý¾Ý»á±»×Ô¶¯µÄдÈ뵱ǰµÄ CPU id¶ÔÓ¦µÄÄǸörelay»º³åÇø£»Í¬Ê±£¬ÕâЩ»º³åÇø´ÓÓû§¿Õ¼ä¿´À´£¬ÊÇÒ»×éÆÕͨÎļþ£¬¿ÉÒÔÖ±½ÓʹÓÃread()½øÐжÁÈ¡£¬Ò²¿ÉÒÔʹÓÃmmap()½øÐÐÓ³Éä¡£Relay²¢²»¹ØÐÄÊý¾ÝµÄ¸ñʽºÍÄÚÈÝ£¬ÕâЩÍêÈ«ÒÀ¿¿ÓÚʹÓÃrelayµÄÓû§³ÌÐò¡£RelayµÄÄ¿µÄÊÇÌṩһ¸ö×ã¹»¼òµ¥µÄ½Ó¿Ú£¬´Ó¶øÊ¹µÃ»ù±¾²Ù×÷¾¡¿ÉÄܵĸßЧ¡£

¡¡¡¡Relay½«Êý¾ÝµÄ¶ÁºÍд·ÖÀ룬ʹµÃÍ»·¢ÐÔ´óÁ¿Êý¾ÝдÈëµÄʱºò£¬²»ÐèÒªÊÜÏÞÓÚÓû§¿Õ¼äÏà¶Ô½ÏÂýµÄ¶ÁÈ¡ËÙ¶È£¬´Ó¶ø´ó´óÌá¸ßÁËЧÂÊ¡£Relay×÷ΪдÈëºÍ¶ÁÈ¡µÄÇÅÁº£¬Ò²¾ÍÊǽ«ÄÚºËÓû§Ð´ÈëµÄÊý¾Ý»º´æ²¢×ª·¢¸øÓû§¿Õ¼äµÄ³ÌÐò¡£ÕâÖÖת·¢»úÖÆÒ²ÕýÊÇRelayÕâ¸öÃû³ÆµÄÓÉÀ´¡£

¡¡¡¡ÕâÀïµÄrelayͨµÀÓÉËĸörelay»º³åÇø(kbuf0µ½kbuf3)×é³É£¬·Ö±ð¶ÔÓ¦ÓÚϵͳÖеÄcpu0µ½cpu1¡£Ã¿¸öCPUÉϵĴúÂëµ÷ÓÃrelay_write()µÄʱºò½«Êý¾ÝдÈë×Ô¼º¶ÔÓ¦µÄrelay»º³åÇøÄÚ¡£Ã¿¸örelay»º³åÇø³ÆÒ»¸örelayÎļþ£¬¼´/cpu0µ½ /cpu3¡£µ±Îļþϵͳ±»mountµ½/mnt/ÒÔºó£¬Õâ¸örelayÎļþ¾Í±»Ó³Éä³ÉÓ³Éäµ½Óû§¿Õ¼äµÄµØÖ·¿Õ¼ä¡£Ò»µ©Êý¾Ý¿ÉÓã¬Óû§³ÌÐò¾Í¿ÉÒÔ°ÑËüµÄÊý¾Ý¶Á³öÀ´Ð´Èëµ½Ó²ÅÌÉϵÄÎļþÖУ¬¼´cpu0.outµ½cpu3.out¡£

¡¡¡¡RelayµÄÖ÷ÒªAPI

¡¡¡¡Ç°ÃæÌáµ½µÄ relay_write() ¾ÍÊÇ relay API Ö®Ò»¡£³ý´ËÒÔÍ⣬Relay »¹ÌṩÁ˸ü¶àµÄ APIÀ´Ö§³ÖÓû§³ÌÐòÍêÕûµÄʹÓà relay¡£ÕâЩ API£¬Ö÷Òª°´ÕÕÃæÏòÓû§¿Õ¼äºÍÃæÏòÄں˿ռä·ÖΪÁ½´óÀ࣬ÏÂÃæÎÒÃÇÀ´·Ö±ð½øÐнéÉÜ¡£

¡¡¡¡ÃæÏòÓû§¿Õ¼äµÄ API

¡¡¡¡ÕâЩ Relay ±à³Ì½Ó¿ÚÏòÓû§¿Õ¼ä³ÌÐòÌṩÁË·ÃÎÊ relay ͨµÀ»º³åÇøÊý¾ÝµÄ»ù±¾²Ù×÷µÄÈë¿Ú£¬°üÀ¨£º

¡¡¡¡¡ñopen() - ´ðÓ¦Óû§´ò¿ªÒ»¸öÒѾ­´æÔÚµÄͨµÀ»º³åÇø¡£

¡¡¡¡¡ñmmap() - ʹͨµÀ»º³åÇø±»Ó³É䵽λÓÚÓû§¿Õ¼äµÄµ÷ÓÃÕߵĵØÖ·¿Õ¼ä¡£Òª·Ç·²×¢ÖصÄÊÇ£¬ÎÒÃDz»Äܽö¶Ô¾Ö²¿ÇøÓò½øÐÐÓ³Éä¡£Ò²¾ÍÊÇ˵£¬±ØÐëÓ³ÉäÕû¸ö»º³åÇøÎļþ£¬Æä´óСÊÇ CPUµÄ¸öÊýºÍµ¥¸ö CPU »º³åÇø´óСµÄ³Ë»ý¡£

¡¡¡¡¡ñread() - ¶ÁȡͨµÀ»º³åÇøµÄÄÚÈÝ¡£ÕâЩÊý¾ÝÒ»µ©±»¶Á³ö£¬¾ÍÒâζ×ÅËûÃDZ»Óû§¿Õ¼äµÄ³ÌÐòÏû·ÑµôÁË£¬Ò²¾Í²»Äܱ»Ö®ºóµÄ¶Á²Ù×÷¿´µ½¡£

¡¡¡¡¡ñsendfile() - ½«Êý¾Ý´ÓͨµÀ»º³åÇø´«Êäµ½Ò»¸öÊä³öÎļþÃèÊö·û¡£ÆäÖпÉÄܵÄÌî³ä×Ö·û»á±»×Ô¶¯È¥µô£¬²»»á±»Óû§¿´µ½¡£

¡¡¡¡¡ñpoll() - Ö§³Ö POLLIN/POLLRDNORM/POLLERR Ðźš£Ã¿´Î×Ó»º³åÇøµÄ±ß½ç±»Ô½¹ýʱ£¬µÈ´ý×ŵÄÓû§¿Õ¼ä³ÌÐò»áµÃµ½Í¨Öª¡£

¡¡¡¡¡ñclose() - ½«Í¨µÀ»º³åÇøµÄÒýÓÃÊý¼õ1¡£µ±ÒýÓÃÊý¼õΪ0ʱ£¬±íÃ÷ûÓнø³Ì»òÕßÄÚºËÓû§ÐèÒª´ò¿ªËü£¬´Ó¶øÕâ¸öͨµÀ»º³åÇø±»ÊÍ·Å¡£

¹²3Ò³: ÉÏÒ»Ò³ 1 [2] [3] ÏÂÒ»Ò³
ÄãµÄλÖ㺵çÄÔ¹ÊÕÏÍø >> ²Ù×÷ϵͳ >> Linux/Unix >> LinuxµÄ¸ßЧµÄÊý¾Ý´«Êä¼¼Êõ-Relay