[ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): guest (guest) <203.236.3.241> ³¯ Â¥ (Date): 2002³â 10¿ù 10ÀÏ ¸ñ¿äÀÏ ¿ÀÈÄ 08½Ã 33ºÐ 48ÃÊ Á¦ ¸ñ(Title): [q] IPC performance (socket)? IPC·Î tcp socket programÀÌ ºü¸¥°¡¿ä? ¾Æ´Ï¸é Domain socketÀÌ ºü¸¥°¡¿ä? ±×¸®°í, Domain socketÀÌ UDP¿Í À¯»çÇÏ°Ô µ¹¾Æ°£´Ù°í Çϴµ¥, UDP¿Í Domain socketÁß¿¡´Â ¹¹°¡ ´õ ºü¸¥±î¿ä? ÇöÀç 1 machine¾È¿¡ 1°³ÀÇ server programÀÌ ÀÖ°í, ÀÌ¿Í Åë½ÅÇÏ´Â client°¡ ¾à 100¿©°³ Àִµ¥, ÀÌ°¡¿îµ¥ ipc¸¦ tcp socketÀ¸·Î Çß´õ´Ï ¼Óµµ°¡ Á» ´À·Á¼­ Shared memory¸¦ Çß´õ´Ï ¾î¿¼ö ¾øÀÌ pollingÀ» Çؼ­ tcpº¸´Ù ±×¸® ÁÁÀ»°Íµµ ¾ø³×¿ä... ±×·¡¼­ UDP¿Í domain socketÀ¸·Î ¹Ù²Ù¾î º¼±î °í¹ÎÁßÀÔ´Ï´Ù. À̶§ packet loss¶§¹®¿¡ ackÇØÁÖ´Â logicµµ Æ÷ÇÔÇØ¾ß µÇ°ÚÁö¿ä? ÀÌ¿Í À¯»çÇÑ ¹®Á¦¸¦ ¸ÕÀú °æÇèÇϽŠ°í¼öºÐÀÇ ÈƼö ºÎŹµå¸³´Ï´Ù. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): Tony (Ôôà¹úõÖØ) ³¯ Â¥ (Date): 2002³â 10¿ù 11ÀÏ ±Ý¿äÀÏ ¿ÀÈÄ 04½Ã 33ºÐ 45ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? shared memory¸¸ ¾²¼Å¼­ Æú¸µÇϼ̳ª¿ä?? semaphore¸¦ ÇÔ²² ¾²½É µÉ°Í°°Àºµ¥¿ä?? ±×ÂÊÀÌ °¡Àå ºü¸¥°É·Î ¾Ë°íÀÖ½À´Ï´Ù... socketÀ¸·Î ¸¸µé¸é Ŭ¶óÀ̾ðÆ®¸¦ ´Ù¸¥ÄÄÅÍ¿¡ À̽ÄÇϰųª Æ÷ÆÃÇϱâ¾ß ÆíÇÏ°ÚÁö¸¸ ÀåÁ¡ ¾øÀ»µí¿ä... [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (foo bar) ³¯ Â¥ (Date): 2002³â 10¿ù 12ÀÏ Åä¿äÀÏ ¿ÀÈÄ 02½Ã 24ºÐ 58ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? ÀÏ´Ü ¼Óµµ¶ó°í Çصµ ´Ù °°Àº ¼Óµµ°¡ ¾Æ´Õ´Ï´Ù. A°¡ º¸³½ ´ÙÀ½ ÃÖ´ëÇÑ »¡¸® B°¡ ¹Þ°Ô ÇÏ´Â°É ¿øÇÏ´ÂÁö ´ÜÀ§ ½Ã°£¿¡ ÃÖ´ëÇÑ ¸¹Àº µ¥ÀÌÅ͸¦ º¸³»·Á°í Çϴ°ÇÁö ¶Ç, ÆÐŶ Å©±â´Â ÀÏÁ¤ÇÑÁö ¾Æ´Ï¸é ¾ÆÁÖ ÀÛÀº ÆÐŶ¿¡¼­ Å« ÆÐŶ±îÁö ´Ù¾çÇÑÁö. ÇØ´ç ½Ã½ºÅÛ¿¡¸¸ ÃÖÀûÈ­ µÇ¸é µÇ´ÂÁö ¾Æ´Ï¸é Æ÷ÅͺíÇؾßÇÏ´ÂÁö, Æ÷ÅͺíÀ̸é Unix¿¡¼­¸¸ÀÎÁö ¾Æ´Ï¸é RTOS³ª windozeµîµîµµ °í·ÁÇØ¾ß ÇÏ´ÂÁö.. ¸ðµç °æ¿ì¿¡ ´ëÇؼ­ ´Ù Àû±â´Â ¾çÀÌ ³Ê¹« ¸¹°í Á¦ ¸Ó¸®¼Ó¿¡ ¾ËÄڿõµ ³Ê¹« ¸¹±º¿ä. :) (Àá°£ »ý°¢Çغôõ´Ï ¸ðµç °æ¿ì¿¡ ´ëÇØ ´Ù ÀûÀ» ´É·ÂÀÌ ¾ø±º¿ä. -.-a) ¾î¶² Á¾·ùÀÇ ¼º´ÉÀ» ¿øÇϽôÂÁö ±â¼úÇØÁֽøé ÇÒ ¸»ÀÌ Á» »ý±æ °Í °°½À´Ï´Ù¸¸.. @ Unix domain socketÀÇ °æ¿ì, DatagramÀº OS¸¶´Ù Ư¼ºÀÌ Æ²¸³´Ï´Ù. Linux´Â À¯½Ç ¾ø´Ù°í ¸ø¹Ú¾Æ³ù°í Zolaris´Â Å×½ºÆ® °á°ú À¯½Ç ¾ø´Â °Í °°°í Tru64´Â Å×½ºÆ® °á°ú À¯½Ç Àý¶ó ¸¹½À´Ï´Ù. ´Ù¸¥°Ç? ¸ð¸£°Ú½À´Ï´Ù -.-a [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): Tony (Ôôà¹úõÖØ) ³¯ Â¥ (Date): 2002³â 10¿ù 12ÀÏ Åä¿äÀÏ ¿ÀÈÄ 06½Ã 33ºÐ 58ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? ±Ùµ¥ ±×·¡µµ semaphore¿Í sharedmemory°¡ ¹«Á¶°£ ÃÖ°íÀÇ ¼º´É ¶Ç´Â ÃÖ°í¿Í °°Àº ¼º´ÉÀ» ³»Áö ¾ÊÀ»±î¿ä? ÀÏ´Ü datasize°¡ Ä¿Áö¸é sharedmemory°¡ copy overhead¸¦ ¸Ô¾î¹ö·Á¼­ À¯¸®ÇÒ°Í °°°í.. datasize°¡ À۾Ƶµ semaphore³ª semaphopre¿Í °°Àº ¹æ¹ýÀ¸·Î ±¸ÇöµÈ ÀÎÅÍÆäÀ̽º¸¦ Åë°úÇÒÅ×´Ï... ¾Æ¹«¸® »ý°¢Çصµ ¼¼¸¶ÆÛ+°øÀ¯¸Þ¸ð¸®·Î ±¸ÇöÇѰͺ¸´Ù ºü¸£°Ô ¸¸µé ¹æ¹ýÀÌ ¾È¶°¿À¸£´Âµ¥¿ä? [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (foo bar) ³¯ Â¥ (Date): 2002³â 10¿ù 13ÀÏ ÀÏ¿äÀÏ ¿ÀÀü 07½Ã 54ºÐ 08ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? shared memory°¡ ºü¸£´Ù´Âµ¥ ÀÌÀǸ¦ ´Þ »ç¶÷Àº ¾ø°ÚÁö¸¸, semaphore°¡ Unix System V IPCÀÇ ±× semaphore¶ó¸é ±×¸® ºü¸¥ ¹æ¹ýÀº ¾Æ´Õ´Ï´Ù. portableÇÏ°í´Â °Å¸®°¡ ¾à°£ ÀÖÁö¸¸ ÇÑ 2~15ÁÙ¸¸ ºí·¢¹Ú½º·Î Çϳª ¸¸µé¾îµÎ¸é atomic lockÀÌ Á¦ÀÏ ºü¸¨´Ï´Ù. CPUº°·Î test-and-setÀ̳ª ºñ½ÁÇÑ ¿ªÇÒÀ» ÇÒ ¼ö ÀÖ´Â instruction setÀÌ ÀÖÀ¸´Ï±î Æ÷Æýÿ¡ ¾à°£¾¿¸¸ ¼ÕºÁÁÖ¸é µË´Ï´Ù. (4 byte or 8 byte : ½ÇÁ¦·Î´Â 1bitÀÌ¿ë) À̺¸´Ù Á¶±Ý ´À¸®Áö¸¸ Æ÷ÅͺíÇÑ pthread_mutex_XXXXµµ ÀÖ½À´Ï´Ù. ¸Þ¸ð¸®´Â atomic lockº¸´Ù Á» ¸¹ÀÌ ¸ÔÁö¸¸ ¼Óµµ´Â ºü¸£(´Ù°íÇÏ)¤²´Ï´Ù. :) (¾à 60 byte) ¿©·¯°³ ¸¸µé±â ¾î·Æ°í Á» ±ÍÂúÀº ¹æ¹ýÀÌÁö¸¸ file lockµµ »ó´çÈ÷ ºü¸¥ ¹æ¹ýÁßÀÇ Çϳª¶ó°í ÇÕ´Ï´Ù. semaphore´Â ÀÌ µÚ¿¡ ³ö¾ß ÇÒ°Ì´Ï´Ù. :) ¸¸¾à¿¡.. shared memory¸¦ ¾²¸é¼­ ±× °ø°£À» applicationÀÌ Á÷Á¢ ÀÐ°í ºÎºÐ updateÇÏ°í ´Ù½Ã ³Ñ±â°í µîµîÀ» ÇÒ°Ô ¾Æ´Ï¶ó(°øÀ¯°ø°£ÀÌ ¾Æ´Ï¶ó) data¸¦ copyÇØ°¡°í ³¡³¯²¨¶ó¸é, posix message queue°¡ ´õ ÁÁÀ»°Ì´Ï´Ù. ¼Óµµ´Â posix shared memory + pthread_mutex¸¦ Á¶ÇÕÇÑ ¼ÓµµÁß ÃÖ°íÀÇ ¼Óµµ¸¦ ³»¸é¼­ ´Ù¾çÇÑ ±â´ÉÀ» Á¦°øÇØÁÝ´Ï´Ù. ´ÜÁ¡À̶ó¸é, shared memory¸¦ ¾²°í ÃÖ°íÀÇ ¼Óµµ¸¦ ³»±â À§ÇØ ¹Ì¸® Á¤ÇÑ Å©±âÀÇ message array¸¦ À¯ÁöÇϱ⠶§¹®¿¡ memory¿¡ ºñÈ¿À²ÀûÀÌ°í ¹Ì¸® Á¤ÇÑ Å©±â ÀÌ»óÀÇ message¸¦ ³Ñ±â·Á¸é user°¡ fragmentation and reassembleÀ» ¼öÀÛ¾÷À¸·Î ÇØ¾ß ÇÑ´Ù´Â Á¡. frag & reassembleÀÌ ±ÍÂúÀ¸¸é stream socketÀ̳ª pipe¸¦ ½á¾ß°ÚÁÒ. connection °ü¸®¸¦ ÇØÁà¾ß°ÚÁö¸¸ :) @Àú´Â ´ë¿ë·® Æ®·£Á§¼Ç¿¡ ÀÏÁ¤ ½Ã°£ À̳»ÀÇ turn around timeÀ» °¡Á®¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ¾ú´Âµ¥, (server time 400msÀ̳», Æò±Õ 100~200msÀ̳», process¼ö 5°³ ÀÌ»ó, 2-phase commitÆ÷ÇÔ) shared memory¿¡ buffer poolÀ» ¸¸µé¾îµÎ°í ½è¾ú½À´Ï´Ù. memory copy°¡ »ó´çÇÑ overhead°¡ µÇ´Â »óȲÀ̾... atomic lock°ú messageº° flag set, posix signal Á¶ÇÕ. È£ÁÖ¾ÖµéÀº º¸´Ï±î buffer poolÀ¯ÁöÇÏ°í, atomic lock¸¦ ¾²¸é¼­ transactionÀ» ´Ù¸¥ process·Î ³Ñ±â´Âµ¥´Â posix signalÀ» ¾²´õ±º¿ä. ÃÊ´ç Æ®·£Á§¼Ç¿¡´Â ¾ÆÁÖ ¾à°£ÀÇ ¼ÕÇØ°¡ ÀÖÁö¸¸ ¹ÝÀÀ¼Óµµ´Â ´Ü¿¬ ÃÖ°íÀÔ´Ï´Ù. ¹°·Ð ¼±Á¡Çü Ä¿³ÎÀ̶ó´Â ÀüÁ¦°¡ ÇÊ¿äÇÕ´Ï´Ù. :) @Âü shared memoryµµ posix shared memory¸¦ ¾²¸é ¼ö¹é¸Þ°¡ ÀÌ»óÀÇ °ø°£ ÇÒ´çÇÏ´Â°Ô Á» ½¬¿öÁý´Ï´Ù. sysV shared memory´Â °ø°£ Çк¸°¡ ³Ê¹« ¾î·Á¿ö¼­¸® -.-a [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): sang (¸ÛÅִ븸) ³¯ Â¥ (Date): 2002³â 10¿ù 13ÀÏ ÀÏ¿äÀÏ ¿ÀÈÄ 01½Ã 50ºÐ 27ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? ¹÷´Ô ÀÇ°ß¿¡ ´ëüÀûÀ¸·Î µ¿°¨Çϸç ÇÑ°¡Áö Áú¹®ÀÌ ÀÖ½À´Ï´Ù. Á¦ ü°¨Àû(?) ´À³¦À¸·Î´Â pthread mutex lockÀÌ Àý´ë ºü¸¥°Å °°Áö°¡ ¾Ê½À´Ï´Ù. ±×·¡¼­ °¡±ÞÀû pthread¸¦ »ç¿ëÇÏÁö ¾Ê°í, atomic lock°ú signalÀ» »ç¿ëÇؼ­ ÄÚµùÇØ ¿Ô´Âµ¥(Á¦ °æ¿ì´Â ÁÖ·Î kernel mode¿¡¼­ µ¿ÀÛÇÏ´Â ¸ðµâµéÀ» ÄÚµùÇϴµ¥ mutual exclusionÀ» kernel module³»¿¡¼­ ÇØ°áÇØÁÖ´À³Ä user modeÀÇ pthread ³»¿¡¼­ ÇØ°áÇØÁÖ´À³Ä¸¦ °áÁ¤ÇØ¾ß ÇÒ¶§°¡ Á¾Á¾ ÀÖ½À´Ï´Ù.) Ȥ½Ã pthread_mutex_lockÀÇ ¼Óµµ¸¦ Á¤·®ÀûÀ¸·Î ÃøÁ¤ÇØ ³õ°Å³ª ´Ù¸¥ critical region º¸È£ ¹æ¹ýµé°ú ºñ±³ÇØ ³õÀº ÀÚ·á°¡ ÀÖ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ±×·¯°íº¸´Ï ´ÔÀÇ ±Û¿¡¼­ È£ÁÖ¾ÖµéÀÌ »ç¿ëÇÑ ¹æ¹ýÀÌ Á¦°¡ »ç¿ëÇÏ´Â ¹æ¹ý°ú °ÅÀÇ µ¿ÀÏÇϳ׿ä. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): Tony (Ôôà¹úõÖØ) ³¯ Â¥ (Date): 2002³â 10¿ù 13ÀÏ ÀÏ¿äÀÏ ¿ÀÈÄ 02½Ã 45ºÐ 21ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? pthread ¿¡´ëÇؼ­´Â ¾î¶² Ç÷§Æû¿¡¼­ ¾î¶² ±¸ÇöÀÌ ±×·±Áö ¸í½Ã¸¦ ÇØÁà¾ß ÇÒ °Í °°³×¿ä... ¤¾¤¾¤¾ posix thread¶ó´Â°Ô interfaceÁ¤ÀÇÀÏ »ÓÀÌ´Ï... ¼Óµµ ºñ±³¿¡ ´ëÇؼ­µµ implementation°ú »ç¿ëÇÑ ÀÎÅÍÆäÀ̽º¿¡µû¶ó ³Ê¹«µµ ´Þ¶óÁö±â¶§¹®¿¡ ºÐ¼® ÀÚ·á°¡ ³ª¿À±â ½±Áö´Â ¾ÊÀ»µí¿ä.. ÀÌ·¯ÀÌ·¯ÇÑ ÄÉÀ̽º¿¡´Â ÀÌ·± ±¸ÇöÀÌ ºü¸£´Ù Çϴ½ÄÀÇ ÀÚ·áµéÀº °¡²û º» °Í °°Àºµ¥¿ä. ¹¹°¡ ºü¸£´Ù Çϱ⿣ Á»... ps. ¤¾¤¾±×·¡µµ Àúµµ swhan´Ô ÀÇ°ß¿¡ ´ëºÎºÐ µ¿ÀÇ. ½¹~~ ¼öÁ¤Çß´Ù´Â... [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (foo bar) ³¯ Â¥ (Date): 2002³â 10¿ù 13ÀÏ ÀÏ¿äÀÏ ¿ÀÈÄ 11½Ã 19ºÐ 02ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? Èî~ ³¯Ä«·Î¿î ÁöÀû pthread mutexÀÇ ¼Óµµ¿¡ ´ëÇؼ­ implementation¸¶´Ù ´Ù¸¦ ¼ö ÀÖ´Ù´Â °ÍÀº Àúµµ µ¿ÀÇÇÕ´Ï´Ù. ÇÏÁö¸¸ ¾î¶»°Ô ´Ù¸¦ ¼ö ÀÖ´ÂÁö´Â ÀüÇô °¨ÀÌ ¾È¿À´Â±º¿ä. ´Ù¸¸, threadÀÇ °æ¿ìó·³ ²®¶¼±â¸¸ ¾º¿ì±â´Â Á» ¾î·Á¿ï °Í °°°í, signalÀÇ °æ¿ìó·³ Ä¿³ÎÀÌ Á» ¸¹ÀÌ º¯ÇØ¾ß ÇÏ´Â °Í °°Áöµµ ¾Ê°í... mutex°¡ ¸»ÀÌ pthread_mutexÁö thread¸¦ ¾²Áö ¾Ê´Â °Ü¿ì¿¡µµ °®´Ù ¾²°Åµç¿ä. ÀÚ¹éÇÏÀÚ¸é, Àü pthread_mutex¿Í semaphoreÀÇ ¼Óµµ ºñ±³´Â Çغ¸Áö ¾Ê¾Ò½À´Ï´Ù. ´Ù¸¸ ºü¸¥ lock¹æ¹ýÀ» ã´øÁß, ¼ö ¸¹Àº(±Ù°Å¸¦ ´î ¼ö ¾ø´Â!!!) ÀÚ·áµéÀÌ atomic lockÀÌ ºü¸£°í semaphoreº¸´Ù´Â pthread mutex°¡ ºü¸£´Ù....°í ¸»À» Çϱ淡 -.-a ±×¸®°í, Á¦°¡ ÀÌ°Å·Î °í¹ÎÇÒ ½ÃÀý¿¡´Â user mode¿¡¼­¸¸ ÇØ°áÇØ¾ß Çß¾ú½À´Ï´Ù. µµÁß¿¡ context switchingÀÌ ÀϾÁö ¾Êµµ·Ï ³ë·ÂÇß±¸¿ä. ±×·¡¼­, ¿ÏÀüÇÑ ¶Ç´Â ºÎºÐÀû ¼±Á¡Çü Ä¿³ÎÀ» °í¸£°í process schedulerµµ ¼±ÅÃÇÏ°í µîµî ÀÛ¾÷µµ(´ç¿¬ÇÏÁö¸¸) ÇØÁá¾ú±¸¿ä. (ÇÏ°íÇ ¸»Àº Ä¿³Î¸ðµå´Â ¸ð¸£°Ú´Ù...¹è°½Ã¶ó~~ ¹¹ ÀÌ·±°ÅÁÒ -.-a Á˼ÛÇÕ´Ï´Ù) Èì..signalµµ sysv signal°ú posix signalÀÌ Æ¯¼ºÀÌ Æ²¸®°í ¹ÝÀÀ¼Óµµ³ª À¯½Ç ¿©ºÎµµ Ʋ¸®´Ï ¼Óµµ°¡ Ʋ¸®´Ù°í ¸»À» Çؾ߰ڱº¿ä. @±×¸®°í Àü swhanÀä -.-a @»ý°¢³­±è¿¡ À¥¼­ÇÎÀ̳ª Çؾ߰ڱº¿ä. lock¼Óµµ¿¡ ´ëÇÑ º¥Ä¡¸¶Å·... @Âü..Àü atomic lockÀ» pthread_mutex´ë½Å ¼±ÅÃÇÑ°Ô..memory size ¶§¹®À̾ú½À´Ï´Ù. Äڵ带 °¡±ÞÀû portableÇÏ°Ô ¸¸µé¾î ´Þ¶ó´Â ¿ä±¸°¡ À־ assembly Äڵ带 ³ÖÁö ¾ÊÀ¸·Á°í Çߴµ¥ pthread_mutex_tÀÇ Å©±â°¡ 60ByteÁ¤µµ Çϴ¹ٶ÷¿¡ ¼öõ°³ array¶û °÷°÷¿¡ »ðÀÔÇϱⰡ Âü ¾î·Á¿öÁö´õ±º¿ä. (Àà Áö±Ý Zol5.6¿¡¼­ ¼ÕÀ¸·Î ´ëÃæ ¼¼¾îº¸´Ï 24Byte·Î±º¿©. Ä¡¸ÅÀϱî implementaion Â÷ÀÌÀϱî... -.-a ) [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): Tony (Ôôà¹úõÖØ) ³¯ Â¥ (Date): 2002³â 10¿ù 14ÀÏ ¿ù¿äÀÏ ¿ÀÀü 12½Ã 17ºÐ 35ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? ¤¾¤¾ ¾ð´É À§·Î ¿Ã¶ó°¡¼­ ¼öÁ¤Çß´ÙÁÒ... ATOMIC LOCKÀº LOCKº¯¼ö µÎ°í POLLINGÇϱⶫ½Ã ¶ôÀÌ Ç®¸°ÈÄ ¹ÝÀÀ¼Óµµ°¡ °¡Àå ºü¸¦¼ö¹Û¿¡ ¾ø½À´Ï´Ù. ¹®Á¦´Â Æú¸µÀ̱⶧¹®¿¡ LOCKº¯¼ö¿¡´ëÇؼ­´Â ºü¸¥ ¹ÝÀÀÀ» º¸ÀÌÁö¸¸ ÀüüÀûÀÎ ½Ã½ºÅÛ¼º´ÉÀº ¶³¾î¶ß¸®ÁÒ.. PTHREAD_MUTEX´Â ÈìÈì.. º¸ÅëÀº À¯Àú·¹º§¿¡¼­ ±¸ÇöÇß´Ù°í Ä¡°í Kernel Switching Overhead¾ø´Ù´Â ÀÌÀ¯·Î ºü¸£´Ù´Â ¸»ÀÌ µµ´Â °Å °°°í semaphore´Â Ä¿³ÎÀ» Åë°úÇϴϸ¸Å­ ´À¸®´Ù°í ÇÏ´Â°Ô ¾Æ´Ò±î.. »ý°¢ÇÕ´Ï´Ù¸¸ ÀÌ·± ÀÌÀ¯·Î 7-80³â´ë ³í¹®µéÀÌ ÇÏ´Â ¼Ò¸®¶ó¸é ¿äÁò¾²´Â ½Ã½ºÅÛ¿¡¼­´Â Á¶±Ý ´Ù¸¦Áöµµ ¸ð¸¦°Í °°³×¿ä.. Ä¿³Î Áö¿ø ¾È¹Þ´Â PTHREADã±âµµ Èûµé°í.. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (foo bar) ³¯ Â¥ (Date): 2002³â 10¿ù 13ÀÏ ÀÏ¿äÀÏ ¿ÀÈÄ 11½Ã 57ºÐ 47ÃÊ Á¦ ¸ñ(Title): lock benchmark 1) http://www.geocrawler.com/archives/3/417/2001/7/100/6291232/ atomic lock ¾øÀÌ ³ª¸ÓÁö¸¸ Å×½ºÆ®Çߴµ¥ ³ª¸ÓÁö³­ º¸Åë ¿¹»ó´ë·ÎÁö¸¸ fcntlÀÌ Á» ¸¹ÀÌ ´À¸®±º¿©. flockÀÌ ºü¸£´Ù°í ´©°¡ ±×·¨´ø°¡? semaphoreº¸´Ù´Â »¡¶ó¾ß ü¸éÀ» Á» ¼¼¿öÁÙÅÙµ¥.. 2) http://www.llnl.gov/CASC/mixed_models/presentations/sdsc_pthreads.pdf ÀÌ°Ç HP-UX¿¡¼­ pthread¿¡ ´ëÇÑ º¥Ä¡¸¶Å©. (lock¹æ¹ý°£ÀÇ ¼Óµµºñ±³´Â ¾Æ´Õ´Ï´Ù) 99³â ÀÚ·áÀ̱ä ÇÏÁö¸¸ ¼ýÀÚ°¡ Àç¹ÌÀÖ±º¿ä. Áß°£¿¡ mutexµµ ³ª¿É´Ï´Ù. sunÇÏ°í ºñ±³µµ ÀÖ±¸¿ä. 3) http://inf33-www.informatik.unibw-muenchen.de/research/milan/paper_milan.pdf Áö±Ý±îÁö ¾ê±â¿Í´Â º°·Î »ó°ü ¾øÁö¸¸ Linux¿¡¼­ ¾à°£ÀÇ benchmark Å×½ºÆ® °á°ú°¡ ÀÖ½À´Ï´Ù. ¼±Á¡Çü Ä¿³Î¿¡ ´ëÇÑ ¼³¸í°ú LinuxÀÇ Ä¿³Î Ư¼º ¾à°£. º¥Ä¡¸¶Å© ¾à°£ ±×¸®°í´Â ³ª¸ÓÁö´Â ±¤°í(¶ó´Â ´À³¦ÀÌ)³×¿ä :) ¾Æ~ Á¹·Á¼­ À̸¸ Àھ߰ڳ׿ä. 1¹ø¿¡¼­ atomic lock°ú pthread¿Í ºñ±³¸¦ ÇØÁáÀ¸¸é ´õ ÁÁ¾ÒÀ» °ÍÀ»... Ãü.. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (foo bar) ³¯ Â¥ (Date): 2002³â 10¿ù 14ÀÏ ¿ù¿äÀÏ ¿ÀÀü 12½Ã 29ºÐ 24ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? @¤¾¤¾ ÀÚ·Á°í Çߴµ¥ °è¼Ó Re:°¡... ÀÌ·¯´Ù °Ô½ÃÆÇ talkÀÌ µÇ°Ú³×¿ä :) @¾Ñ ¹ú½á ¼öÁ¤ÇØÁּ̱º¿©. °¨»çÇÕ´Ï´Ù. :) >ATOMIC LOCKÀº LOCKº¯¼ö µÎ°í POLLINGÇϱⶫ½Ã ¶ôÀÌ Ç®¸°ÈÄ ¹ÝÀÀ¼Óµµ°¡ °¡Àå >ºü¸¦¼ö¹Û¿¡ ¾ø½À´Ï´Ù. ¹®Á¦´Â Æú¸µÀ̱⶧¹®¿¡ LOCKº¯¼ö¿¡´ëÇؼ­´Â ºü¸¥ ¹ÝÀÀÀ» >º¸ÀÌÁö¸¸ ÀüüÀûÀÎ ½Ã½ºÅÛ¼º´ÉÀº ¶³¾î¶ß¸®ÁÒ.. ÀÌ°Ç spin lockÀ» ¸»¾¸ÇϽô°ÅÁÒ? atomic lockÀ» ¾´´Ù°í Çؼ­ Ç×»ó spinÀ» ½ÃÅ°¶ó´Â ¹ýÀº ¾øÀݽÀ´Ï±î? Ç×»ó ¾²³ª? o.O [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): Tony (Ôôà¹úõÖØ) ³¯ Â¥ (Date): 2002³â 10¿ù 14ÀÏ ¿ù¿äÀÏ ¿ÀÀü 10½Ã 11ºÐ 13ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? atomic lockÀ» ¾²¸é¼­ test and setÇϸ鼭 polling¾ÈÇÏ´Â ¹æ¹ý ÀÖ³ª¿ä? ¸¶¶¥ÇÑ ¹æ¹ýÀÌ ¸Ó¸´¼Ó¿¡¼­ »ý°¢ ¾È³ª´Âµ¥¿ä? Ȥ½Ã ¾Æ½Ã´ÂºÐ~~ [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): terzeron (microkid) ³¯ Â¥ (Date): 2002³â 10¿ù 14ÀÏ ¿ù¿äÀÏ ¿ÀÀü 10½Ã 33ºÐ 27ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? atomic lockÀÇ Á¤ÀÇ°¡ ¹ºÁö È®½ÇÄ¡ ¾ÊÁö¸¸ high-level lockÀÇ ±¸ÇöÀ» À§ÇÑ °¡Àå ÀÛÀº ´ÜÀ§ÀÇ µµ±¸°¡ µÇ´Â °Å¶ó¸é °¢°¢ÀÇ ¾ÆÅ°ÅØÃÄ°¡ Áö¿øÇÏ´Â ¾î¼Àºí¸® ¼öÁØÀÇ Äڵ尡 µÉ °ÍÀÌ°í, spin lockÀÌ testandsetÀ» ÀÌ¿ëÇÏ¿© while loopÀ¸·Î ¹­¾îÁØ atomic lockº¸´Ù ÇÑ ´Ü°è ³ôÀº ¼öÁØÀÇ lockÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù. PS x86¿¡¼­´Â testandsetÀÌ xchg(assembly)¸¦ ÀÌ¿ëÇؼ­ Áö¿øµÇ´Â °Í °°´õ±º¿ä. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (foo bar) ³¯ Â¥ (Date): 2002³â 10¿ù 14ÀÏ ¿ù¿äÀÏ ¿ÀÀü 10½Ã 36ºÐ 43ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? Èì..Á¦°¡ ¿ë¾î¸¦ È¥µ¿Çϴ°ǰ¡¿ä? ±×·²Áöµµ -.-a for( trycnt = 0; trycnt < 10 ; trycnt++) { for( i = 0; i < 200; i++) { if( trylock() == SUCCESS) return SUCCESS; } sleep minimal interval; } return FAIL; ¿¡Àü¿¡ spin lock thread¿¡¼­ Æۿ°ǵ¥.. Àü ´ÜÁö, À§¿¡ 200¹ø spinÀ» µ¹¸®Áö ¾Ê¾Æµµ µÇÁö ¾Ê°Ú³ª? ÇÏ´Â Àǹ̷ΠÇÑ ¸»ÀÔ´Ï´Ù. trylock()¸¸ µû·Î ¶¼¾î¼­ ¾²¸é (¸ð¾çÀº ¾î¶³Áö ¸ô¶óµµ) Å« ºÎÇÏ°¡ °É¸®´Â°Ç ¾Æ´ÏÁö ½Í¾î¼­¿ä. :) @¾Ñ ±×»õ terzeron´ÔÀÌ re¸¦ ´Ù¼Ì³×¿ä. Àü ¹Ù·Î ±×·± Àǹ̷Π¾´ ¸»ÀÌ°í atomic lockÀº testandset ¶Ç´Â testandset°ú spinlockÀ» ÁöĪÇÏ´Â Àǹ̷Π½è´ø °ÍÀÔ´Ï´Ù. @°£¸¸¿¡ Àç¹ÌÀÖ´Â threadÁÒ? :D [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): dalgong (´Þ°ø¾ÆÀú¾¾) ³¯ Â¥ (Date): 2002³â 10¿ù 14ÀÏ ¿ù¿äÀÏ ¿ÀÀü 10½Ã 45ºÐ 19ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? busy waitingÇÏ´Â ¹æ¹ýµµ ¹®Á¦ÀÇ ¼º°Ý¸¶´Ù ´Ù¸£°ÚÁö¸¸, multi-processorÀÎ °æ¿ì¿¡ context-switch¸¦ ÇÇÇÒ ¼ö ÀÖ´Â ¾ÆÁÖ È¿°úÀûÀÎ ¹æ¹ýÀÔ´Ï´Ù. IPCÀÇ ¼Ó¿¡ °üÇÑ °Å¶ó¸é SUN doors¿¡ °üÇÑ ¾ð±ÞÀÌ ¾ø±æ·¡ Àúµµ ²¸µì´Ï´Ù. ½ºÆ¼ºì½º Ã¥¿¡ º¸¸é ipc performanceºñ±³ÇÑ ÀÚ·á ÀÖ½À´Ï´Ù. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (foo bar) ³¯ Â¥ (Date): 2002³â 10¿ù 14ÀÏ ¿ù¿äÀÏ ¿ÀÀü 10½Ã 59ºÐ 14ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? ³×. SMPÀÇ CPU°£¿¡ ¾´´Ù°í µé¾ú°í(½è¾ú°í) ¸ð ÄÚµå º¸´Ï±î deviceµé³¢¸®µµ ¾²´õ±º¿ä. (º»·ÐÀº ÀÌ°Ô ¾Æ´Ï°í -.-a) SUN doors°¡ ¹º°¡¿ä? (±¸±Û¿¡¼­ ãÀ¸´Ï±î ÀÌ»óÇÑ ¹®Â¦°ú žçºû µîµî¿¡ ´ëÇÑ ¾ê±â¸¸ ³ª¿À³×¿ä -.-a) ±×¸®°í ½ºÆ¼ºì ¾ÆÀÚ¾¾ Ã¥¿¡ ¹¹¶ó ³ª¿ÍÀÖ´ÂÁö °£´ÜÇÏ°Ô ´©°¡Á» ¾Ë·ÁÁÖ¼¼¿ä Áý¿¡´Â ÇÑ 10³â Áö³­ Ã¥¸¸ ÀÖ°í ÁÖº¯¿¡ ½ºÆ¼ºì ¾ÆÀÚ¾¾ Ã¥À» °¡Áø »ç¶÷ÀÌ ¾ø´Â µ¿³×¿¡ ¿ÍÀ־ :( @¼öÁ¤ÀÔ´Ï´Ù. ÀÌ·± ¸µÅ©¸¦ ã¾Ò³×¿ä. :) Doors/Linux is an implementation of the Solaris Doors API on the Linux operating system. The Doors API provides a high-speed RPC mechanism which uses the UNIX notion of the filesystem as a universal namespace and has built-in support for multithreading. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): vinawara (¿ì»êÀå¼ö) ³¯ Â¥ (Date): 2002³â 10¿ù 15ÀÏ È­¿äÀÏ ¿ÀÀü 10½Ã 32ºÐ 43ÃÊ Á¦ ¸ñ(Title): Re: [q] IPC performance (socket)? Àúµµ doors·Î ³¢¾îµé±î ÇÏ´Ù°¡ lockingÂÊÀ¸·Î À̾߱Ⱑ Èê·¯°¡±â¿¡ ±×³É º¸°í¸¸ ÀÖ¾ú½ÀÁö¿ä. doors¶ó´Â°Ç local process°£ÀÇ function callÀÌ °¡´ÉÇÑ ¸ÅÄ¿´ÏÁòÁ¤µµ·Î ÀÌÇØÇÏ¸é µÇ°Ú±º¿ä. ( LPC Á¤µµ¸é µÉ·Á³ª ) named-stream(named-pipe ºñ½ÁÇÑ)¿¡ functionÀ» ¸ÊÇνÃÄѼ­ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ callÇÒ ¼ö ÀÖµµ·Ï Çϴ°ÍÀÌÁö¿ä. ¼º´ÉÀº ²Ï ¹ÏÀ»¸¸ÇÑ ¼öÁØÀ¸·Î ¾Ë°íÀÖ½À´Ï´Ù. Linux portÂÊ¿¡¼­ ½ÇÇèÇÑ µ¥ÀÌÅͷδ unix-domain socket, pipeµî°ú ºñ±³Çؼ­ Á¦ÀϳôÀº ¼º´ÉÀ» ³ªÅ¸³»¾ú´Ù´õ±º¿ä. ´ç¿¬È÷, solarisÀÇ applicationµéµµ door¸¦ ²Ï ¸¹ÀÌ ÀÌ¿ëÇÏ´Â°Í °°±¸¿ä. Á¦°¡ ÀÖ´Â ÆÀÀÇ ¾î¶²ºÐÀÌ signal/sharedmem¹æ½Ä¿¡¼­ signal loss°¡ ¹ß»ýÇØ ¹®Á¦°¡ ÀÖ´ø°ÍÀ» door¸¦ ½á¼­ ÇØ°á »ç·Ê(?)µµ ÀÖ½À´Ï´Ù. ( ½ºÆ¼ºì¾ÆÀú¾¾ÀÇ UNP 2ND Ed.ÀÇ Vol.2 IPC¿¡¼­µµ ÇÑéÅ͸¦ ÇÒ¾Ö¿¡ ¼³¸íÀÌ µÇ¾îÀÖ½À´Ï´Ù. º¸´Ù ÀÚ¼¼ÇÑ ¼³¸íÀº ¿©±æ., ȤÀº man door_create ¶ó°í Çϼŵµ :) ref. Door Linux port : http://www.rampant.org/doors Kernel 2.2±îÁö¸¸ Æ÷ÆÃÀÌ µÇ¾ú°í ±× ÀÌÈķδ ÇÁ·ÎÁ§Æ®°¡ ÁߴܵǾú½À´Ï´Ù. ´ëÃæÀÇ ¿¹Á¦´Â ¾Æ·¡¿Í °°½À´Ï´Ù. Server Side ---8<--- #include #include #define TEST_COOKIE ((void *)0xa4a4b5b5) #define TESTDOOR ".testdoor" void server_proc(void *cookie, char *argp, size_t arg_size, door_desc_t *dp, size_t n_desc) { door_cred_t cred; printf("hi dude\n"); : door_return((char *)"Hey man", strlen("Hey man"), NULL, 0); } main() { int door, fd; if ((fd = creat(TESTDOOR, 0600))<0) { perror("creat"); exit(1); } close(fd); if ((door = door_create(server_proc, (void *)TEST_COOKIE, 0))<0) { perror("door_create"); exit(1); } fdetach(TESTDOOR); if (fattach(door, TESTDOOR)<0) { perror("fattach"); exit(1); } printf("OK START Service\n"); for(;;) pause(); } client side ---8<--- #include #include #include #define TEST_COOKIE ((void *)0xa4a4b5b5) #define TESTDOOR ".testdoor" main() { door_arg_t args; door_info_t info; int fd; char res[255]; if ((fd = open(TESTDOOR, O_RDONLY))<0) { perror("open"); exit(1); } if (door_info(fd, &info)<0 ) { perror("door_info"); exit(1); } printf("fd = %d\n", fd); args.data_ptr = (char *) "HuHu Hi"; args.data_size = sizeof("HuHu Hi"); args.desc_ptr = NULL; args.desc_num = 0; args.rbuf = res; args.rsize = sizeof(res); if (door_call(fd, &args)<0) { perror("door_call"); } printf("args.rbuf = %s\n", args.rbuf);