New API
Encyclopedia
New API is an interface to use interrupt mitigation techniques for networking devices in the Linux kernel
.
Such an approach is intended to reduce the overhead of packet receiving. The idea is to defer incoming message handling until there is a sufficient amount of them so that it is worth handling them all at once.
(IRQ) for each and every incoming packet. However, servicing IRQs is costly in terms of processor resources and time. Therefore the straightforward implementation can be very inefficient in high-speed networks, constantly interrupting the kernel with the thousands of packets per second. Overall performance of the system as well as network throughput can suffer as a result.
Polling
is an alternative to interrupt-based processing. The kernel can periodically check for the arrival of incoming network packets without being interrupted, which eliminates the overhead of interrupt processing. Establishing an optimal polling frequency is important, however. Too frequent polling wastes CPU resources by repeatedly checking for incoming packets that have not yet arrived. On the other hand, polling too infrequently introduces latency by reducing system reactivity to incoming packets, and it may result in the loss of packets if the incoming packet buffer fills up before being processed.
As a compromise, the Linux kernel uses the interrupt-driven mode by default and only switches to polling mode when the flow of incoming packets exceeds a certain threshold, known as the "weight" of the network interface.
Initial effort to include NAPI was met with resistance by some members of the community, however
David Miller worked hard to ensure NAPI's inclusion.
A lot of real world testing was done in the Uppsala university network before inclusion. In fact,
www.slu.se was the first production NAPI-based OS and is still powered to this day by
NAPI-based Bifrost/Linux routers. The pktgen traffic generator was also born around this time.
Pktgen was extensively used to test NAPI scenarios not induced by real world traffic.
Linux kernel
The Linux kernel is an operating system kernel used by the Linux family of Unix-like operating systems. It is one of the most prominent examples of free and open source software....
.
Such an approach is intended to reduce the overhead of packet receiving. The idea is to defer incoming message handling until there is a sufficient amount of them so that it is worth handling them all at once.
Motivations for using NAPI
A straightforward method of implementing a network driver is to interrupt the kernel by issuing an interrupt requestInterrupt request
The computing phrase "interrupt request" is used to refer to either the act of interrupting the bus lines used to signal an interrupt, or the interrupt input lines on a Programmable Interrupt Controller...
(IRQ) for each and every incoming packet. However, servicing IRQs is costly in terms of processor resources and time. Therefore the straightforward implementation can be very inefficient in high-speed networks, constantly interrupting the kernel with the thousands of packets per second. Overall performance of the system as well as network throughput can suffer as a result.
Polling
Polling (computer science)
Polling, or polled operation, in computer science, refers to actively sampling the status of an external device by a client program as a synchronous activity. Polling is most often used in terms of input/output , and is also referred to as polled or software driven .Polling is sometimes used...
is an alternative to interrupt-based processing. The kernel can periodically check for the arrival of incoming network packets without being interrupted, which eliminates the overhead of interrupt processing. Establishing an optimal polling frequency is important, however. Too frequent polling wastes CPU resources by repeatedly checking for incoming packets that have not yet arrived. On the other hand, polling too infrequently introduces latency by reducing system reactivity to incoming packets, and it may result in the loss of packets if the incoming packet buffer fills up before being processed.
As a compromise, the Linux kernel uses the interrupt-driven mode by default and only switches to polling mode when the flow of incoming packets exceeds a certain threshold, known as the "weight" of the network interface.
NAPI compliant drivers
A driver using the NAPI interface will work as follow :- Packet receive interrupts are disabled.
- The driver provides a poll method to the kernel. That method will fetch all incoming packets available, on the network card or a DMADMADMA can refer to:* DMA , a defunct dance music magazine* Dallas Museum of Art, an art museum in Texas, USA* Danish Music Awards, an award show held in Denmark since 1989...
ring, so that they will then be handled by the kernel. - When allowed to, the kernel calls the device poll method to possibly handle many packets at once.
Advantages of using NAPI
- The load induced by interruptsInterrupt requestThe computing phrase "interrupt request" is used to refer to either the act of interrupting the bus lines used to signal an interrupt, or the interrupt input lines on a Programmable Interrupt Controller...
is reduced even though the kernel has to poll. - Packets are less likely to be re-ordered, while out of order packet handling might be a bottleneck otherwise.
- In case the kernel is unable to handle all incoming packets, the kernel does not have to do any work in order to drop them: they are simply overwritten in the network cardNetwork cardA network interface controller is a computer hardware component that connects a computer to a computer network....
's incoming ring buffer. Without NAPI, the kernel has to handle every incoming packet regardless of whether there is time to service it, which leads to thrashing.
History of NAPI
NAPI was an over three year effort by Alexey Kuznetsov, Jamal Hadi Salim and Robert Olsson.Initial effort to include NAPI was met with resistance by some members of the community, however
David Miller worked hard to ensure NAPI's inclusion.
A lot of real world testing was done in the Uppsala university network before inclusion. In fact,
www.slu.se was the first production NAPI-based OS and is still powered to this day by
NAPI-based Bifrost/Linux routers. The pktgen traffic generator was also born around this time.
Pktgen was extensively used to test NAPI scenarios not induced by real world traffic.
External links
- [ftp://robur.slu.se/pub/Linux/net-development/NAPI/ Early NAPI work]
- NAPI description on LinuxNet wiki