[ NUMA ] ij½¬ ÀÏ°ü¼º (Cache Coherence) ¹®ÀÇ

   Á¶È¸ 4159   Ãßõ 0    

1-3. NUMA <- 발췌 from http://blog.naver.com/PostView.nhn?blogId=bomyzzang&logNo=220906611725

여러 프로세서가 동시에 동일한 데이터가 필요할 경우 메모리 뱅크들 사이로 데이터를 이동하기 때문에 성능이 떨어 질 수 있다. 그렇기 때문에 무조건적으로 효율이 좋은 것은 아니므로 프로세스가 로컬메모리를 사용하도록 하는게 최적화의 키 포인트이다. 그리고 CPU에 달려있는 작은 크기의 비공유 메모리(CPU캐시라 불리우는 것)가 있는데 기본적인 NUMA 형태는 프로그래밍 상으로 공유 메모리에 대해서 캐시 일관성(Cache Coherence)을 유지하기 어렵기 때문에 대부분의 NUMA 시스템은 ccNUMA(cache-coherence NUMA)형태로 하드웨어적으로 구현하여 제공하고 있다.


 NUMA 관련 시험 중 인데, 하기 내역이 저에겐 모호하게 느껴 져서요.

질문) 상기 내용에서 캐쉬 일관성의 쉬운 의미 및 NUMA 노드가 캐쉬 일관성 유지가 어려운 이유가 궁금합니다.


감사합니다.

ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
¹éµÎ¼º 2017-03
ij½Ã ÀÏ°ü¼º ¹× NUMA °ü·ÃÀº °¢°¢
https://ko.wikipedia.org/wiki/%EC%BA%90%EC%8B%9C_%EC%9D%BC%EA%B4%80%EC%84%B1
https://ko.wikipedia.org/wiki/%EB%B6%88%EA%B7%A0%EC%9D%BC_%EA%B8%B0%EC%96%B5_%EC%9E%A5%EC%B9%98_%EC%A0%91%EA%B7%BC
¸¦ º¸½Ã´Â°Ô ÁÁ°Ú³×¿ä.

¿äÁò ½Ã½ºÅÛÀÌ ´ÙÁß Core CPU°¡ ÀϹÝÀûÀÌ°í,
2-CPU (2-Way)ÀÌ»óÀÇ NUMA ½Ã½ºÅ۵鵵 ÀÏ¹Ý ÀûÀ̱⠶§¹®¿¡
¼­·Î ´Ù¸¥ Core¿¡¼­ µ¿ÀÛÁßÀÎ thread°£ °øÀ¯ ¸Þ¸ð¸®ÀÇ °ªÀ» ÀÏÄ¡½ÃÄÑ ÁÖ¾î¾ß ÇÏ´Â ¹®Á¦°¡ »ý±é´Ï´Ù.
ÀÌ°ÍÀÌ Ä³½Ã ÀÏ°ü¼ºÀÔ´Ï´Ù..
À§Å° ¹é°úÀÇ ³»¿ëó·³ core 1¿¡¼­ µ¿ÀÛÁßÀÎ thread°¡
ÇØ´ç core ·ÎÄà ij½ÃÀÎ L1 ij½ÃÀÇ °øÀ¯ º¯¼ö X¿¡ ´ëÇÑ °ªÀ» º¯°æÇÏ°í
µ¿½Ã¿¡ core2ÀÇ thread°¡ ÇØ´ç core L1 ij½Ã¿¡ ÀÖ´Â °°Àº °øÀ¯ º¯¼ö X¿¡ ´ëÇÑ º¯°æÀ» ½ÃµµÇÒ¶§,
°°Àº X°ª¿¡ ´ëÇØ ¼­·Î ´Ù¸¥ °ªÀÌ µÉ ¼ö ÀÖ´Â »óȲÀÌ ÈçÈ÷ ¹ß»ýÇÕ´Ï´Ù.
µû¶ó¼­ ¸ðµç ÄÚ¾îÀÇ L1 ij½Ã¿¡ °°Àº address¸¦ °®´Â °ª¿¡ ´ëÇÑ ÀÏ°ü¼ºÀ»
¾î¶»°Ô À¯ÁöÇØ ÁÙ°ÍÀ̳ÄÀÇ ¹®Á¦°¡ Cache Coherence ÀÔ´Ï´Ù.

Single CPUÀÎ °æ¿ìÀÇ Core°£ ¼Óµµ Â÷ÀÌ°¡ ¾ø´Â,
¹ö½º¸¦ »ç¿ëÇØ broadcast·Î ÀÏÄ¡ ½ÃÄÑÁÖ¸é µÇ¾î °£´ÜÇÏ°ÚÁö¸¸,
ij½Ã ÀÏ°ü¼ºÀ» Áö¿øÇÏÁö ¾Ê´Â NUMAÀÇ °æ¿ì ´Ù¸¥ CPU¸¦ °ÅÄ¡°Ô µÇ¸é,
·ÎÄÿ¡ ºñÇØ ½ÅÈ£¸¦ Àü´ÞÇϴµ¥ ¼Óµµ Â÷ÀÌ°¡ ¹ß»ýÇÏ¿©,
¼­·Î ´Ù¸¥ CPU¿¡¼­ µ¿½Ã¿¡ °°Àº ÁÖ¼Ò °ª¿¡ ´ëÇÑ º¯°æÀÌ
ÀÌ·ç¾î Áú¶§, ¼Óµµ Â÷ÀÌ·Î ÀÎÇØ ¹ß»ýÇÏ´Â Ãæµ¹¹®Á¦¸¦ CPU ¿ì¼±¼øÀ§ µîµîÀ» °í·ÁÇØ
°ü¸®ÇØÁÖ¾î¾ß ÇÑ´Ù´Â Á¡ ¶§¹®¿¡ ¾î·Æ´Ù´Â °ÍÀ¸·Î »ý°¢µË´Ï´Ù.

ÇÏÁö¸¸ ij½Ã ÀÏ°ü¼º ¸ðµå¸¦ ÇØÁöÇÏÁö ¾Ê´Â ÀÌ»ó
Á÷Á¢ ÇÁ·Î±×·¡¹Ö ÇÒÀÏÀº ¾øÀ¸´Ï,
½ÇÁ¦ º´·Ä ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â ÀÔÀå¿¡¼­´Â À§¿Í °°Àº ¹®Á¦·Î ¹ß»ýÇÒ ¼ö ÀÖ´Â,
thread ´ë±â½Ã°£¿¡ µû¸¥ ¼º´É ÀúÇϸ¦ °í·ÁÇØ 
µÇµµ·Ï ´ë±â ½Ã°£À» ÁÙÀÏ ¼ö ÀÖµµ·Ï,
°°Àº CPU ÁÖº¯ Äھ¼­ °°Àº µ¥ÀÌÅ͸¦ °øÀ¯ÇÏ´Â thread°¡ ¹èÄ¡µÇµµ·Ï ÇÏ´Â µîÀÇ,
core°ü¸®¸¦ ÇÏ´Â°Ô Áß¿äÇÕ´Ï´Ù.

NUMAÂÊÀº ÁÖº¯ I/O(PCI-e) µµ °°Àº ¹®Á¦°¡ ¹ß»ýÇϱ⠶§¹®¿¡, DMAµî°ú ÇÔ²²
¿ª½Ã thread ¹èÄ¡°¡ Áß¿äÇÕ´Ï´Ù.
À§¿¡¼­ ¸»ÇÑ cache coherency´Â °¢ CPUº° cacheµé »çÀÌÀÇ coherencyÀÎ °Í °°³×¿ä. µ¿ÀÏÇÑ memory¿¡ ´ëÇÑ cachelineÀÌ °¢ CPUº°·Î Á¸ÀçÇÑ´Ù°í ÇÒ¶§, ÇÑ CPU¿¡¼­ ¹ß»ýÇÑ write¿¡ ´ëÇØ ´Ù¸¥ CPUÀÇ cachelineÀÌ updateµÉ ¼ö Àִ°¡ ÇÏ´Â °Çµ¥¿ä. SMP ¶Ç´Â UMA¶ó°í ºÎ¸£´Â ¹æ½ÄÀº º¸Åë memory cross-bar¶ó°í ÇÏ´Â °øÅëµÈ Åë·Î¸¦ ÅëÇؼ­ memory¿¡ Á¢±ÙÇÕ´Ï´Ù. ±×·¡¼­ ¾î¶² CPUµç ¹Ù¶óº¸´Â memoryÀÇ view´Â µ¿ÀÏÇÏ°í, ÀÌ cross-bar »ó´Ü¿¡ À§Ä¡ÇÏ´Â unified cache¸¦ °æÀ¯Çؼ­ snoop controlÀ» Çϱ⵵ ¼ö¿ùÇÑ ±¸Á¶°¡ µË´Ï´Ù. NUMA´Â ÀÏ´Ü °¢ CPU°¡ °¢ÀÚÀÇ memory controller¿Í local memory¸¦ °¡Áö´Â ±¸Á¶ÀÔ´Ï´Ù. ¹°·Ð ´Ù¸¥ CPU°¡ °¡Áø remote memory¿¡µµ Á¢±ÙÀº °¡´ÉÇÏÁö¸¸ local memory ´ëºñ Á¢±Ù cost°¡ ³ô½À´Ï´Ù. ±âº»ÀûÀ¸·Î °¢ CPU ¶Ç´Â cluster°¡ µû·Î ³î±â ÁÁÀº ±¸Á¶À̱⠶§¹®¿¡, snoop control ÀÚü°¡ ºÒ°¡´ÉÇÑ °ÍÀº ¾Æ´ÏÁö¸¸ ¾Æ¹«·¡µµ costµµ ³ô°í UMA¿¡¼­Ã³·³ cross-bar¸¦ lockÇÑ »óÅ·Π¾î¶² atomic operationÀ» ÇÏ´Â µîÀÇ Ã³¸®´Â ¾î·Á¿î ±¸Á¶°¡ µË´Ï´Ù.
µÎ ºÐ ´äº¯ °¨»çÇÕ´Ï´Ù.
¼³¸íÀ» µè°í º¸´Ï, µ¿ÀÏ º¯¼öÀÇ °ª¿¡ CPUº°·Î ´Ù¸¥ °æ¿ì¿¡, ¾î¶»°Ô ÀÎÁö ¹× ÇØ°áÇÏ´ÂÁö ±Ã±ÝÇϳ׿ä
'´Ù¿îÈú'´ÔÀÇ ±ÛÀ» º¸´Ï, CPUº°·Î ÇØ´ç º¯¼ö °ªÀÌ º¯°æµÇ¾ú´ÂÁö °¨½Ã(SNOOP)ÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Â °Å °°±äÇѵ¥.


QnA
Á¦¸ñPage 1992/5686
2015-12   1513796   ¹é¸Þ°¡
2014-05   4977651   Á¤ÀºÁØ1
2020-07   3949   ±è»ó¼·
2023-08   1820   ÀçÁÖ´×
2016-02   19062   Ãֽÿµ
2017-01   4246   Áú¹®Çлý
2019-05   2644   ¿©ÁÖ³ó¹Î76
2016-02   4948   ³ë¾Æ
2017-01   4722   ¼ÛÁÖȯ
2019-05   2312   ¿å½ÉÀïe
2020-08   2828   ÇÁ¶û
2020-08   2470   GPGPU
2022-01   2474   ¹ÌÄ£°¨ÀÚ
2016-02   3589   ¾ûµ¥µÎ
2020-08   2456   ³ªÆÄÀÌ°­½ÂÈÆ
2010-06   13668   ÀçÈ«ÀÌ
2017-01   8862   Àü¼³¼ÓÀǹ̡¦
2013-06   6572   ¾Æ±â°ø·æ¼Â°
2014-11   21184   ¼­¿ï±èâÈñ
2023-09   2610   ´ëÆÐÁúÇϴ¡¦
2014-11   10045   ºÒ¹«°ñ
2016-02   7380   Ãֽÿµ