¸®´ª½º°¡ ¸ÖƼ ½º·¹µå¸¦ Áö¿øÇϳª¿ä? ¸¸¾à ³»°¡ µÎ°³ ÀÌ»óÀÇ ÇÁ·Î¼¼½º¸¦ ½ÇÇà ½ÃŲ´Ù¸é, ¸ðµç CPUµé¿¡ ºÐ»ê 󸮰¡ µÉ±î¿ä?
³×, ÇÁ·Î¼¼½º¿Í Ä¿³Î-½º·¹µåµéÀº ÇÁ·Î¼¼¼µé¿¡°Ô ºÐ»êµÉ°Í ÀÔ´Ï´Ù, ±×·¯³ª À¯Àú ½ºÆäÀ̽º ½º·¹µåµéÀº ±×·¸Áö ¾Ê½À´Ï´Ù.
¾î¶² ¾ÆÅ°ÅØóµé¿¡¼ SMP¸¦ Áö¿ø Çϳª¿ä?
SMP´Â Ä¿³Î 2.0 ÀÌ»ó ¿¡¼ ÀÎÅÚ MP1.1/1.4 ¸¦ Áö¿øÇÏ´Â hypersparc(SS20 ¶Ç´Â ±×¿Ü), ÀÎÅÚ 486, ÆæƼ¾ö ¶Ç´Â ±× À̻󿡼 ÀÛµ¿ÇÕ´Ï´Ù. Richard Jelinek°¡ µ¡ºÙÀÓ: 4 °³ÀÇ CPU ¿¡¼ Å×½ºÆ® µÇ¾ú°í, MP Ç¥ÁØ¿¡ µû¸£¸é ÀÌ·ÐÀûÀ¸·Î 16 CPU ±îÁö Áö¿øÇÒ¼ö ÀÖ½À´Ï´Ù.
¸®´ª½º Ä¿³Î 2.2.x À̻󿡼 UltraSparc, SparcServer, Alpha ¿Í PowerPC µîÀ» Áö¿øÇÕ´Ï´Ù.
MIPS, m68k ¿Í ARM Àº SMP¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. m68k ¿Í ARMÀº ¾Æ¸¶ ¿µ¿øÈ÷ Áö¿øÇÏÁö ¾ÊÀ»°ÍÀÔ´Ï´Ù.
Àú´Â MIPS-SMP ¹Ú½º°¡ »ý±â´Â µ¥·Î SMP Áö¿øÀ» À§ÇØ ÇØÅ·À» Çغ¸·Á°í ÇÕ´Ï´Ù.
¸®´ª½º SMP Ä¿³ÎÀº ¾î¶»°Ô ¸¸µå³ª¿ä?
¸¹Àº ¸®´ª½º ¹èÆ÷º»µéÀÌ SMP Ä¿³Î ÆÐÅ°Áö¸¦ Æ÷ÇÔÇÏ°í ÀÖÁö ¾Ê±â ¶§¹®¿¡ (¿ªÀÚÁÖ: »ç½Ç ¿äÁò ¹èÆ÷º»µéÀº ´ëºÎºÐ Æ÷ÇÔÇÏ°í ÀÖÁö¸¸,) ´ç½ÅÀÌ Á÷Á¢ ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ ¾ÆÁ÷±îÁö Ä¿³Î ÄÄÆÄÀÏÀ» Çغ»ÀûÀÌ ¾ø´Ù¸é ÀÌ°ÍÀº ÁÁÀº ÀÌÀ¯°¡ µÉ°ÍÀÔ´Ï´Ù. Ä¿³Î ÄÄÆÄÀÏ¿¡ ´ëÇÑ ¼³¸íÀº ÀÌ ¹®¼ÀÇ ¸ñÀû¿¡ ¹þ¾î³ª¹Ç·Î, ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº Linux Kernel Howto ¸¦ Âü°íÇϼ¼¿ä. (C. Polisher)
Ä¿³Î 2.0 ÀÌ»ó (2.1.132À» Á¦¿ÜÇÑ) ¿¡¼´Â Ä¿³ÎÀÇ ÁÖ Makefile (/usr/src/linux/Makefile)¿¡¼ SMP=1 ¶óÀÎÀÇ ÁÖ¼®À» Ç®¾îÁÖ¸é µË´Ï´Ù.
Ä¿³Î 2.2.x À̻󿡼´Â Processor type and features ---> [*] Symmetric multi-processing support "Symmetric multi-processing support"¸¦ yes ·Î ÇØÁÝ´Ï´Ù. (Michael Elizabeth Chastain).
±×¸®°í
Character devices ---> [*] Enhanced Real Time Clock Support
À§¿Í °°ÀÌ "RTC support" ¸¦ yes ·Î ÇØÁÝ´Ï´Ù. (Robert G. Brown). RTC Áö¿øÀº ¿ì¸®°¡ ¾Ë°í ÀÖ´Â ¹®Á¦ÀÎ SMP ½Ã½ºÅÛÀÇ ½Ã°£ÀÇ ´À·ÁÁüÀ» ÇØ°áÇÏÁö´Â ¾ÊÀ»°ÍÀÔ´Ï´Ù, ±×·¯³ª ºÎÆýà ½Ã°£À» ÀÐÀ»¶§ÀÇ Á¤ÁöÇö»óÀ» ¿¹¹æÇØ ÁÝ´Ï´Ù. ¶ÇÇÑ RTC ±â´ÉÀº ¸î¸î ¿À¸®Áö³¯ ÀÎÅÚ ¸ÞÀκ¸µå¿¡¼ µÎ¹ø° CPU¸¦ ÀνÄÇϴµ¥ ÇÊ¿äÇÕ´Ï´Ù (Richard Jelinek).
±×¸®°í
x86 Ä¿³Î¿¡¼´Â APM (advanced power management) ±â´ÉÀ» ³ÖÁö ¸¶½Ê½Ã¿ä! APM °ú SMP ´Â ȣȯÇÏÁö ¾Ê½À´Ï´Ù. ±×¸®°í ´ç½ÅÀÇ ½Ã½ºÅÛÀº ºÐ¸íÈ÷(ÃÖ¼ÒÇÑ ¾Æ¸¶µµ ;)) ºÎÆýÿ¡ ¹®Á¦¸¦ ÀÏÀ¸Å³ °ÍÀÔ´Ï´Ù (Jakob Oestergaard). 2.1.x ÀÌ»óÀÇ SMP Ä¿³Î¿¡¼´Â APM ±â´ÉÀº ²¨Áý´Ï´Ù. ±âº»ÀûÀ¸·Î APM Àº SMP ½Ã½ºÅÛ¿¡¼ ¹ÌÁ¤À̸ç, ¹«½¼ÀÏÀ̵çÁö ÀϾ ¼ö ÀÖ½À´Ï´Ù. (Alan Cox)
±×¸®°í
x86 Ä¿³ÎÀº "MTRR (Memory Type Range Register)" ±â´ÉÀ» Ä¿³Î¿¡ ³Ö½À´Ï´Ù. ÀÌ°ÍÀº ¸î¸î ¹ö±×°¡ ÀÖ´Â BIOS¿¡¼ µÎ¹ø° ÇÁ·Î¼¼¼ÀÇ Ä³½¬ ¸Þ¸ð¸®°¡ ÀÛµ¿ÇÏÁö ¾Ê´Â°ÍÀ» ÇØ°á ÇØ ÁÝ´Ï´Ù.
´ç½ÅÀº Ä¿³Î°ú ¸ðµç °ü·Ã ¸ðµâµéÀ» SMP ¸ðµå·Î ´Ù½Ã ÄÄÆÄÀÏ ÇؾßÇÕ´Ï´Ù. make modules °ú make modules_install À» ÀØÁö ¸¶½Ê½Ã¿ä (Alan Cox).
¸¸¾à ¸ðµâ ÀûÀç ¿À·ù°¡ »ý±ä´Ù¸é ´ç½ÅÀº ¾Æ¸¶ ¸ðµâµéÀ» ÄÄÆÄÀÏ ÇÏÁö ¾Ê¾Ò°Å³ª Àç ÀνºÅç ÇÏÁö ¾Ê¾ÒÀ» °ÍÀÔ´Ï´Ù. ¶ÇÇÑ, ¸î¸î 2.2.x ´ëÀÇ Ä¿³Î¿¡¼ SMP Ä¿³Î¿¡¼ ÀϹÝÄ¿³Î·ÎÀÇ Àç ÄÄÆÄÀϽà ¹®Á¦°¡ ÀÖ´Ù´Â º¸°í°¡ ÀÖ¾ú½À´Ï´Ù. ÀÌ°ÍÀ» ÇØ°áÇÏ·Á¸é .config ÆÄÀÏÀ» ÀúÀåÇØ(´Ù¸¥ °÷¿¡) ³õÀº ´ÙÀ½, make mrproper ÇÑÈÄ, ¹é¾÷ÇسõÀº .config ÆÄÀÏÀ» º¹»çÇÑÈÄ Ä¿³ÎÀ» ÀçÄÄÆÄÀÏ ÇÕ´Ï´Ù. (Wade Hampton). Ä¿³Î ÄÄÆÄÀÏÈÄ lilo ½ÇÇàÀ» ÀØÁö ¸¶½Ê½Ã¿ä.
¿ä¾à:
make config # ¶Ç´Â menuconfig ¶Ç´Â xconfig make dep make clean make bzImage # ¶Ç´Â ¿øÇÏ´Â °ÍÀ¸·Î(make zlilo,...) # Ä¿³Î À̹ÌÁö¸¦ º¹»çÇÑÈÄ(/boot/¿¡) lilo¸¦ ½ÇÇà make modules make modules_install |
ºñ SMP Ä¿³ÎÀ» ¾î¶»°Ô ¸¸µå³ª¿ä?
Ä¿³Î 2.0 ´ë¿¡¼´Â Makefile (/usr/src/linux/Makefile) ¿¡¼ SMP=1 ¶óÀÎÀ» ÁÖ¼® ó¸®ÇÕ´Ï´Ù.
2.2 ´ë¿¡¼´Â Ä¿³Î ¼³Á¤½Ã "Symmetric multi-processing support" ¿¡ no ·Î ´ë´äÇÏ¸é µË´Ï´Ù (Michael Elizabeth Chastain).
´ç½ÅÀº Ä¿³Î°ú °ü·Ã ¸ðµâ ¸ðµÎ¸¦ Àç ÄÄÆÄÀÏ, ÀνºÅç ÇؾßÇÕ´Ï´Ù. make modules ¿Í make modules_install ±×¸®°í lilo¸¦ ½ÇÇà ½ÃÅ°´Â °ÍÀ» ÀØÁö ¸¶½Ê½Ã¿ä.
SMP Ä¿³ÎÀÇ ÀÛµ¿ ¿©ºÎ´Â ¾î¶»°Ô È®ÀÎÇϳª¿ä?
cat /proc/cpuinfo
dual PentiumII ÀÇ ÀüÇüÀûÀÎ °á°ú:
processor : 0 cpu : 686 model : 3 vendor_id : GenuineIntel [...] bogomips : 267.06 processor : 1 cpu : 686 model : 3 vendor_id : GenuineIntel [...] bogomips : 267.06 |
¼¼¹ÐÇÑ ¶ôÅ·°ú ¸ÖƼ½º·¹µù »óÅ·ΠÀüȯµÇ´Â Ä¿³ÎÀÇ »óÅ´Â?
¸®´ª½º 2.2 Ä¿³ÎÀº ½Ã±×³Î ó¸®¿Í ÀÎÅÍ·´Æ®¿Í ¸î¸î I/O ÀÇ ¼¼¹ÐÇÑ ¶ô(lock)󸮰¡ µÇ¾îÀÖ´Ù. ³ª¸ÓÁö´Â õõÈ÷ À̽ĵǰí ÀÖ´Ù. ¸ðµç ½ºÄÉÁÙ¸µÀº SMP¿¡ ¾ÈÀüÇÏ´Ù.
2.3 (´ÙÀ½ ¹öÁ¯ÀÎ 2.4) Ä¿³ÎÀº ¾ÆÁÖ ¼¼¹ÐÇÑ ¶ôÅ· ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. 2.3 Ä¿³Î¿¡¼ Ä¿´Ù¶õ Ä¿³Î ¶ôÀÇ »ç¿ëÀº ±âº»ÀûÀ¸·Î »ç¶óÁö°í ´ëºÎºÐÀÇ ¸®´ª½º Ä¿³ÎÀÇ ÇϺΠ½Ã½ºÅÛµéÀº ÃæºÐÈ÷ ½º·¹µåÈ µÈ´Ù: ³×Æ®¿öÅ·, VFS, VM, IO, block/page ij½¬, ½ºÄÉÁÙ¸µ, ÀÎÅÍ·´Æ®, ½Ã±×³Î µîµî. (Ingo Molnar)
¸®´ª½º SMP °¡ ÇÁ·Î¼¼¼ÀÇ À¯»ç¼ºÀ» Áö¿øÇϳª¿ä?
¾Æ´Ï¿ä & ³×. ÇÁ·Î¼¼½ºµéÀ» ƯÁ¤ CPU À§¿¡¼ ½ÇÇàÇÏ°Ô ÇÏ´Â ±æÀº ¾ø½À´Ï´Ù. ±×·¯³ª ¸®´ª½º ½ºÄÉÁì·¯´Â °¢ °úÁ¤µéÀ» À§ÇØ ÇÁ·Î¼¼¼ ¼ºÇâÀ» °¡Áý´Ï´Ù. ±×°ÍÀº ÇÁ·Î¼¼½ºµéÀ» ƯÁ¤ CPUµé¿¡ ¿¬°á½ÃÅ°°Ô ÇÏ´Â °æÇâÀÌ ÀÖ½À´Ï´Ù.
³×. °ü·Ã »çÀÌÆ® PSET - Processor Sets for the Linux kernel: "ÀÌ ÇÁ·ÎÁ§Æ®ÀÇ ¸ñÀûÀº psetÀÇ »óÈ£ ȣȯ¼º°ú ±â´ÉÀ» ¸¸µé¾î ÁÝ´Ï´Ù. (SGI¿¡ ÀÇÇØ Á¤ÀÇµÈ - ºÎºÐÀûÀ¸·Î IRIX 6.4 Ä¿³Î¿¡¼ »èÁ¦µÈ). ÀÌ°ÍÀº »ç¿ëÀÚµéÀÌ Æ¯Á¤ ÇÁ·Î¼¼¼(µé)ÀÇ À§¿¡¼ ÇÁ·Î¼¼½ºµéÀ» µ¿ÀÛÇϵµ·Ï °áÁ¤ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. ±×¸®°í ½º·¹µåµéÀº ºÐ¸®µÈ ÇÁ·Î¼¼¼µé, ŸÀ̹Ö, ¾ÈÀü (root ¸¸ÀÇ CPU?) ¿¡¼ »ç¿ëµÉ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ¾Æ¸¶µµ ´õ ¸¹Àº °Íµéµµ."
ÀÌ°ÍÀº syscall sysmp()¿¡ ÁßÁ¡À» µÓ´Ï´Ù. ÀÌ ±â´ÉÀº ¾î´À ±â´ÉÀÌ ¿äûµÇ´Â°¡¿¡ µû¶ó ¸¹Àº ¸Å°³ º¯¼öµéÀÌ ÀÖ½À´Ï´Ù. ±â´ÉµéÀº ´ÙÀ½À» Æ÷ÇÔÇÕ´Ï´Ù.
ÇÁ·Î¼¼½º/½º·¹µå¸¦ ƯÁ¤ CPU¿¡ °íÁ¤Çϴ°Í
¸î°¡Áö ÇÁ·Î¼¼½ºµéÀ» ½ÇÇàÇÏ´Â CPUÀÇ ´É·ÂÀ» ÇÑÁ¤Çϴ°Í
ÁýÁߵǴ ½ÇÇà¿¡¼ CPU¸¦ ÇÑÁ¤ ½ÃÅ°´Â°Í (restricting a CPU from running at all)
¿À·ÎÁö ÇÑ°³ÀÇ ÇÁ·Î¼¼½º(ºÎ ÇÁ·Î¼¼½ºµéÀ» Æ÷ÇÔ)¸¦ ½ÇÇàÇϵµ·Ï Çϴ°Í
CPUÀÇ »óÅ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò´Â°Í
¹Ù¿îµå µÇ¾î ÀÖÀ»Áöµµ ¸ð¸£´Â ÇÁ·Î¼¼½ºµéÀÇ »ý¼º°ú Æı« (creating/destroying sets of processors, to which processes may be bound)
SMP ¹ö±×´Â ¾îµð¿¡ º¸°íÇØ¾ß Çϳª¿ä?
linux-smp@vger.rutgers.edu.
SMPÀÇ ¼º´ÉÀº ¾î¶²°¡¿ä?
¸¸¾à ´ç½ÅÀÌ SMP ½Ã½ºÅÛÀÇ ¼º´ÉÀ» ÃøÁ¤ÇÏ°í ½Í´Ù¸é Cameron MacKinnon¿¡ ÀÇÇØ ¸¸µé¾îÁø http://www.phy.duke.edu/brahma/benchmarks.smp¿¡¼ ¸î°¡Áö Å×½ºÆ®¸¦ Çغ¼¼ö ÀÖ½À´Ï´Ù.
³ª¿¡°Ô SMP°¡ Á¤¸» ÇÊ¿äÇÑ°¡¿ä?
¸¸¾à ´ç½ÅÀÌ ±×·¸°Ô ¹°¾îºÁ¾ß ÇÑ´Ù¸é ¾Æ¸¶µµ ¾Æ´Ò°Í ÀÔ´Ï´Ù. :) ÀϹÝÀûÀ¸·Î, ¸ÖƼ ÇÁ·Î¼¼¼ ½Ã½ºÅÛÀº ÇÑ°³ÀÇ ÇÁ·Î¼¼¼¸¦ °¡Áø ½Ã½ºÅÛ¿¡ ºñÇØ ´õ ³ºÀº ÆÛÆ÷¸Õ½º¸¦ º¸¿©ÁÝ´Ï´Ù. ±×·¯³ª ºÐ¸íÈ÷ ÆľÇÇØ¾ß ÇÒ°ÍÀº CPU ÀÇ ¼öÀÌ¿Ü¿¡ ¸¹Àº ´Ù¸¥ ¿äÀεéÀ» °í·ÁÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ÁÖ¾îÁø ½Ã½ºÅÛÀÇ ÇÁ·Î¼¼¼°¡ ´À¸° µð½ºÅ© µå¶óÀÌºê ¶§¹®¿¡ ½¬°í ÀÖ´Ù¸é, ÀÌ ½Ã½ºÅÛÀº "input/output bound"À̸ç, ÇÁ·Î¼¼¼ÀÇ Ãß°¡·Î ¾ò´Â ÀÌÀÍÀº ÀûÀ» °ÍÀÔ´Ï´Ù. ¸¸¾à ½Ã½ºÅÛÀÌ ¸¹Àº ÇÁ·Î¼¼½ºµéÀ» µ¿½Ã¿¡ ½ÇÇàÇÏ°í ÀÖ´Ù¸é ÇÁ·Î¼¼¼ÀÇ Ãß°¡·Î ¾ò´Â À̵æÀº ¸¹¾ÆÁý´Ï´Ù. º¹¼öÀÇ ÇÁ·Î¼¼¼µéÀÌ »ç¿ëµÉ¶§ SCSI µð½ºÅ© µå¶óÀ̺êµéÀº ¸Å¿ì È¿°úÀûÀϼö ÀÖ½À´Ï´Ù.(C. Polisher)
µÎ°³ÀÇ 300 MHz ÇÁ·Î¼¼¼¿Í ÇÑ°³ÀÇ 600 MHz ÇÁ·Î¼¼¼´Â °°Àº ´É·ÂÀ» ¼öÇàÇÏ´ÂÁö?
ÀÌ°ÍÀº ¼öÇàµÇ´Â ¾îÇø®ÄÉÀ̼ǿ¡ µû¶ó ´Ù¸¨´Ï´Ù. ±×·¯³ª ´ëºÎºÐÀÇ °æ¿ì´Â ¾Æ´Õ´Ï´Ù. SMP ´Â ´ÜÀÏ ÇÁ·Î¼¼¼¿¡ ºñÇØ ¾à°£ÀÇ ¿À¹öÇìµå¸¦ Ãß°¡ÇÕ´Ï´Ù. (Wade Hampton). :)
¾î¶»°Ô ÇÏ¸é ¿©·¯°³ÀÇ CPUÀÇ ¼º´ÉÀ» Ãâ·ÂÇØ º¼¼ö ÀÖ³ª¿ä?
Samuel S. ChessmanÀÇ ´öÅÃÀ¸·Î ¸î°¡Áö À¯¿ëÇÑ À¯Æ¿¸®Æ¼µéÀÌ ´ÙÀ½¿¡ ÀÖ½À´Ï´Ù:
http://www.cs.inf.ethz.ch/~rauch/procps.html
±Ùº»ÀûÀ¸·Î ÀÌ°ÍÀº procps v1.12.2 ÀÌ´Ù. ±×¸®°í SMP¸¦ À§ÇÑ ¾à°£ÀÇ ÆÐÄ¡µé.
2.2.x ´ë¸¦ À§ÇÑ ÆÐÄ¡´Â ÀÌ°÷¿¡ (Gregory R. Warnes) http://queenbee.fhcrc.org/~warnes/procps
xosview-1.5.1 ´Â SMP ¸¦ Áö¿øÇÕ´Ï´Ù. ±×¸®°í 2.1.85 ÀÌ»óÀÇ Ä¿³Î¿¡¼ /proc/stat ¿¡ cpuX Ç׸ñÀÌ ÀÖ´Â °æ¿ì.
xosview ÀÇ °ø½Ä »çÀÌÆ®´Â: http://lore.ece.utexas.edu/~bgrayson/xosview.html
Kumsup Lee ¿¡ ÀÇÇÑ 2.2.x Ä¿³Î ÆÐÄ¡µéÀÌ ÀÌ°÷¿¡ ÀÖ½À´Ï´Ù. http://www.ima.umn.edu/~klee/linux/xosview-1.6.1-5a1.tgz
ÀÌ¿Ü ¿©·¯°¡Áö ÆÐÄ¡µéÀÌ http://www-isia.cma.fr/~forissie/smp_kernel_patch/¿¡ ÀÖ½À´Ï´Ù.
´ç½ÅÀº xosview ·Î ÇÁ·Î¼¼½º ½ºÄÉÁ층À» Á¤È®ÇÏ°Ô ¸ð´ÏÅ͸µ ÇÒ¼ö´Â ¾ø½À´Ï´Ù. xosview ÀÚü°¡ ÇϳªÀÇ ÇÁ·Î¼¼½º À̸ç, ½ºÄÉÁ층¿¡ ¿µÇâÀ» ÁֹǷΠ(H. Peter Anvin).
Ä¿³Î ÄÄÆÄÀϽà 1°³ÀÇ ÀÌ»óÀÇ ÇÁ·Î¼¼½º¸¦ ½ÇÇà ½ÃÅ°·Á¸é?
´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù:
# make [modules|zImage|bzImages] MAKE="make -jX" X ´Â CPU ¼ýÀÚÀÔ´Ï´Ù. ÁÖÀÇ : ÀÌ°ÍÀº "make dep" ¿¡¼´Â Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. |
2.2 ´ë Ä¿³Î¿¡¼´Â /usr/src/linux/Documentation/smp.txt ¹®¼¸¦ Âü°íÇϼ¼¿ä.
º¹¼öÀÇ ÇÁ·Î¼¼¼µéÀ» »ç¿ëÇϱâ À§ÇÑ ÃæºÐÇÑ ¸Þ¸ð¸®¿Í ÀÔÃâ·Â ¼Óµµ(ÇÏµå µð½ºÅ©µîÀÇ) °¡ ¾Æ´Ï¶ó¸é ÄÄÆÄÀÏ°úÁ¤¿¡ ´õ Áö¿¬À» ÀÏÀ¸Å³¼ö ÀÖ½À´Ï´Ù. make MAKE="make -j 2" -j 2 ´Â ½ÇÁ¦·Î ´ÜÀÏ ÇÁ·Î¼¼¼¿¡¼µµ È¿°ú¸¦ º¼¼ö ÀÖ½À´Ï´Ù. (Ralf Bächle).
¿Ö time ¸í·É¾î°¡ ºÎÁ¤È®ÇÏ°Ô ÀÛµ¿ÇÏ´ÂÁö? (Joel Marchand)
2.x ´ëÀÇ Ä¿³Î¿¡¼ time ¸í·É¾îÀÇ °á°ú´Â ºÎÁ¤È®ÇÕ´Ï´Ù. À¯Àú¿Í ½Ã½ºÅÛÀÇ ÇÕÀº ¸Â½À´Ï´Ù¸¸, À¯Àú¿Í ½Ã½ºÅÛ »çÀÌ¿¡ spreading (¹èÄ¡? ¹ß»ý?)µÇ´Â ½Ã°£Àº Á¤È®ÇÏÁö ¾Ê½À´Ï´Ù.
´õ ÀÚ¼¼ÇÏ°Ô: ºÎÆ® CPU ÀÌ¿ÜÀÇ ÇÁ·Î¼¼¼µé¿¡ ÀÇÇØ »ç¿ëµÇ´Â ½Ã°£µéÀÌ ½Ã½ºÅÛÀÇ ½Ã°£°ú °°´Ù°í »ý°¢µÇ±â ¶§¹®ÀÌ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÇÁ·Î±×·¥ÀÇ ½Ã°£À» Àé´Ù¸é, »ç¿ëÀÚ ½Ã°£°ú ½Ã½ºÅÛÀÇ ½Ã°£À» ´õÇÑ´Ù¸é ±×°ÍÀº °ÅÀÇ Á¤È®ÇÒ °ÍÀÌ´Ù. (½Ã½ºÅÛ ½Ã°£À» °è»êÇÏ´Â ½Ã°£À» Á¦¿ÜÇÑ) (Jakob Østergaard).
ÀÌ ¹ö±×´Â 2.2 Ä¿³Î¿¡¼ ¼öÁ¤µÇ¾ú½À´Ï´Ù.
Jakob Østergaard ¿¡ ÀÇÇØ
SMP ¸®´ª½º¸¦ À§ÇÑ ´ÙÁß ½º·¹µå ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼½¼ÇÀÔ´Ï´Ù.
POSIX ½º·¹µå
PVM / MPI Message Passing Libraries
fork() -- ´ÙÁß ÇÁ·Î¼¼½º
fork() ¿Í PVM/MPI´Â ÀϹÝÀûÀ¸·Î ¸Þ¸ð¸®¸¦ °øÀ¯ÇÏÁö ¾Ê¾Æ, IPC ¶Ç´Â ¸Þ½Ã¡ API ¿¡ ÀÇÇØ ¼ÒÅëµÇ±âµµ Çϸç, ÀÌ°ÍÀº À̹øÀå¿¡¼ ´õÀÌ»ó ¼³¸íµÇÁö´Â ¾ÊÀ» °ÍÀ̸ç, À̰͵éÀº ´ÜÀÏ ÇÁ·Î¼¼¼¿Í Ŭ·¯½ºÅÍ¿¡¼µµ »ç¿ëµÇ´Â °ÍÀ̹ǷΠSMP ¿¡ ƯÁ¤µÇ¾î ÀÖÁöµµ ¾Ê½À´Ï´Ù.
¿À·ÎÁö POSIX ½º·¹µå¸¸ÀÌ ½Ã½ºÅÛ ÀÚ¿øÀ» °øÀ¯ÇÏ´Â °Í(ƯÈ÷ ¸Þ¸ð¸®)°ú °°Àº ´ÙÁß ½º·¹µå¸¦ Á¦°øÇÑ´Ù. ÀÌ°ÍÀº SMP ¸Ó½ÅÀ» Ưº°ÇÏ°Ô ÇÏ´Â °ÍÀ̸ç, ¸¹Àº ÇÁ·Î¼¼¼µéÀÌ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. SMP¿¡¼ ¾çÂÊ(¶Ç´Â ±×ÀÌ»ó)ÀÇ ÇÁ·Î¼¼¼¸¦ »ç¿ëÇϱâ À§Çؼ´Â Ä¿³Î-½º·¹µå-¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù. ÁÁÀº ¶óÀ̺귯¸®´Â LinuxThreads - Xavier Leroy¿¡ ÀÇÇØ ¸¸µé¾îÁø pthread ¶óÀ̺귯¸®ÀÌ´Ù. »õ·Î¿î ¸®´ª½º ¹èÆ÷º»µéÀº ÀÌ ¶óÀ̺귯¸®¸¦ ±âº»À¸·Î Æ÷ÇÔÇÏ°í ÀÖ´Ù. ±×·¯¹Ç·Î, ´ç½ÅÀº Ä¿³Î ½º·¹µå »ç¿ëÀ» À§ÇØ µû·Î ÆÐÅ°Áö¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
¾îÇø®ÄÉÀÌ¼Ç ¼öÁØ¿¡¼ Ä¿³Î-½º·¹µùÀ» »ç¿ëÇÏÁö ¾Ê´Â ½º·¹µåµé (±×¸®°í POSIX ½º·¹µåµé)ÀÇ ½ÇÇöÀÌ ÀÖ´Ù. ÀÌ ½º·¹µå ²Ù·¯¹ÌµéÀº ÇÑ°³ÀÇ °úÁ¤¿¡¼ ½º·¹µùÀ» À¯ÁöÇÑ´Ù. ±×·¯¹Ç·Î SMP¸¦ ÀÌ¿ëÇÏÁö ¸»¶ó. ±×·¯³ª ±×µéÀº ¸¹Àº Àû¿ë¿¡ ÁÁ°í, ÇÑ°³ÀÇ ÇÁ·Î¼¼¼ ½Ã½ºÅÛ¿¡ °üÇÑ Ä¿³Î-½º·¹µåµé º¸´Ù ½ÇÁ¦·Î ´õ ºü¸¥ °æÇâÀÌ ÀÖ´Ù.
´ÙÁß-½º·¹µùÀº Un*x ¼¼°è¿¡¼ ÀαⰡ ¾ø¾ú½À´Ï´Ù. ¸î°¡Áö ÀÌÀ¯·Î, º¹¼öÀÇ ÇÁ·Î¼¼½º ¶Ç´Â ½º·¹µå¸¦ ÇÊ¿ä·Î ÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ» À§ÇØ, ´ëºÎºÐÀº fork()¸¦ »ç¿ëÇÏ¿© ¾º¿©Á³½À´Ï´Ù. ±×·¯¹Ç·Î, ½º·¹µå »ç¿ë¿¡ Á¢±ÙÇÒ¶§, ¼·Î ȣȯµÇÁö ¾Ê´Â(thread-readyÇÏÁö ¾ÊÀº) ¶óÀ̺귯¸®, ÄÄÆÄÀÏ·¯ ±×¸®°í µð¹ö°ÅµîÀÌ ¹®Á¦°¡ µË´Ï´Ù. GNU/Linux ¶ÇÇÑ ¿¹¿Ü´Â ¾Æ´Õ´Ï´Ù. ´ÙÀ½ÀÇ ¸îÀå¿¡¼ ÇöÀç °¡´ÉÇÑ °Í°ú ±×·¸Áö ¾ÊÀº °ÍÀ» ¼³¸íÇÕ´Ï´Ù.
¿À·¡µÈ C ¶óÀ̺귯¸®´Â ½º·¹µå¿¡ ¾ÈÀüÇÏÁö ¾Ê½À´Ï´Ù. GNU LibC (glibc), ¶ÇÇÑ libc6·Î ¾Ë·ÁÁø ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â °ÍÀº ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ÀÌÀü ¹öÁ¯µéµµ ´ç¿¬È÷ »ç¿ë°¡´ÉÀº Çϳª, ´ç½ÅÀ» Á»´õ ±«·ÓÇô ½Ã½ºÅÛ ¾÷±×·¹À̵åÀÇ ¿øÀÎÀÌ µÉ°ÍÀÔ´Ï´Ù. ¾Æ¸¶µµ :)
¸¸¾à ÇÁ·Î±×·¥ÀÇ µð¹ö±ëÀ» À§ÇØ GDB ¸¦ »ç¿ëÇÏ°íÀÚ ÇÑ´Ù¸é ´ÙÀ½À» º¸½Ê½Ã¿ä.
GNU/Linux ¸¦ À§ÇÑ Ç³ºÎÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾î°¡ ÀÖ½À´Ï´Ù, ±×¸®°í ±×Áß¿¡ ´ëºÎºÐÀº ¾î¶»°Ô µç ½º·¹µå(½ÉÁö¾î Ada ¿Í ÀÚ¹Ù¿Í °°Àº ¾ð¾îµéµµ) ¸¦ »ç¿ëÇÒ¼ö ÀÖ½À´Ï´Ù.
ÀÌ Àå¿¡¼´Â C ¿Í C++ ¿¡ °üÇؼ¸¸ ±â¼úÇÒ°ÍÀÔ´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ ´Ù¸¥ ¾ð¾î·Î SMP ÇÁ·Î±×·¡¹ÖÀÇ °æÇèÀÌ ÀÖ´Ù¸é ¾Ë·ÁÁÖ¼¼¿ä.
GNU C ¿Í C++, EGCS C ¿Í C++ ÄÄÆÄÀÏ·¯µéÀº Ç¥ÁØÀÇ C ¶óÀ̺귯¸®¿¡¼ ½º·¹µå¸¦ Àß Áö¿øÇÑ´Ù. (glibc). ±×·¯³ª ¿©±â¿¡ ¾à°£ÀÇ À̽´µéÀÌ ÀÖ´Ù.
C ¿Í C++ ÀÇ ÄÄÆÄÀÏÁß, -D_REENTRANT ¸¦ ÄÄÆÄÀÏ·¯ Ä¿¸Çµå ¶óÀο¡¼ Á¤ÀÇÇÑ´Ù. ÀÌ°ÍÀº ¿¡·¯ ó¸® ±â´ÉÀ» À§ÇØ ÇÊ¿äÇÏ´Ù. (errno variable°ú °°Àº).
C++ ¸¦ »ç¿ëÇÒ¶§¿¡ ¸¸¾à µÎ°³ÀÇ ½º·¹µå°¡ µ¿½Ã¿¡ throw exceptions ÇÑ´Ù¸é, ÀÌ ÇÁ·Î±×·¥Àº segfault µÉ°ÍÀÔ´Ï´Ù. ±×¸®°í, ÄÄÆÄÀÏ·¯´Â ½º·¹µå-¾ÈÀü ÇÏÁö ¾ÊÀº Äڵ带 »ý¼ºÇÒ °ÍÀÔ´Ï´Ù. ȸÇÇ ¹æ¹ýÀº pthread_mutex_lock(&global_exception_lock) À» ¸ðµç constructor(s) Ŭ·¡½º throw()¿¡ ³Ö´Â´Ù. , ±×¸®°í »óÀÀÇÏ´Â pthread_mutex_unlock(...) ¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ°ÍÀº º¸±â ÁÁÁö´Â ¾ÊÀ¸³ª, ÀÛµ¿Àº ÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀº Markus Ferch¿¡ ÀÇÇØ Á¦½Ã µÇ¾ú½À´Ï´Ù.
GNU µð¹ö°Å GDB ¹öÁ¯ 4.18Àº ½º·¹µå¸¦ ¹Ù¸£°Ô Ãë±ÞÇÒ °ÍÀÔ´Ï´Ù. ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷º»µéÀÌ ÆÐÄ¡µÈ(thread-aware)ÇÑ gdb ¸¦ Á¦°øÇÕ´Ï´Ù.
´ÜÁö, ½º·¹µå¿Í ÀÏÇϱâ À§ÇØ glibc¸¦ ÆÐÄ¡ÇÏ´Â °ÍÀº ºÒÇÊ¿äÇÕ´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ ¼ÒÇÁÆ®¿þ¾î¸¦ µð¹ö±ë ÇÒ ÇÊ¿ä°¡ ¾ø´Ù¸é( °³¹ß ½Ã½ºÅÛÀ» Á¦¿ÜÇÑ, ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼´Â ±×·²°ÍÀÌ´Ù.) glibcÀÇ ÆÐÄ¡´Â ºÒÇÊ¿ä ÇÕ´Ï´Ù.
ÄÚ¾î ´ýÇÁ´Â º¹¼öÀÇ ½º·¹µåµé¿¡ ÀÇÇØ »ý±âÁö ¾Ê½À´Ï´Ù. ¾î¶»°Ôµç, ÄÚ¾î ´ýÇÁ´Â ÇÁ·Î±×·¥ Àüü°¡ ¾Æ´Ñ ÇöÀç ½ÇÇàÁßÀÎ ½º·¹µå¿¡ ºÙ¿©Áý´Ï´Ù. ±×·¯¹Ç·Î, ¹«¾ùÀ̵çÁö µð¹ö±ëÀ» ÇÒ¶§ µð¹ö°Å»ó¿¡¼ ½ÇÇà½ÃÅ°¼¼¿ä. Note that core-dumps are of no use when using multiple threads. Somehow, the core dump is attached to one of the currently running threads, and not to the program as a whole. Therefore, whenever you are debugging anything, run it from the debugger.
ÈùÆ®: ¸¸¾à ½º·¹µå°¡ 100% CPU timeÀ» Àâ¾Æ¸Ô°í ÀÖ´Ù¸é, ±× ÀÌÀ¯¸¦ ¾Ë¾Æ³¾¼ö ¾øÀ»°ÍÀÔ´Ï´Ù. ÀÌ °æ¿ì ÁÁÀº ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. : GDB »óÀÌ ¾Æ´Ï¶ó, ½©»ó¿¡¼ ¹Ù·Î ÇÁ·Î±×·¥À» ½ÇÇà ½Ãŵ´Ï´Ù. top À¸·Î ±× ÇÁ·Î±×·¥ÀÇ PID¸¦ ¾Ë¾Æ³À´Ï´Ù. ´ÙÀ½ GDB¸¦ ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÕ´Ï´Ù. gdb ÇÁ·Î±×·¥ pid. ÀÌ°ÍÀº GDB¸¦ ÁöÁ¤ÇÑ PID ÇÁ·Î¼¼½º¿¡ Àû¿ëÇÏ°Ô Çϸç, ½º·¹µå´Â ¸ØÃâ °Í ÀÔ´Ï´Ù. ÀÌÁ¦ ´ç½ÅÀº ±× ½º·¹µå¿¡ ÇØ´çÇÏ´Â GDB ¼¼¼Ç°ú bt¸¦ »ç¿ëÇÒ¼ö ÀÖÀ¸¸ç, ¹«¾ùÀÌ ÀϾ°í ÀÖ´ÂÁö ¾Ë¼ö ÀÖ½À´Ï´Ù.
ElectricFence: ÀÌ ¶óÀ̺귯¸®´Â ½º·¹µå¿¡¼ ¾ÈÀüÇÏÁö ¾Ê½À´Ï´Ù. ±×·¯³ª ÀÌ°Í¿¡ mutex lockÀ» »ðÀÔÇÔÀ¸·Î½á SMP ȯ°æ¿¡¼ÀÇ »ç¿ëÀÌ °¡´ÉÇØ Áý´Ï´Ù.
º´·Ä ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ´õ ¸¹Àº Á¤º¸¸¦ ¾îµð¼ ãÀ»¼ö ÀÖ³ª¿ä?
¸¹Àº ¾µ¸ðÀÖ´Â Á¤º¸¸¦ ¿©±â¼ ãÀ»¼ö ÀÖ½À´Ï´Ù. ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä ó¸®
¶ÇÇÑ ¸®´ª½º ½º·¹µå FAQ
½º·¹µåÈ ÇÁ·Î±×·¥°ú ¶óÀ̺귯¸®µéÀº ¾îµð¿¡?
´ÙÀ½À» º¸¼¼¿ä: ¸®´ª½º ¸ÖƼ ½º·¹µå ÇÁ·Î±×·¥ (Àú´Â ÇÏÀÌÆÛ ¸µÅ©¸¦ ÁÁ¾ÆÇÕ´Ï´Ù ±×°Å ¾Æ¼¼¿ä? ;))
Âü°í°¡ µÉ ¶óÀ̺귯¸®µé:
David Buccarelli ¿Í Andreas Schiffler ±×¸®°í Emil BriggsÀÇ ´öÅà À¸·Î ´ÙÁß ½º·¹µå ¹öÁ¯(¸î¸î OpenGL º¥Ä¡¸¶Å©¿¡ ÀÇÇϸé 5-30% ÀÇ ¼Óµµ Áõ°¡¸¦ Á¦°øÇÏ´Â ¹öÁ¯ÀÌ ÀÖ½À´Ï´Ù. [1998-05-11]). ´ÙÁß ½º·¹µå´Â ÇöÀç ½ÇÇèÀûÀÎ ¿É¼ÇÀ¸·Î¼ ¸Þ»ç ¶óÀ̺귯¸®¿¡ Æ÷ÇÔ µÇ¾ú½À´Ï´Ù. ´õ ÀÚ¼¼ÇÑ °ÍÀº Mesa ¶óÀ̺귯¸®À» Âü°íÇϼ¼¿ä.
ÆæƼ¾ö ÇÁ·Î ÃÖÀûÈ BLAS ±×¸®°í ÀÎÅÚ ¸®´ª½º¸¦ À§ÇÑ FFTs
¸ÖƼ ½º·¹µå BLAS ´Â Áö±ÝÀº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù¸¸, ´ÙÁß ÇÁ·Î¼¼½º ¶óÀ̺귯¸®´Â 1998-05-27 ¿¡ ¼³°è µÇ¾ú½À´Ï´Ù. Blas News.
Emil Briggs (´ÙÁß ½º·¹µå ¸Þ»ç¸¦ ¸¸µé°í ÀÖ´Â »ç¶÷Áß ÇϳªÀÎ) ¿¡ ÀÇÇØ ´ÙÁß ½º·¹µå GIMP Ç÷¯±×ÀεéÀÌ ÀÖ½À´Ï´Ù. http://nemo.physics.ncsu.edu/~briggs/gimp/index.html