2.3. NAPI Polling
새로운 API(NAPI)는 장치 드라이버 패킷 처리 프레임워크를 확장합니다. 이는 들어오는 네트워크 패킷의 효율성을 향상시킵니다.
하드 인터럽트는 비용이 많이 듭니다. 이로 인해 커널 공간에서 사용자 공간으로 컨텍스트가 전환되고 뒤로 전환됩니다. 자신을 방해할 수 없습니다. 인터럽트 병합이 있더라도 인터럽트 처리기는 전체 CPU 코어를 사용합니다. NAPI를 사용하면 드라이버가 폴링 모드를 사용할 수 있습니다. 커널이 모든 패킷에 대해 이를 중단하지 않습니다.
정상적인 작동 중에 커널은 초기 하드 인터럽트를 발행합니다. 그런 다음 소프트 인터럽트 요청(SoftIRQ)을 보냅니다. SoftIRQ 처리기는 NAPI 루틴을 사용하여 네트워크 카드를 폴링합니다. 폴링 루틴에는 예산이 있습니다. 이렇게 하면 SoftIRQs가 전체 CPU 코어를 사용하지 않습니다. 예산은 SoftIRQ에서 사용할 수 있는 CPU 시간이 제한됩니다. SoftIRQ 폴링 루틴이 완료되면 커널이 종료합니다. 커널은 나중에 다시 실행되도록 예약합니다. 이렇게 하면 패킷을 수신하는 프로세스가 반복됩니다.