새로운 API

New API

New API(NAPI라고도 함)는 Linux 커널의 네트워킹 장치에 인터럽트 완화 기술을 사용하는 인터페이스입니다.이러한 어프로치는, 패킷 수신의 오버헤드를 경감하는 것을 목적으로 하고 있습니다.착신 메시지 처리를 충분한 양이 있을 때까지 미루어 한 번에 처리할 가치가 있습니다.

동기

네트워크 드라이버를 실장하는 간단한 방법은, 각 착신 패킷에 대해서 인터럽트 요구(IRQ)를 발행하는 것으로, 커널을 중단하는 것입니다.그러나 프로세서 리소스와 시간 측면에서 IRQ를 수리하는 것은 비용이 많이 듭니다.따라서 고속 네트워크에서는 간단한 구현이 매우 비효율적이며 초당 수천 개의 패킷으로 커널을 지속적으로 중단시킬 수 있습니다.그 결과, 시스템의 전체적인 퍼포먼스와 네트워크의 throughput이 저하될 가능성이 있습니다.

폴링은 인터럽트 기반 처리의 대체 수단입니다.커널은 인터럽트 없이 정기적으로 착신 네트워크 패킷의 도착을 체크할 수 있기 때문에 인터럽트 처리의 오버헤드가 해소됩니다.단, 최적의 폴링 빈도를 확립하는 것이 중요합니다.폴링이 너무 자주 이루어지면 아직 도착하지 않은 착신 패킷이 반복적으로 확인되므로 CPU 리소스가 낭비됩니다.한편, 폴링은, 착신 패킷에 대한 시스템 반응성을 저하시켜 지연을 발생시키는 일이 거의 없습니다.또, 처리전에 착신 패킷버퍼가 가득 차면, 패킷의 손실이 발생할 가능성이 있습니다.

한편, Linux 커널은 디폴트로 인터럽트 구동 모드를 사용하고, 착신 패킷의 플로우가 네트워크인터페이스의 「무게」라고 불리는 특정의 문턱치를 넘었을 경우에만 폴링 모드로 전환합니다.

준거 드라이버

NAPI 인터페이스를 사용하는 드라이버는 다음과 같이 동작합니다.

  • 패킷 수신 인터럽트는 디세이블입니다.
  • 드라이버는 커널에 폴링 방법을 제공합니다.이 메서드는 네트워크 카드 또는 DMA 링에서 사용 가능한 모든 착신 패킷을 가져오고 커널에 의해 처리됩니다.
  • 허용된 경우 커널은 디바이스 폴링 메서드를 호출하여 여러 패킷을 한 번에 처리할 수 있습니다.

이점

  • 커널이 폴링을 해야 하는 경우에도 인터럽트에 의해 유발되는 부하가 감소합니다.
  • 패킷의 순서가 변경되는 일은 적어지지만,[citation needed] 그렇지 않으면 패킷 처리가 병목현상이 될 수 있습니다.
  • 커널이 모든 착신 패킷을 처리할 수 없는 경우 커널은 패킷을 드롭하기 위해 어떤 작업도 수행할 필요가 없습니다.그것들은 네트워크 카드착신버퍼에 덮어쓰기 됩니다.NAPI를 사용하지 않으면 커널은 서비스할 시간이 있는지 여부에 관계없이 모든 착신 패킷을 처리해야 하므로 스레싱이 발생합니다.

역사

NAPI는 Alexey Kuznetsov, Jamal Hadi Salim, Robert Olsson의 3년 이상의 노력이었다.NAPI를 포함하려는 초기 노력은 일부 커뮤니티 구성원의 저항에 부딪혔지만 David Miller는 NAPI의 포함을 보장하기 위해 열심히 노력했습니다.

포함되기 전에 웁살라 대학 네트워크에서 많은 실제 테스트가 수행되었습니다.실제로 www.slu.se은 최초의 실제 가동 중인 NAPI 기반 OS로, 현재까지도 NAPI 기반 Bifrost/Linux 라우터에 의해 가동되고 있습니다.pktgen 트래픽제너레이터도 이 무렵에 탄생했습니다.Pktgen은 실제 트래픽에 의해 유도되지 않는 NAPI 시나리오를 테스트하는 데 광범위하게 사용되었습니다.

레퍼런스

추가 정보

  • Jamal Hadi Salim; Robert Olsson; Alexey Kuznetsov (2001-11-10). Beyond softnet (PDF). 5th Annual Linux Showcase & Conference (ALS '01). pp. 165–172. Retrieved 2011-03-06. 기존의 NAPI 페이퍼.
  • Jonathan Corbet (2003-04-28). "Driver porting: Network drivers". LWN.net. Retrieved 2011-03-06.
  • Jonathan Corbet (2006-12-18). "Reworking NAPI". LWN.net. Retrieved 2011-03-06.
  • Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman (February 2005). "Chapter 17: Networking drivers" (PDF). Linux Device Drivers (3rd ed.). O'Reilly Media. ISBN 978-0-596-00590-0. Retrieved 2011-03-06.

외부 링크