Lazy receiver processing Goal: Guard against receiver livelock and unfair resource allocation under heavy network load. Overview: * Problem: packet processing is done in the context of the receiving process. Packet receive gets the highest priority, followed by protocol processing, followed by application processing. Under heavy load, all cycles are consumed with processing incoming packets, which are ultimately dropped (livelock). Also, processing is done in the context of the running process (not the receiving process), resulting in unfair resource allocations. * Approach - The single IP queue is replaced with a per-socket queue - Demultiplexing to the appropriate queue is done as early as possible, preferably on the NIC. - Protocol processing is done in the context of the receiving application. * TCP is more complicated than UDP because all processing cannot occur in the receive system call. Comments: * The unit of resource control is the socket. A server could obtain more resources by opering more sockets. * It isn't clear how this would respond to spoofed connections. In the worst case, setting up per-socket queues could open up a denial-of-service attack. * LRP does not address the issue of sending bandwidth; a single sending queue is shared by all sockets.