1. CPU
CPU(Central Processing Unit)는 컴퓨터의 핵심 처리 장치입니다. 우리 몸의 두뇌와 같이 컴퓨터에서 실행 중인 프로그램들을 관리하고, 데이터를 RAM이나 디스크로 저장하는 역할을 수행합니다.
CPU의 주요 기능은 다음과 같습니다:
- 연산: 더하기 빼기와 같은 산술 연산과 논리 연산 수행.
- 제어: 명령어를 해석하고 프로그램의 흐름을 제어하며, 다른 하드웨어 장치와의 통신 관리.
- 명령 실행: 메모리에서 명령어를 가져와서 그것을 실행하고, 그 결과를 다시 메모리나 장치로 전송.
CPU의 성능은 클럭 속도와 코어 수에 따라 결정됩니다.
1.1 Clock
CPU의 모든 명령어는 내부의 특정 주파수에 따라 동작하게 되는데, 이러한 전기 신호를 클럭(Clock) 신호라고 합니다. 클럭 신호는 클럭 사이클(Clock Cycle)이라는 일정한 주기를 가지고 전압이 높아졌다가 낮아지기를 반복하면서 해당 주기 동안 명령어를 처리하게 됩니다. 클럭 속도는 보통 GHz(기가헤르츠) 단위로 표시되며, 만약 클럭 수가 1GHz이면 초당 10억 번의 클럭 사이클을 수행할 수 있다는 의미입니다. 이러한 클럭 속도가 빠를수록 더 많은 명령을 처리할 수 있게 됩니다.
1.2 Core
코어(Core)는 CPU 내에서 실제로 명령을 처리하는 독립적인 처리 장치입니다. 보통 컴퓨터 사양을 설명할 때 4세대 CPU 4코어 혹은 8코어 이런 식으로 말하는데 여기서 말하는 ‘코어’도 같은 의미입니다. 과거에는 코어 하나로만 이루어진 싱글코어 CPU가 대다수였지만, 최근들어 여러 개의 코어를 갖춘 멀티코어 구조로 발전하였습니다. 현재는 클럭의 속도를 높이는 데 한계가 있어서 멀티코어 구조로 병렬성을 높이는 방식으로 발전하고 있습니다.
CPU 코어가 많을수록 각 작업을 별도의 코어에 할당할 수 있어서 각 작업이 별도 성능 저하 없이 실행할 수 있습니다. 최근 고성능 애플리케이션은 멀티코어를 활용하여 작업을 분할하고 동시에 실행하는 멀티스레딩 방식으로 작동하기 때문에 여러 코어에 나누어 처리한다면 작업이 더 빨리 완료될 수 있습니다.
2. vCPU
vCPU란 Virtual Central Processing Unit의 줄임말입니다. CPU 앞에 ‘virtual’이라는 단어에서 볼 수 있듯이 가상화된 CPU를 의미합니다. 즉, 물리적 CPU 자원을 가상화하여 여러 가상 머신이 동일한 물리적 서버에서 동작할 수 있도록 해줍니다.
vCPU는 실제 물리적 CPU의 코어와 논리적 프로세서를 가상 머신에 할당하여 각 가상 머신이 자체적인 CPU 자원을 가지고 있는 것처럼 작동합니다. 예를 들어 코어 4개를 가진 CPU 자원을 2개씩 나누어 8개의 vCPU로 구성할 수 있습니다. AWS, GCP와 같은 일반적인 클라우드 서비스나 가상화 플랫폼에서도 하이퍼스레딩 기술을 도입하여 하나의 CPU 코어를 최대 2개의 vCPU로 나누어 할당하고 있습니다.
이론적으로 3개 이상의 vCPU로 나누는 건 가능하지만, vCPU끼리 같은 물리적 CPU 자원을 공유하고 있기 때문에 여러 가상 머신이 동시에 높은 부하가 걸리게 되면 성능 저하가 발생할 수 있습니다. 고도의 가상화된 환경(예를 들면 각 vCPU가 최대한 효율적으로 리소스를 사용할 수 있도록 관리하는 소프트웨어가 존재하는 경우)에서는 코어당 3개 이상의 vCPU를 할당하는 경우도 있습니다. 다만, 어쨌든 물리적인 코어는 하나이기 때문에 제한된 리소스 내에서 효율적으로 배분해야 합니다.
2.1 Commands
리눅스 환경인 경우 lscpu
명령어로 현재 CPU의 사양을 확인할 수 있습니다.
$> lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2 # vCPU 개수
On-line CPU(s) list: 0,1
Thread(s) per core: 2 # 코어당 스레드 개수
Core(s) per socket: 1 # CPU 코어 개수
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
Stepping: 4
CPU MHz: 3099.894
BogoMIPS: 5000.00
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 33792K
NUMA node0 CPU(s): 0,1
Core(s) per socket
은 물리적 CPU 코어 개수를 의미합니다.
Thread(s) per core
값은 하나의 코어당 몇 개의 스레드가 작동하는지를 나타냅니다.
하이퍼스레딩이 활성화되어 있으면 값이 2로 각 물리적 코어가 두 개의 논리적 프로세서로 작동한다는 의미입니다.
혹은 /proc/cpuinfo
정보를 통해 확인할 수도 있습니다.
$> cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
...
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
...
processor
항목이 여러 개 나오는 것은 2개의 논리 프로세서를 가지고 있기 때문입니다.
$> cat /proc/cpuinfo | grep "cpu cores"
cpu cores : 1
cpu cores : 1
$> cat /proc/cpuinfo | grep "processor" | wc -l
2
위 내용을 통해 1개의 물리 CPU 코어와 2개의 논리 프로세서(vCPU) 개수를 확인할 수 있습니다.
References