본문 바로가기

전공공부

vCPU 동작 원리

운영체제와 시스템 아키텍처를 공부하다 보면 하드웨어 자원의 효율적 분배라는 문에 직면하게 된다. 최근 클라우드 컴퓨팅과 컨테이너 기술을 공부하면서, 물리 하드웨어 하나가 어떻게 수십 개의 독립된 인스턴스를 안정적으로 구동하는 방법이 궁금해졌다. 그 중심에 있는 vCPU의 개념과 동작 원리를 정리해보았다.

1. vCPU의 정의와 등장 배경

vCPU는 가상 머신(VM) 내에서 할당받는 논리적인 프로세싱 단위를 의미한다. 과거에는 하나의 OS가 하나의 물리 하드웨어를 점유하는 것이 당연했으나, 이는 하드웨어 자원의 유휴 시간을 발생시켜 효율성을 저하시켰다. 이러한 낭비를 줄이고 하드웨어 추상화를 통해 유연한 인프라를 구축하기 위해 하이퍼바이저 기반의 가상화 기술이 등장하게 되었다.

2. CPU와 vCPU의 차이점

https://virtualundercity.blogspot.com/2019/12/virtualization-tip1-relation-between.html

구분  physical CPU (pCPU) virtual CPU (vCPU)
실체 하드웨어 칩 소프트웨어적 논리 단위
할당 방식 하드웨어 소켓 및 코어 단위 하이퍼바이저에 의한 시분할 할당
확장성 물리적인 부품 교체 및 추가 필요 설정 변경만으로 즉시 추가 가능
자원 점유 하나의 OS가 독점적으로 사용 여러 VM이 물리 코어를 공유 (오버커밋 가능)
성능 오버헤드가 없어 성능 손실 X 가상화 계층으로 인한 미세한 성능 손실 O
관리 주체 메인보드 및 운영체제 커널 하이퍼바이저 (ex. KVM)
  • 물리적 실체: pCPU는 메인보드 소켓에 장착된 실제 실리콘 칩이며, vCPU는 소프트웨어로 구현된 논리적 시뮬레이션이다.
  • 자원 점유 방식: pCPU는 특정 OS에 종속되어 명령어를 처리하지만, vCPU는 하이퍼바이저의 스케줄링에 따라 pCPU의 타임 슬롯을 분할 점유한다.
  • 확장성: 물리 CPU는 추가를 위해 하드웨어 설치가 필요하나, vCPU는 설정 변경만으로 즉시 할당량을 조절할 수 있다.

3. vCPU의 기반: 하이퍼스레딩(Hyper-Threading)의 역할

vCPU를 깊이 이해하기 위해서는 물리 CPU의 하이퍼스레딩 기술을 먼저 짚고 넘어가야 한다. 하이퍼스레딩은 하나의 물리 코어를 두 개의 논리 코어로 인식하게 하여 연산 효율을 높이는 기술이다.

  • Core와 Thread 매핑: 일반적으로 클라우드 환경에서 1개의 vCPU는 pCPU의 1개 Thread에 매핑된다. 즉, 2 Core 4 Thread CPU가 있다면 이론적으로 4개의 vCPU를 성능 저하를 최소화하며 생성할 수 있다.
  • 효율성 극대화: 하이퍼스레딩을 통해 물리 코어의 파이프라인 유휴 시간을 줄임으로써, vCPU는 더 밀도 높은 연산 처리가 가능해진다. 우리가 EC2에서 보는 vCPU 개수는 대부분 이 논리 Thread 개수를 의미한다.

4. vCPU의 동작 및 스케줄링 원리

https://www.l4ka.org/77.php

vCPU의 핵심은 하이퍼바이저가 물리 자원을 Time-sharing하는 방식에 있다. 위 이미지의 Virtual Machine Monitor(VMM)이 하이퍼바이저이다. VMM의 스케줄러는 각 VM의 vCPU 요청을 pCPU에 동적으로 매핑하고, 매우 빠르게 컨텍스트 스위칭함으로써 여러 VM이 동시에 작동하는 것처럼 보이게 한다.

  • 매핑 메커니즘: 하이퍼바이저는 각 VM의 vCPU를 물리 CPU의 코어 또는 하이퍼스레드에 매핑한다. 이때 1개의 물리 코어에 여러 개의 vCPU를 할당하는 오버커밋(Overcommit)이 가능하다.
  • 스케줄링(Time-sharing): 하이퍼바이저의 CPU 스케줄러는 짧은 시간 단위로 vCPU를 번갈아 실행한다. 이는 운영체제의 프로세스 스케줄링과 유사하지만, 하드웨어 레벨에 더 근접한 동작이다.
  • 명령어 전달: 게스트 OS에서 발생하는 명령어는 하이퍼바이저를 거쳐 pCPU로 전달된다. Intel VT-x나 AMD-V 같은 하드웨어 가속 기술은 이 과정에서 발생하는 오버헤드를 줄여준다.

5. 실제 서비스에서의 vCPU 활용

  • AWS EC2와 Nitro 시스템: EC2는 인스턴스 타입에 따라 최적화된 vCPU 개수를 할당한다. 특히 Nitro 시스템은 네트워크나 스토리지 I/O 처리를 별도의 전용 하드웨어로 오프로딩하여, 메인 CPU의 연산 능력을 vCPU에게 온전히 전달함으로써 가상화 성능 손실을 최소화한다.
  • Docker 컨테이너 격리: Docker는 VM과 달리 하이퍼바이저가 없다. 대신 리눅스 커널의 Cgroups기능을 사용하여 vCPU 자원을 제한한다. 이는 하드웨어를 분할하는 느낌보다는, 호스트 CPU의 전체 실행 시간 중 특정 비율만큼만 컨테이너가 점유하도록 제한하는 방식이다.

6. 가상화 기술의 기술적 한계

  • Steal Time: 물리 CPU가 다른 VM의 요청을 처리하느라 내 VM이 CPU 할당을 기다리는 대기 시간. 클라우드에서 인스턴스 성능이 들쭉날쭉하다면 이 수치를 의심해야 한다.
  • Context Switching Overhead: 하이퍼바이저가 vCPU를 교체할 때마다 발생하는 전환 비용. 가상화 계층이 두꺼울수록 이 연산 비용은 커진다.
  • Cache Pollution: 여러 vCPU가 하나의 물리 코어 캐시를 공유하면서 캐시 적중률이 떨어지는 문제가 발생할 수 있다.

vCPU는 현대 인프라의 핵심인 클라우드와 가상화를 지탱하는 근간 기술이다. 추상화 계층이 복잡해질수록 하위 구조인 하드웨어와의 상호작용을 이해하는 것이 중요하다. 단순한 자원 할당을 넘어 하이퍼바이저의 스케줄링 효율을 고민하는 과정이 시스템 엔지니어링 역량을 쌓는 데 도움이 될 것이라고 생각한다.