논리 CPU와 프로세스 실행 시간 분석
리눅스에서 프로세스 스케줄러가 논리 CPU자원을 어떻게 할당하는지와 이에 따른 프로세스 실행 시간 특성을 분석한다.
그림으로 배우는 리눅스 구조 정리한 내용
CPU
논리 CPU를 이해하기 위해서는 물리적 CPU와 각 그 용어에 대해 알아야 한다. CPU의 발전 흐름과 용어를 이해하기 위해서 아래 영상을 참고하면 도움이 된다.
물리적 CPU(Physical CPU)
물리적 CPU는 프로세서에 존재하는 실제 존재하는 코어를 의미한다.
•
소켓(Socket)
물리적인 프로세스를 시스템(메인보드)에 연결하기 위한 슬롯이다.
한 소켓에 하나의 프로세서가 장착된다.
•
프로세서(Processor)
프로세서는 소켓에 장착된 물리적 칩을 의미하며, 하나 이상의 CPU 코어(Core)를 포함한다.
- 프로세서: 물리적 하드웨어
- 프로세스: 실행 중인 프로그램의 인스턴스
•
코어(Core)
프로세서 내부에서 독립적으로 실행되는 CPU의 물리적 단위이다. 단일 코어가 하나의 CPU 역할을 한다.
멀티 코어 프로세서: 프로세서 하나에 여러 코어가 포함한다. 코어 수가 많을 수록 동시에 처리할 수 있는 작업이 많아진다.
논리적 CPU (Logical CPU) ← 좀 더 정리 필요
•
스레드(Thread)
코어를 기반으로 작동하는 논리적 단위이다.
운영체제나 프로그램에서 실행되는 최소단위로, CPU 코어에서 실행된다.
◦
멀티스레딩(Multithreading): 멀티 코어
◦
하이퍼스레딩(Hyperthreading): 한 코어가 동시에 두 개 이상의 스레드를 처리
◦
논리적 CPU(Logical CPU): 멀티스레딩 기술로 코어를 논리적으로 확장
논리적 CPU는 각 코어가 동시에 2개 이상의 작업을 수행할 수 있는 능력을 의미한다. 이는 하이퍼스레딩(Hyper-Threading)기술을 통해 구현이 가능하다. 위 그림에서 1개 프로세서에 4개의 물리적 코어만 존재하지만, 하이퍼스레딩(Hyper-Threading)을 활성화하면 시스템은 이를 8개의 논리적 CPU로 인식하게 된다. 1P4C with 2 Threads per core
실습
multiload.sh
논리 CPU 하나만 사용하는 경우
기본적으로 모든 프로세스는 1개의 논리 CPU에서 실행된다. 프로세스 개수를 지정해서 실행해보자.
상황: cpu 1개 : 프로세스 n개
실습 결과
프로세스 개수: 1개
./multiload.sh 1
Bash
복사
프로세스 개수: 2개
./multiload.sh 2
Bash
복사
프로세스 개수: 3개
./multiload.sh 3
Bash
복사
프로세스 개수가 1개 일때는 프로세스가 CPU를 독점하여 실행하기 때문에 실행 시간은 real(경과 시간)과 user(사용자 영역 시간)이 거의 같다.
그러나 프로세스 수가 증가하면 real(전체 경과 시간)은 프로세스 수에 비례하여 증가하였다. 1개의 논리 CPU는 한 번에 하나의 프로세스만 처리할 수 있으므로 스케줄러가 각 프로세스에 순차적으로 CPU자원을 할당한다.
논리 CPU 여러 개를 사용하는 경우
멀티코어 환경에서 실습을 진행한다. -m 옵션을 활성화하면 스케줄러가 프로세스를 여러 논리 CPU에 균등하게 배분한다. 예를 들어 논리 CPU가 2개인 경우, 2개의 프로세스가 각 논리 CPU를 독점하여 실행한다.
상황: cpu N개: 프로세스 n개
실습 결과
./multiload.sh -m 1
./multiload.sh -m 2
./multiload.sh -m 3
Bash
복사
모든 프로세스의 real과 user + sys 값이 거의 같다. 이는 각 프로세스가 독립적으로 CPU 자원을 사용했음을 의미한다.
real보다 user + sys가 커지는 경우
직관적으로 real ≥ user + sys일 것 같지만, 실제로는 user + sys > real인 경우도 존재한다. 이는 시간 측정 방식의 차이와 측정 정밀도 문제때문에 발생한다. 특히, 자식 프로세스를 생성하여 각각 다른 CPU에서 실행되면, user+sys 값이 real보다 커질 수 있다.
예시:
time ./multiload.sh -m 2
Bash
복사
•
첫 번째, 두 번째 부하는 자식 프로세스에서 실행
•
세 번째 부하는 스크립트 자체에서 실행
•
결과적으로 user 값이 real 값의 약 2배가 될 수 있음
마무리
이번 실습을 통해 논리 CPU개수와 프로세스 스케줄링 방식이 프로세스 실행 시간에 미치는 영향을 확인했다. 단일 CPU 환경에서는 프로세스 개수에 비례해 전체 실행 시간이 증가하며, 멀티 코어 환경에서는 각 프로세스가 논리 CPU를 독립적으로 활용하여 실행된다. 또한 real값보다 user+sys 값이 커질 수 있는 특수한 상황을 이해함으로써 시간 측정 결과를 더 정확히 해석할 수 있다.
Q&A
Q. 논리 CPU가 하나인 경우, 프로세스 실행 시간은 어떻게 결정되나요?
Q. 논리 CPU 여러 개를 사용하는 경우, 실행 시간은 어떻게 변하나요?
Q. user + sys가 real보다 커질 수 있는 이유는 무엇인가요?
Q. 스케줄러가 부하 처리를 여러 CPU에 균등히 분산시키는 방법은 무엇인가요?
Q. 왜 real ≥ user + sys라고 가정하면 안 되나요?
Related Posts
Search