¡¡¡¡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£¬Ö÷Òª°´ÕÕÃæÏòÓû§¿Õ¼äºÍÃæÏòÄں˿ռä·ÖΪÁ½´óÀ࣬ÏÂÃæÎÒÃÇÀ´·Ö±ð½øÐнéÉÜ¡£
kemyliu ÓÚ 2007-01-16 09:07:01·¢±í:
:0L :0L :0L
williamEXE ÓÚ 2007-01-01 00:29:09·¢±í:
¡¡¡¡ÃæÏòÓû§¿Õ¼äµÄ API
¡¡¡¡ÕâЩ Relay ±à³Ì½Ó¿ÚÏòÓû§¿Õ¼ä³ÌÐòÌṩÁË·ÃÎÊ relay ͨµÀ»º³åÇøÊý¾ÝµÄ»ù±¾²Ù×÷µÄÈë¿Ú£¬°üÀ¨£º
¡¡¡¡¡ñopen() - ÔÊÐíÓû§´ò¿ªÒ»¸öÒѾ´æÔÚµÄͨµÀ»º³åÇø¡£
¡¡¡¡¡ñmmap() - ʹͨµÀ»º³åÇø±»Ó³É䵽λÓÚÓû§¿Õ¼äµÄµ÷ÓÃÕߵĵØÖ·¿Õ¼ä¡£ÒªÌرð×¢ÒâµÄÊÇ£¬ÎÒÃDz»Äܽö¶Ô¾Ö²¿ÇøÓò½øÐÐÓ³Éä¡£Ò²¾ÍÊÇ˵£¬±ØÐëÓ³ÉäÕû¸ö»º³åÇøÎļþ£¬Æä´óСÊÇ CPUµÄ¸öÊýºÍµ¥¸ö CPU »º³åÇø´óСµÄ³Ë»ý¡£
¡¡¡¡¡ñread() - ¶ÁȡͨµÀ»º³åÇøµÄÄÚÈÝ¡£ÕâЩÊý¾ÝÒ»µ©±»¶Á³ö£¬¾ÍÒâζ×ÅËûÃDZ»Óû§¿Õ¼äµÄ³ÌÐòÏû·ÑµôÁË£¬Ò²¾Í²»Äܱ»Ö®ºóµÄ¶Á²Ù×÷¿´µ½¡£
¡¡¡¡¡ñsendfile() - ½«Êý¾Ý´ÓͨµÀ»º³åÇø´«Êäµ½Ò»¸öÊä³öÎļþÃèÊö·û¡£ÆäÖпÉÄܵÄÌî³ä×Ö·û»á±»×Ô¶¯È¥µô£¬²»»á±»Óû§¿´µ½¡£
¡¡¡¡¡ñpoll() - Ö§³Ö POLLIN/POLLRDNORM/POLLERR Ðźš£Ã¿´Î×Ó»º³åÇøµÄ±ß½ç±»Ô½¹ýʱ£¬µÈ´ý×ŵÄÓû§¿Õ¼ä³ÌÐò»áµÃµ½Í¨Öª¡£
¡¡¡¡¡ñclose() - ½«Í¨µÀ»º³åÇøµÄÒýÓÃÊý¼õ1¡£µ±ÒýÓÃÊý¼õΪ0ʱ£¬±íÃ÷ûÓнø³Ì»òÕßÄÚºËÓû§ÐèÒª´ò¿ªËü£¬´Ó¶øÕâ¸öͨµÀ»º³åÇø±»ÊÍ·Å¡£
¡¡¡¡ÃæÏòÄں˿ռäµÄ API
¡¡¡¡ÕâЩAPI½Ó¿ÚÏòλÓÚÄں˿ռäµÄÓû§ÌṩÁ˹ÜÀírelayͨµÀ¡¢Êý¾ÝдÈëµÈ¹¦ÄÜ¡£ÏÂÃæ½éÉÜÆäÖÐÖ÷ÒªµÄ²¿·Ö£¬ÍêÕûµÄAPI½Ó¿ÚÁбíÇë²Î¼ûÕâÀï¡£
¡¡¡¡¡ñrelay_open() - ´´½¨Ò»¸örelayͨµÀ£¬°üÀ¨´´½¨Ã¿¸öCPU¶ÔÓ¦µÄrelay»º³åÇø¡£
¡¡¡¡¡ñrelay_close() - ¹Ø±ÕÒ»¸örelayͨµÀ£¬°üÀ¨ÊÍ·ÅËùÓеÄrelay»º³åÇø£¬ÔÚ´Ë֮ǰ»áµ÷ÓÃrelay_switch()À´´¦ÀíÕâЩrelay»º³åÇøÒÔ±£Ö¤ÒѶÁÈ¡µ«ÊÇδÂúµÄÊý¾Ý²»»á¶ªÊ§
¡¡¡¡¡ñrelay_write() - ½«Êý¾ÝдÈëµ½µ±Ç°CPU¶ÔÓ¦µÄrelay»º³åÇøÄÚ¡£ÓÉÓÚËüʹÓÃÁËlocal_irqsave()±£»¤£¬Òò´ËÒ²¿ÉÒÔÔÚÖжÏÉÏÏÂÎÄÖÐʹÓá£
¡¡¡¡¡ñrelay_reserve() - ÔÚrelayͨµÀÖб£ÁôÒ»¿éÁ¬ÐøµÄÇøÓòÀ´Áô¸øδÀ´µÄдÈë²Ù×÷¡£Õâͨ³£ÓÃÓÚÄÇЩϣÍûÖ±½ÓдÈëµ½relay»º³åÇøµÄÓû§¡£¿¼Âǵ½ÐÔÄÜ»òÕßÆäËüÒòËØ£¬ÕâЩÓû§²»Ï£ÍûÏÈ°ÑÊý¾Ýдµ½Ò»¸öÁÙʱ»º³åÇøÖУ¬È»ºóÔÙͨ¹ýrelay_write()½øÐÐдÈë¡£
¡¡¡¡RelayµÄÀý×Ó
¡¡¡¡ÎÒÃÇÓÃÒ»¸ö×î¼òµ¥µÄÀý×ÓÀ´½éÉÜÔõôʹÓÃRelay¡£Õâ¸öÀý×ÓÓÉÁ½²¿·Ö×é³É£ºÒ»²¿·ÖÊÇλÓÚÄں˿ռ佫Êý¾ÝдÈërelayÎļþµÄ³ÌÐò£¬Ê¹ÓÃʱÐèÒª×÷Ϊһ¸öÄÚºËÄ£¿é±»¼ÓÔØ£»ÁíÒ»²¿·ÖÊÇλÓÚÓû§¿Õ¼ä´ÓrelayÎļþÖжÁÈ¡Êý¾ÝµÄ³ÌÐò£¬Ê¹ÓÃʱ×÷ΪÆÕͨÓû§Ì¬³ÌÐòÔËÐС£
¡¡¡¡Äں˿ռäµÄ³ÌÐòÖ÷Òª²Ù×÷ÊÇ£º
¡¡¡¡¼ÓÔØÄ£¿éʱ£¬´ò¿ªÒ»¸örelayͨµÀ£¬²¢ÇÒÍù´ò¿ªµÄrelayͨµÀÖÐдÈëÏûÏ¢£»
¡¡¡¡Ð¶ÔØÄ£¿éʱ£¬¹Ø±ÕrelayͨµÀ¡£
¡¡¡¡³ÌÐòÄÚÈÝ£º
¡¡¡¡Óû§¿Õ¼äµÄº¯ÊýÖ÷Òª²Ù×÷ÊÇ£º
¡¡¡¡¡ñÈç¹ûrelayfsÎļþϵͳ»¹Ã»Óб»mount£¬Ôò½«Æämountµ½Ä¿Â¼/mnt/relayÉÏ£»
¡¡¡¡¡ñ±éÀúÿһ¸öCPU¶ÔÓ¦µÄ»º³åÎļþ£»
¡¡¡¡¡ñ´ò¿ªÎļþ£»
¡¡¡¡¡ñ¶ÁÈ¡ËùÓÐÎļþÄÚÈÝ£»
¡¡¡¡¡ñ¹Ø±ÕÎļþ£»
¡¡¡¡¡ñ×îºó£¬umountµôrelayÎļþϵͳ¡£
¡¡¡¡³ÌÐòÄÚÈÝ£º
¡¡¡¡ÉÏÃæÕâ¸öÀý×Ó¸ø³öÁËʹÓÃrelayµÄÒ»¸ö×î¼òµ¥µÄÇéÐΣ¬²¢Ã»ÓÐʵ¼ÊÓô¦£¬µ«ÊÇÐÎÏóÃèÊöÁË´ÓÓû§¿Õ¼äºÍÄں˿ռäÁ½¸ö·½ÃæʹÓÃrelayµÄ»ù±¾Á÷³Ì¡£Êµ¼ÊÓ¦ÓÃÖжÔrelayµÄʹÓõ±È»Òª±ÈÕ⸴Ôӵöࡣ