Selection Map

폴링, 인터럽트, DMA, 혼합 방식을 고르는 기준

I/O 경로는 하나만 고정하지 않습니다. 이벤트 빈도, 전송량, 지연 시간, CPU 여유를 보고 폴링과 인터럽트, DMA를 조합합니다.

1 요청 발생

장치 이벤트나 파일, 네트워크 I/O 요청이 들어옵니다.

event or request
2 빈도 판단

드물면 인터럽트, 계속 몰리면 폴링 전환이 유리합니다.

rare vs burst
3 전송량 판단

블록이 크거나 반복 전송이면 DMA 링과 버퍼를 씁니다.

small vs bulk
4 완료 처리

완료 큐, 인터럽트, 폴링 루프 중 비용이 낮은 길로 회수합니다.

completion path
Polling

짧고 확실한 대기

장치가 곧 준비될 때 응답 지연이 가장 낮습니다.

대기가 길어지면 CPU 시간이 그대로 소모됩니다.

Interrupt

드문 이벤트 알림

CPU가 다른 일을 하다가 장치 완료 때만 깨어납니다.

초당 이벤트가 너무 많으면 핸들러 비용이 커집니다.

DMA

대량 데이터 전송

데이터 복사를 장치와 DMA 컨트롤러가 처리합니다.

CPU는 설정과 완료 처리에 집중합니다.

Hybrid

부하에 따른 전환

NAPI는 저부하 인터럽트, 고부하 폴링을 섞습니다.

io_uring은 제출 큐와 완료 큐로 배치 비용을 낮춥니다.

NAPI식 네트워크 수신

첫 패킷 인터럽트로 수신 사실을 알립니다.
폭주 감지 인터럽트를 잠시 끄고 폴링합니다.
배치 처리 DMA 버퍼의 패킷을 한꺼번에 회수합니다.
한산해짐 다시 인터럽트 중심으로 돌아갑니다.

io_uring식 비동기 I/O

애플리케이션은 제출 큐에 요청을 쌓고, 커널은 완료 큐로 결과를 돌려줍니다. 필요하면 완료 큐를 폴링해 시스템 호출과 인터럽트 비용을 줄입니다.