깨알지식 - 개발

Physical CPU와 Logical CPU의 차이 (processor, cpu, thread 개념)

quokkalover 2021. 9. 29. 18:35

운영체제나, 멀티 스레딩 등 개발에 대하 공부를 하다보면 Physical CPU와 Logical CPU에 대한 개념이 헷갈릴 때가 많다.

최대한 예제들을 첨부해서 설명할 예정이다.

 

Term 정의

CPU는 꽤나 모호하게 쓰이는 단어 중 하나다.

 

Processor, Core, hardware thread 등 글들을 읽다보면 다양한 term을 통칭하듯이 쓰이는 경우가 많다.

하지만 일반적으로 Core가 CPU라는 단어에 가장 일치하는 개념이라고 할 수 있다.

단어 정의를 찾아봐도, 멀티스레딩이나 고루틴 등의 개념을 이해할 때, CPU의 구조와 주요 term에 대한 이해가 필요할 때가 많다. 따라서 본 글에서는
해당 용어들을 디테일하게 정리해보겠다.

  • Processor : 소켓에 장착되는 물리적인 chip을 읨한다. Processors에는 다수의 CoreHardware thread가 존재한다.
  • Core : 멀티코어 프로세서의 독립적인 CPU 인스턴스다. procesor를 scale하기 위해 코어를 늘리는 것을 chip-level multi-processing이라고 한다.
  • Hardware Thread : 한 개의 코어 내에서 multiple thread를 동시에 실행가능한 CPU 아키텍쳐에서 각 thread는 독립적인 CPU instance로 기능한다. 이러한 scaling approach를 multithreading이라고 한다.

 

Physical CPU vs Logical CPU

즉, 그림을 통해서 Physical CPU와 Logical CPU의 차이를 구분할 수 있다.

 

Physical CPU는 실제 프로세서 칩에 있는 Physical Core를 의미한다. 멀티스레딩이 enable돼있는지 여부와 관계없이 Processor의 Physical CPU 갯수에는 영향이 없다. 위 그림을 보면 한 개의 프로세서에 4개의 Physical CPU가 존재한다.

 

반대로 Logical CPU는 각 Core가 동시에 몇 개의 작업을 할 수 있는가와 관련이 있다. Core가 동시에 다수의 작업을 하기 위해서는 hyperthreading을 enable해야 한다. 각각의 physical core는 다수의 logical core로 나누는 것이다. 위 그림을 보면 hyperthreading이 enable된다면 4개의 physical core가 있더라도 각 core마다 2개의 thread가 존재하기 때문에, 운영체제에서는 8개의 logical cpu가 있는 것으로 인지한다. 

 

즉 이걸 숫자로 정리해서 보면

1 Processor, 4 Physical core, 8 Logical core가 있는 것이다. 이를 다르게 표현하면 1P4C - with 2 threads per core 라고 할 수 있다. 

 

리눅스 서버 예시

리눅스 서버에서 lscpu 명령어를 통해 한번 조회해보자

위처럼 조회를 햇을 때 1P2C - with 2 threads per core and 4 logical CPU가 있는 것을 확인할 수 있다.

어떻게 확인했냐면 

CPU socket : 1 -> 1 Processor

Cores per socket : 2 --> 2 Cores

Thread per core : 2 --> 2 Threads

CPU : 4 -> 4 logical CPUs in total

 

4 Logical CPUs  = 2 Core * 2 Thread

 

위와 같이 이해하면 되는 것이다.

 

다른 프로세서를 탑재한 서버를 하나더 조회해보자

위와 같은 경우 2개의 프로세서가 탑재된 서버인데, 

[2P8C - with 2 threads per core, 16 Logical CPUs]인 것을 확인할 수 있다.

 

이것도 자세히 보면

Sockets : 2 --> 2 Processors

Cores per socket : 4 --> 4 Cores per processor (2*4 = Total 8core)

Threads per core : 2 --> 2 Threads

 

CPUs : 16 --> 16 Logical CPUs

 - 2 Processors X 4 Cores/processor X 2 Threads/core

 

 

 

참고 자료:

https://www.linkedin.com/pulse/understanding-physical-logical-cpus-akshay-deshpande