Claims
- 1. A method of distributing network traffic processing among a plurality of processors in a multiprocessor computer, comprising:
receiving a first packet at a network interface of a multiprocessor computer; retrieving from said first packet an identifier of a source of said first packet; retrieving from said first packet an identifier of a destination of said first packet; combining said source identifier and said destination identifier to form a first flow index for identifying a first communication flow comprising said first packet; generating from said first flow index an identifier of a first processor of a plurality of processors of said multiprocessor computer; associating said first processor identifier with said first packet; and submitting said first packet for processing by said first processor.
- 2. The method of claim 1, further comprising:
receiving a second packet of said first communication flow at said network interface; associating said first processor identifier with said second packet; and submitting said second packet from said network interface for processing by said first processor.
- 3. The method of claim 1, further comprising:
receiving a second packet at said network interface; producing a second flow index to identify a second communication flow comprising said second packet; generating from said second flow index an identifier of a second processor of said plurality of processors; associating said second processor identifier with said second packet; and submitting said second packet for processing by said second processor.
- 4. The method of claim 3, wherein said producing a second flow index comprises retrieving a virtual connection identifier from said second packet.
- 5. The method of claim 1, wherein said source identifier and said destination identifier belong to a first protocol for which processing is not offloaded to the network interface, and further comprising receiving a second packet having a second source identifier and a second destination identifier that belong to a second protocol for which processing is offloaded to said network interface.
- 6. The method of claim 1, further comprising transferring control of a Transport Control Protocol (TCP) connection from said first processor to a second processor of said plurality of processors.
- 7. The method of claim 1, wherein said source identifier and said destination identifier correspond to a Transaction TCP (T/TCP) protocol.
- 8. The method of claim 1, wherein said submitting comprises:
storing said first packet in a first memory of said multiprocessor computer; and storing said first processor identifier in a second memory.
- 9. The method of claim 8, wherein said submitting further comprises issuing an alert to said multiprocessor computer to notify said multiprocessor computer of said storage of said first packet.
- 10. The method of claim 1, further comprising searching a flow database for said first flow index, wherein said flow database comprises a collection of flow indexes.
- 11. The method of claim 10, wherein said searching comprises if said first flow index is not found in said flow database, storing said first flow index in said flow database.
- 12. The method of claim 10, wherein said searching comprises if said first flow index is found in said flow database, updating an entry in said flow database associated with said first flow index.
- 13. The method of claim 1, further comprising storing said first flow index in a flow database comprising flow indexes of communication flows involving entities operating on the multiprocessor computer.
- 14. A method of distributing the load of processing packets received from a network among multiple processors in a multiprocessor computer, comprising:
receiving a first packet at a network interface of a multiprocessor host computer; receiving a second packet at said network interface; retrieving a source identifier and a destination identifier from said first packet; combining said source identifier and said destination identifier to form a first flow key; creating a second flow key to identify a second communication flow comprising said second packet; generating an identifier of a first processor from said first flow key; generating an identifier of a second processor from said second flow key; submitting said first packet to said first processor; and submitting said second packet to said second processor.
- 15. The method of claim 14, wherein each of said receiving, creating and generating are performed on said network interface.
- 16. The method of claim 14, wherein said retrieving comprises extracting one or more fields from a protocol header of said first packet, said protocol being one of a set of pre-selected protocols.
- 17. The method of claim 14, wherein said creating a second flow key comprises extracting a virtual connection identifier from said second packet.
- 18. The method of claim 14, further comprising:
transferring control of a Transport Control Protocol (TCP) connection from said first processor to said second processor.
- 19. The method of claim 14, wherein said first flow corresponds to a first protocol and said second flow corresponds to a second protocol.
- 20. A multiprocessor computer for receiving and processing packets from a network, comprising:
a plurality of processors; and a network interface configured to receive packets from a network and submit said packets to said plurality of processors, said network interface comprising:
a flow identifier configured to:
retrieve a source identifier and a destination identifier from a packet; and combine said source identifier and said destination identifier to form a flow key for identifying a flow comprising said packet; and a load distributor configured to generate, from said flow key, an identifier of a processor of said plurality of said processors for processing said packet; wherein said load distributor generates a first identifier of a first processor for a first set of packets in a first flow and generates a second identifier of a second processor for a second set of packets in a second flow.
- 21. The multiprocessor computer of claim 20, said network interface further comprising:
a flow database for storing one or more flow keys, and a flow database manager for managing said flow database.
- 22. The multiprocessor computer of claim 20, said network interface further comprising:
a first data structure for storing said first set of packets; and a second data structure for storing said first processor identifier.
- 23. A computer readable storage medium storing instructions that, when executed by a computer, cause the computer to perform a method of distributing the processing of network traffic among multiple processors, the method comprising:
receiving a first packet at a network interface of a multiprocessor computer; retrieving from said first packet an identifier of a source of said first packet; retrieving from said first packet an identifier of a destination of said first packet; combining said source identifier and said destination identifier to form a first flow index for identifying a first communication flow comprising said first packet; generating from said first flow index an identifier of a first processor of a plurality of processors of said multiprocessor computer; associating said first processor identifier with said first packet; and submitting said first packet for processing by said first processor.
- 24. The method of claim 23, wherein said generating from said first flow index an identifier of said first processor is performed by said network interface.
- 25. The method of claim 23, further comprising establishing a transport-level network connection corresponding to said first communication flow.
- 26. The method of claim 25, further comprising transferring control of said transport-level network connection from said first processor to a second processor of said plurality of processors.
- 27. The method of claim 26, further comprising transferring control of said transport-level network connection from said second processor to said first processor.
- 28. The method of claim 23, further comprising transferring control of said first communication flow from said first processor to a second processor of said plurality of processors.
- 29. The method of claim 28, further comprising transferring control of said first communication flow from said second processor to said first processor.
- 30. The method of claim 23, further comprising processing a header of said first packet to obtain a buffer address for storing application data from a second packet.
- 31. The method of claim 23, further comprising processing a header of said first packet to obtain a buffer address for storing application data from a second packet.
- 32. The method of claim 31, further comprising processing said second packet by a second processor of said plurality of processors.
- 33. The method of claim 23, wherein said retrieving from said first packet said identifier of said source of said first packet and said retrieving from said first packet said identifier of said destination of said first packet includes parsing network layer and transport layer headers of said first packet by said network interface.
- 34. A method of distributing network traffic processing among a plurality of processors in a multiprocessor computer, comprising:
receiving a first packet at a network interface of a multiprocessor computer; producing a first flow index to identify a first communication flow comprising said first packet; generating from said first flow index an identifier of a first processor of a plurality of processors of said multiprocessor computer; associating said first processor identifier with said first packet; storing said first packet in a first memory of said multiprocessor computer; storing said first processor identifier in a second memory; and issuing an alert to said multiprocessor computer to notify said multiprocessor computer of said storage of said first packet.
- 35. The method of claim 34, wherein said producing a first flow index comprises:
retrieving from said first packet an identifier of a source of said first packet; and retrieving from said first packet an identifier of a destination of said first packet.
- 36. The method of claim 35, wherein said producing a first flow index further comprises combining said source identifier and said destination identifier.
- 37. The method of claim 34, wherein said producing a first flow index comprises retrieving a virtual connection identifier from said first packet.
- 38. The method of claim 34, further comprising searching a flow database for said first flow index, wherein said flow database comprises a collection of flow indexes.
- 39. The method of claim 38, wherein said searching comprises:
if said first flow index is not found in said flow database, storing said first flow index in said flow database; and if said first flow index is found in said flow database, updating an entry in said flow database associated with said first flow index.
- 40. A computer readable storage medium storing instructions that, when executed by a computer, cause the computer to perform a method of distributing network traffic processing among a plurality of processors in a multiprocessor computer, the method comprising:
receiving a first packet at a network interface of a multiprocessor computer; producing a first flow index to identify a first communication flow comprising said first packet; generating from said first flow index an identifier of a first processor of a plurality of processors of said multiprocessor computer; associating said first processor identifier with said first packet; storing said first packet in a first memory of said multiprocessor computer; storing said first processor identifier in a second memory; and issuing an alert to said multiprocessor computer to notify said multiprocessor computer of said storage of said first packet.
- 41. A method of distributing network traffic processing among a plurality of processors in a multiprocessor computer, comprising:
receiving a first packet at a network interface of a multiprocessor computer; producing a first flow index to identify a first communication flow comprising said first packet; generating from said first flow index an identifier of a first processor of a plurality of processors of said multiprocessor computer; associating said first processor identifier with said first packet; submitting said first packet for processing by said first processor; searching a flow database for said first flow index, said flow database comprising a collection of flow indexes; and if said first flow index is not found in said flow database, storing said first flow index in said flow database.
- 42. The method of claim 41, further comprising:
if said first flow index is found in said flow database, updating an entry in said flow database associated with said first flow index.
- 43. The method of claim 41, wherein said producing a first flow index comprises:
retrieving from said first packet an identifier of a source of said first packet; and retrieving from said first packet an identifier of a destination of said first packet.
- 44. The method of claim 43, wherein said producing a first flow index further comprises combining said source identifier and said destination identifier.
- 45. The method of claim 41, wherein said producing a first flow index comprises retrieving a virtual connection identifier from said first packet.
- 46. The method of claim 41, further comprising processing a header of said first packet to obtain a buffer address for storing application data from a second packet.
- 47. The method of claim 46, further comprising processing said second packet by a second processor of said plurality of processors.
- 48. A computer readable storage medium storing instructions that, when executed by a computer, cause the computer to perform a method of distributing network traffic processing among a plurality of processors in a multiprocessor computer, the method comprising:
receiving a first packet at a network interface of a multiprocessor computer; producing a first flow index to identify a first communication flow comprising said first packet; generating from said first flow index an identifier of a first processor of a plurality of processors of said multiprocessor computer; associating said first processor identifier with said first packet; submitting said first packet for processing by said first processor; searching a flow database for said first flow index, said flow database comprising a collection of flow indexes; and if said first flow index is not found in said flow database, storing said first flow index in said flow database.
- 49. A method of distributing network traffic processing among a plurality of processors in a multiprocessor computer having a host and a network interface device, comprising:
transferring control of a transport-level connection corresponding to a first type of transport-level protocol from said host to said network interface device; processing, on said host, a second type of transport-level protocol; receiving from a network a first packet corresponding to a second type of transport-level protocol; identifying, by said network interface device, a processor on said host to process said first packet; and submitting said first packet for processing by said first processor.
- 50. The method of claim 49, wherein said first type of protocol is Transport Control Protocol (TCP).
- 51. The method of claim 50, further comprising:
receiving from said network a second packet corresponding said first type of transport-level protocol; and TCP processing a transport layer header of said second packet by said network interface device.
- 52. A multiprocessor computer for receiving and processing packets corresponding to a plurality protocols from a network, the computer comprising:
a host; a network interface device for said host; a first set of instructions, stored on said host, to transfer control of a transport-level connection corresponding to a first type of transport-level protocol from said host to said network interface device; a second set of instructions, stored on said host, to process a second type of transport-level protocol; and a third set of instructions, stored on said network interface device, to identify a processor to process a first packet received from a network and corresponding to said second type of transport-level protocol.
- 53. The multiprocessor computer of claim 52, wherein said processor is disposed in said host.
- 54. The multiprocessor computer of claim 52, wherein said network interface device includes a receive sequencer to analyze network and transport layer information of said first packet.
CROSS REFERENCE TO RELATED APPLICATIONS
[0001] This application claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 10/005,536, filed Nov. 7, 2001, which in turn claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/384,792, filed Aug. 27, 1999, now U.S. Pat. No. 6,434,620, which in turn: 1) claims the benefit under 35 U.S.C. §119 of provisional patent application serial No. 60/098,296, filed Aug. 27, 1998, 2) claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/067,544, filed Apr. 27, 1998, now U.S. Pat. No. 6,226,680, and 3) claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/141,713, filed Aug. 28, 1998, now U.S. Pat. No. 6,389,479. U.S. Pat. No. 6,226,680 in turn claims the benefit under 35 U.S.C. §119 of provisional patent application serial No. 60/061,809 filed Oct. 14, 1997. The present application also claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/464,283, filed Dec. 15, 1999, now U.S. Pat. No. 6,427,173, and claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/514,425, filed Feb. 28, 2000, now U.S. Pat. No. 6,427,171. All of the above-listed applications are incorporated by reference herein.
Provisional Applications (2)
|
Number |
Date |
Country |
|
60098296 |
Aug 1998 |
US |
|
60061809 |
Oct 1997 |
US |
Continuations (2)
|
Number |
Date |
Country |
Parent |
10005536 |
Nov 2001 |
US |
Child |
10438719 |
May 2003 |
US |
Parent |
09384792 |
Aug 1999 |
US |
Child |
10005536 |
Nov 2001 |
US |
Continuation in Parts (3)
|
Number |
Date |
Country |
Parent |
09067544 |
Apr 1998 |
US |
Child |
10005536 |
Nov 2001 |
US |
Parent |
09141713 |
Aug 1998 |
US |
Child |
10005536 |
Nov 2001 |
US |
Parent |
09464283 |
Dec 1999 |
US |
Child |
10438719 |
May 2003 |
US |