Patent ID: 7765405

Claim:
A method for scheduling receive-side processing of data packets in a multiprocessor computer system comprising a network interface communicably coupled to a network to receive data packets, memory and a plurality of local processors, the method comprising the steps of: with the network interface: receiving a plurality of data packets from one or more remote requesting clients over the network; applying a cryptographically secure hashing function to each of the plurality of data packets, the cryptographically secure hashing function producing a hash value for each of the data packets; applying each hash value to a processor selection policy to identify a processor number; applying each processor number to a processor offset function to select a processor to perform receive-side processing of the corresponding data packet, the processor offset function bounding processor selection to a subset of the plurality of local processors; queuing each data packet in a packet array corresponding to the processor selected to perform receiver-side processing for the data packet; for each processor having a non-empty packet array, checking a status of an interrupt channel for said processor, wherein each processor has an independent interrupt channel; for each interrupt channel that is not disabled, issuing an interrupt to the respective processor requesting processing of the processor's packet array; and with each processor in the subset of the plurality of local processors: monitoring an interrupt channel for an interrupt from the network interface; when the interrupt is received on the interrupt channel, changing the status of the interrupt channel to disabled; processing all data packets in the processor's packet array; and when all the packets in the processor's packet array have been processed, changing the status of the interrupt channel to not disabled.