개요
멀티코어 시스템은 여러개의 homogeneous혹은 hetero한 코어들이 private 혹은 shared캐쉬를 통해서 하나의 CPU처럼 작동하는 시스템을 말한다. 일반적으로 각각의 코어는 L1, L2캐쉬를 할당받고 전체가 공유하는 LLC캐쉬를 가지게 된다. 추가적으로 각각의 코어는 DRAM의 데이터를 공유하며, 이는 memory controller을 통해서 접근하게 된다. 만약 NUMA환경에서 이러한 시스템이 작동하게 될 경우에는 모든 코어들이 서로 떨어져있는 메모리에 접근할 수 있다. 이러한 NUMA환경에서 local memory에 접근하는 것은 remote memory에 접근하는 것보다 빠른 Latency를 가진다. 또한 각각의 머신은 모든 메모리에 대해서 같은 coherent view를 제공하는데 이는 cache coherence protocol을 통해서 보장받는다. 이는 cache line (대략 64바이트)의 캐쉬라인을 일치시키는 것으로 이루어진다. NUMA 머신에서 캐쉬 coherence 를 유지하는 것은 inteconnection에 대한 통신을 요구하기 때문에 추가적인 비용이 든다.
문제점
Ordering in Concurrency
Concurrency시스템에서 Consistency를 맞추기 위해 Ordering을 맞추어야 한다. 이는 메모리 뿐만 아니라 저널링, 로깅과 같은 많은 부분에서 사용된다. 일반적인 시스템에서 이러한 Odering을 맞추기 위해서는 Atomic operation을 사용하게 된는데, Atomic Operation은 cache line coherent문제를 만들어 내기 때문에 다중 코어 환경에서 bottleneck이 된다. (cache line coherent protocol은 bottle neck이 된다.)
이를 해결하기 위해서 특수한 clock을 사용하거나, (Invariant clock (TSC CLOCK))혹은 Locking과 같은 방법을 사용하게 된다.