← 질문 목록
#4깊이 0
컨텍스트 스위칭 비용은 구체적으로 어디서 발생하는가?
레지스터 교체 자체보다 캐시가 무너지는 비용이 크다. 눈에 보이는 저장·복원은 일부일 뿐이다.
| 구분 | 무엇이 일어나나 | 크기 |
|---|---|---|
| 직접 비용 | 레지스터·PC를 PCB에 저장하고 복원, 커널 모드 전환 | 수 마이크로초 |
| 간접 비용 | 쌓아둔 캐시가 밀려나고 TLB도 다시 채워질 수 있다 | 이쪽이 본체 |
직접 비용은 명확하다. 실행 중이던 스레드의 레지스터와 프로그램 카운터를 PCB에 저장하고 다음 스레드의 것을 복원한다. 커널 모드 전환도 함께 일어난다. 이건 수 마이크로초 수준이다.
간접 비용이 본체다. 전환할 때 캐시를 통째로 비우는 것은 아니다. 새 작업이 데이터를 올리면서 앞 작업의 것이 밀려난다. 그래서 다시 실행될 때 캐시 미스가 연달아 난다.
TLB도 비슷하다. 프로세스가 바뀌면 주소 변환이 달라져 비워야 한다. 다만 CPU가 주소 공간에 꼬리표를 달 수 있으면 전부 비우지는 않는다.
그래서 스레드를 늘린다고 처리량이 비례해 늘지 않는다. 코어 수를 넘어서면 실행이 아니라 전환에 시간을 쓰기 시작한다. 커넥션 풀 크기를 코어 수 기준으로 잡는 근거가 여기 있다.
CPU 바운드 작업은 코어 수에 맞추고 I/O 바운드는 더 늘려도 되는 이유도 같다. 대기 중인 스레드는 CPU를 점유하지 않기 때문이다.