CPU는 프로세스에서 처리를 요청하는 연산을 수행해주는 파트입니다.
컴퓨터는 프로세스가 처리를 요청하는 경우 CPU의 Schedule에 해당 요청을 올리며 Memory에 필요한 데이터를 적제합니다.
해당 Processing에 대해 처리할 순서가 된경우 Memory에서 해당 데이터를 Cache에 올려 처리 후 다시 Memory에 결과값을 적재하여 요청한 결과를 반환하는 것이 폰 노이만 구조에서의 처리 방식입니다.
기본적으로 CPU는 다음과 같은 4단계를 통해 연산을 수행합니다.
1) Fetch : 사용가능한 CPU에서 처리할 수 있도록 데이터를 Main Memory에서 가져옵니다.
2) Decode : 데이터를 CPU가 처리할 수 있는 언어로 변환(이진코드)
3) Execute : 개개의 Core에서 각 명령을 수행한다.
4) Store : 결과 값을 Main Memory에 저장한다.
[그림 1] CPU 처리 과정
현대의 컴퓨터 아키에는 3가지 중요한 요소가 있다.
CPU, Memory, Disk 이다.
이 3가지 요소는 왼쪽으로 갈수록 단위 용량당 가격이 비싸며 처리속도가 빠르다.
이러한 개념때문에 아키의 가장 중요한 요소는 3가지 자원을 어떻게 효율적으로 사용하게 만드냐이다.
해당 내용은 컴퓨터 구조 책에 많은 내용을 가지고 있으므로 해당 내용 참고하기 바란다.
Processor Speed
Processor Speed는 일반적인 CPU 스피드를 말한다.
예를 들어 Core2 Duo 3.5Ghz CPU의 경우 3.5Ghz의 속도를 낼 수 있으며 Dual Core Cpu임을 나타낸다.
하지만, 여기서 단순한 3.5Ghz의 숫자를 맹신하면 안된다. 2.4Ghz의 경우에도 CPU의 기타 다른 요소들이 어떻게 구성되어 있는지에 따라 3.5Ghz보다 빠를 수 있기 때문이다.
가장 정확한 비교는 Benchmark 결과를 비교하기 바란다.(단적인 예로 tpmc가 있다.)
예를 들어 Core2 Duo 3.5Ghz CPU의 경우 3.5Ghz의 속도를 낼 수 있으며 Dual Core Cpu임을 나타낸다.
하지만, 여기서 단순한 3.5Ghz의 숫자를 맹신하면 안된다. 2.4Ghz의 경우에도 CPU의 기타 다른 요소들이 어떻게 구성되어 있는지에 따라 3.5Ghz보다 빠를 수 있기 때문이다.
가장 정확한 비교는 Benchmark 결과를 비교하기 바란다.(단적인 예로 tpmc가 있다.)
Hyper-Threading
하나의 Processor가 2개의 thread를 처리할 수 있음을 나타낸다.
이것은 Intel Architecture이며 실제적으로 1.3배의 속도의 이익을 얻을 수 있다.
하지만 실제 하드웨어 Processor는 한개이며 한개인 Processor를 2개의 thread로 처리하기 때문에 항상 이득을 주는 것은 아니다.
MS Sql Server의 경우 OLTP Type의 처리는 해당 기능을 enable하며 DSS Tye의 처리는 해당 기능을 Disable하는 것을 추천한다.
이것은 Intel Architecture이며 실제적으로 1.3배의 속도의 이익을 얻을 수 있다.
하지만 실제 하드웨어 Processor는 한개이며 한개인 Processor를 2개의 thread로 처리하기 때문에 항상 이득을 주는 것은 아니다.
MS Sql Server의 경우 OLTP Type의 처리는 해당 기능을 enable하며 DSS Tye의 처리는 해당 기능을 Disable하는 것을 추천한다.
License
Sql Server의 License 정책은 소켓 단위다.
즉 물리적 CPU 갯수 Base이다.(Core나 Thread 단위가 아니다.)
Cache
현대의 CPU는 처리속도가 빠르므로 CPU와 Main Memory 사이에 Cache라는 개념을 두어 전체적인 속도처리를 높히고 있다.
CPU - Cache(L1, L2, L3) - Main Memory
위와 같이 구조되어 있으며 Cache는 CPU에 포함되어져 있다.
일반적으로 컴퓨터를 살때 L2 Cache와 같은 개념이 포함되어 있는 것을 확인할 수 있다.
같은 CPU Spec인 경우 Cache가 처리 성능을 좌우하게 된다.
그러므로 Cache는 크면 클 수록 좋다.
Sql Server에서는 실행 계획을 어떻게 구성하는지가 중요하다.
Cache에서 해당 내용을 불러오는 경우 Main Memory에서 데이터를 가지고 오지 않아도 되기 때문에 더더욱 빠른 성능을 낼 수 있기 때문이다.
Multi-Core Processor
Socket - 물리적으로 CPU를 설치할 수 있는 것을 의미한다.
Core - 실제적으로 명령을 수행하는 Execution Unit을 의미한다.
Thread - 실제적으로 Execution Unit이 아닌 해당 Unit을 나누어 사용하는 개념을 의미한다.
하나의 Thread가 처리를 진행하는 중에, 레지스터와 파이프 라인등에서는 반드시 사용하지 않는 시간이 생긴다. 기존에는 이러한 미사용 시간은 무용하게 방치 되었으나, 이러한 리소스를 모아서 하나의 프로세서로 보이게 하여 별개의 Thread 처리를 진행시키는 것이 Hyper-Threading이다
System Architecture
해당 Architecture는 SMP와 NUMA로 나뉘며 아래 각각에 대한 설명을 두었다.