꼭 그렇지는 않다.
- 결론적으로 말하면, CPU 사용을 덜하는 어플리케이션을 개발하면 된다.
- 프로세스간의 컨텍스트 스위칭이 발생하여도, 오버헤드가 덜하기 때문이다.
- vCPU 처럼 하이퍼 스레딩을 지원하는 가상 CPU를 구성할 수 있기 때문에, 큰 제약은 사라진 듯하다.
현재 AWS EC2 인스턴스 r6i.large 유형에(vCPU 2) 어플리케이션 4개를 구동하고 운영중에 있다.
어플리케이션마다 CPU 사용률이 적어, 프로세스간의 컨텍스트 스위칭이 발생하여도, 오버헤드가 느껴지거나, 프로세스가 중단 된적이 없다.
Process
- 프로세스란 실행 중인 프로그램 (어플리케이션 혹은 운영체제에서 일의 단위)
- PCB (Process Control Block)
- 운영체제에서는 프로세스를 PCB로 표현 하며, 운영체제 커널의 자료 구조
- PID, Process State, Program Counter, CPU Registers, CPU scheduling information, Memory-management information, Accounting information, I/O status information 항목을 저장하고 있음
어떠한 프로세스들이 어떠한 상태로 PCB에 저장되어 관리되는지
- ps -ef | grep xxx (동작중인 프로세스) or ps -ef 명령어
컨텍스트 스위칭이란?
- 여러개의 프로세스가 실행되고 있을 때 기존 실행하던 프로세스를 중단하고 다른 프로세스를 실행하는 것.
- 이전 프로세스 정보를 PCB에 저장하고 새로 실행할 프로세스 정보를 PCB에서 읽어와 레지스터에 적재함
- 크게 아래 두가지 Context Switch로 구분됨
Process Context Switch
1. 현재 실행 중인 프로세스 혹은 Thread의 백업
2. CPU 캐시를 비움
3. TLB(table lookaside buffer)를 비움
4. MMU(memory management unit)를 변경
Thread Context Switch
1. 현재 실행 중인 Thread의 백업스레드 컨텍스트 스위칭과 프로세스 컨텍스트 스위칭으로 구분되며, 어플리케이션을 core 갯수 이상으로 띄우게 되면, 프로세스 컨텍스트 스위칭이 빈번히 발생하여, 오버헤드가 많이 발생할 여지는 있음.
스레드 컨텍스트 스위칭의 경우 캐시를 비우거나 버퍼를 비우는 동작을 하지 않기 때문에 같은 프로세스의 스레드 컨텍스트 스위칭은 가볍다.
vCPU
- vCPU는 물리적 CPU에서 독립적으로 실행됩니다. 여러 가상 인스턴스가 하나의 물리적 CPU를 공유할 수 있으며, 가상화 기술을 사용하여
각 vCPU를 격리 및 관리합니다.- AWS EC2 인스턴스 유형은 하이퍼 스레딩 (Hyper-Threading) 지원하며, 이는 각 코어당 2개의 스레드를 가질 수 있고, 스레드 수는 하이퍼 스레딩을 활성화 할때만 해당 됨.
병렬 처리 작업에 효과적.
CPU
- 물리적인 중앙 처리 장치로 모든 연산 작업을 수행함.
Process
- 프로세스는 운영 체제에서 실행 중인 어플리케이션 또는 작업을 나타냄
- 각 프로세스는 독립적으로 실행되며, 자체 메모리 및 리소스 공간을 가짐.
Thread
- 프로세스 내에서 실행되는 작은 실행 단위로 프로세스 내에서 다수의 스레드가 병렬로 실행 될 수 있음.
- 각 스레드는 독립적으로 작업을 수행함.
- 스레드는 CPU 코어에서 실행되며, 하나의 코어는 여러 스레드를 동시에 처리 할 수 있음 (이를 하이퍼 스레딩이라고 함)