1. Cpu & I/O Burst
- Burst
- Burst는 계속되는 작업을 의미합니다.
- Cpu burst
- CPU를 사용하는 구간
- 프로그램의 수행 중, 연속적으로 CPU를 사용하는 구간
- CPU만 연속적으로 쓰면서 연산을 실행
- 프로세스가 CPU에서 일부 코드를 실행하는 데 소비하는 시간
- CPU burst는 프로세스의 RUNNING 상태를 처리
- I/O burst
- I/O를 실행하는 구간
- 프로그램의 수행 중, I/O작업이 수행되는 동안 block 되는 구간
- 프로세스가 I/O 요청 완료를 기다리는 데 소비하는 시간
- I/O burst는 프로세스의 대기 상태를 처리
2. Cpu & I/O Bound
- Cpu bound application
- Hash와 같이 CPU를 주로 사용하는 경우
- I/O bound application
- 이미지 다운로드와 같이 Data I/O 접근이 많은 경우
3. 테스트 및 팁
- OS 스케쥴링이 필요한 이유
- 거의 모든 프로그램에는 CPU 번호를 처리하고 일종의 I/O를 기다리는 교대 주기가 있습니다. (메모리에서 간단한 가져오기도 CPU 속도에 비해 시간이 오래 걸립니다.)
- 단일 프로세스를 실행하는 간단한 시스템에서는 I/O를 기다리는 데 소요되는 시간이 낭비됩니다.
- 스케줄링 시스템은 다른 프로세스가 I/O를 기다리는 동안 CPU를 사용할 수 있도록 하여 손실된 CPU 주기를 최대한 활용합니다. 최대한 CPU 자원을 효율적으로 사용하기 위하여 스케줄링을 해야합니다.
- 스트레스 테스트
- 예상 TPS 보다 여유롭게
- Scale-out을 해도 성능이 늘지 않으면 병목을 의심
- 단일 Latency 가 느리면 코드 문제가 있거나 병목이 있는 것
- 기대 Latency 를 만족할 때 까지 테스트해보기
- DB 서버를 하나만 사용하는 경우에 DB 접근이 많은 경우
- 요청을 처리하는 EC2 서버(WAS = Spring, PHP, Node.js와 같은 Business 처리 서버)의 Instance 개수를 늘린다고 해결되지 않음
- 이 경우에는 DB 서버 스펙을 올리거나, DB 서버를 늘리는 것이 좋음
reference