US20080301406A1 - System and method for allocating communications to processors in a multiprocessor system - Google Patents

System and method for allocating communications to processors in a multiprocessor system Download PDF

Info

Publication number
US20080301406A1
US20080301406A1 US12135774 US13577408A US2008301406A1 US 20080301406 A1 US20080301406 A1 US 20080301406A1 US 12135774 US12135774 US 12135774 US 13577408 A US13577408 A US 13577408A US 2008301406 A1 US2008301406 A1 US 2008301406A1
Authority
US
Grant status
Application
Patent type
Prior art keywords
communication
plurality
communications
processor
system
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US12135774
Inventor
Van Jacobson
Bob Felderman
Archibald L. Cobbs
Martin Eberhard
Original Assignee
Van Jacobson
Bob Felderman
Cobbs Archibald L
Martin Eberhard
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Application independent communication protocol aspects or techniques in packet data networks
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32High level architectural aspects of 7-layer open systems interconnection [OSI] type protocol stacks

Abstract

In a multiprocessor-system, a system and method assigns communications to processors, processes, or subsets of types of communications to be processed by a specific 5 processor without using a locking mechanism specific to the resources required for assignment.

Description

    FIELD OF THE INVENTION
  • The present invention is related to computer software and more specifically to computer software for processing communications received by a multiprocessor computer system.
  • BACKGROUND OF THE INVENTION
  • Computer systems can process communications from sources and provide responses. In a multiprocessor system, one or more network interface cards (NICs) receive communications, and drive an interrupt signal to one or more of the processors to indicate that a communication has been received. The interrupt resolution system in the computer system allows a driver in one of the processors to respond to the interrupt, so that the communication can be processed and a response may be generated. Because the processors may share the processing of interrupts, the processor containing the driver that responds to the interrupt for a communication received from one source may not be the processor that had responded to the interrupt for a prior communication received from that same source.
  • If the process that ultimately processes the communication requires state information from a prior communication, in the event that the same processor processed the prior communication, the state information may be in the processor's cache. The processing of the communication and the generation of the response in this event is quick and efficient, although an n-multiprocessor system, such efficient processing may only occur 1/n of the time. The remainder of the time, the prior command was processed by a different process or on a different processor, and so the current state information from the prior communications will not be in the cache of the processor that processes the current communication. If, however, a different one of the processors processed the prior communication, the processor responding to the interrupt and processing the subsequent communication must retrieve the state information from memory or disk, adding time to process the communication and produce a response and reducing the throughput of the system. Such inefficient processing occurs (n−1)/n of the time. As n grows to a larger number, the processing efficiency of the system decreases and the average response time increases.
  • Other systems have the potential to improve the efficiency and response time of such systems, but can require complex contention management systems for the routing of messages to prevent the simultaneous access of queues or other resources by different processors, and if the other systems are implemented in hardware, can add hardware costs to the multiprocessor system.
  • What is needed is a system and method that can speed the processing and response to communications in a multiprocessor system without requiring any additional contention management systems and without adding hardware costs to the system.
  • SUMMARY OF INVENTION
  • A system and method uses a set of criteria and/or rules to assign communications to a processor, a process, or a type of communications on a processor, in a multiprocessor system. The criteria and/or rules may be preloaded at system startup, received from one or more processes during system operation, or both. The criteria and/or rules help ensure that any context information from prior communications that may be useful in processing the communication will be in the processor cache of the processor that processes each communication, speeding the processing of that communication without a special contention management system.
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 is a block schematic diagram of a conventional computer system.
  • FIG. 2 is a block schematic diagram of a system for assigning communications in a multiprocessor system according to one embodiment of the present invention.
  • FIG. 3 is a flowchart illustrating a method of assigning communications in a multiprocessor system according to one embodiment of the present invention.
  • FIG. 4 is a flowchart illustrating a method of receiving criteria for communications from processes according to one embodiment of the present invention.
  • FIG. 5 is a flowchart illustrating a method of incorporating criteria received from processes into a set of criteria used to assign communications in a multiprocessor system according to one embodiment of the present invention.
  • DETAILED DESCRIPTION OF A PREFERRED EMBODIMENT
  • The present invention may be implemented as computer 5 software on a conventional computer system. Referring now to FIG. 1, a conventional computer system 150 for practicing the present invention is shown. Processor 160 retrieves and executes software instructions stored in storage 162 such as memory, which may be Random Access Memory (RAM) and may control other components to perform the present invention. Storage 162 may be used to store program instructions or data or both. Storage 164, such as a computer disk drive or other nonvolatile storage, may provide storage of data or program instructions.
  • In one embodiment, storage 164 provides longer term storage of instructions and data, with storage 162 providing storage for data or instructions that may only be required for a shorter time than that of storage 164. Input device 166 such as a computer keyboard or mouse or both allows user input to the system 150. Output 168, such as a display or printer, allows the system to provide information such as instructions, data or other information to the user of the system 150. Storage input device 170 such as a conventional floppy disk drive or CD-ROM drive accepts via input 172 computer program products 174 such as a conventional floppy disk or CD-ROM or other nonvolatile storage media that may be used to transport computer instructions or data to the system 150. Computer program product 174 has encoded thereon computer readable program code devices 176, such as magnetic charges in the case of a floppy disk or optical encodings in the case of a CD-ROM which are encoded as program instructions, data or both to configure the computer system 150 to operate as described below.
  • In one embodiment, each computer system 150 is a conventional SUN MICROSYSTEMS ULTRA workstation running the SOLARIS operating system commercially available from SUN MICROSYSTEMS, Inc. of Mountain View, Calif., a PENTIUM compatible personal computer system such as are available from DELL COMPUTER CORPORATION of Round Rock, Tex. running a version of the WINDOWS operating system (such as 95, 98, Me, XP, NT or 2000) commercially available 20 from MICROSOFT Corporation of Redmond Wash. or a Macintosh computer system running the MACOS or OPENSTEP operating system commercially available from APPLE COMPUTER CORPORATION of Cupertino, Calif. and the NETSCAPE browser commercially available from NETSCAPE COMMUNICATIONS CORPORATION of Mountain View, Calif. or INTERNET EXPLORER browser commercially available from MICROSOFT above, although other systems may be used.
  • Referring now to FIG. 2 a block schematic diagram of system for assigning communications in a multiprocessor system is shown according to one embodiment of the present invention.
  • In one embodiment, all communication into or out of system 200 is made via input/output 208 of communication interface 210 which is coupled to a network such as the Internet or a local area network or both. Communication interface 210 is a conventional communication interface that supports TCP/IP or other conventional communication protocols.
  • A communication is Received and Stored
  • A communication is received by communication interface 210 and communication interface 210 stores the communication in a buffer in buffer storage 232.
  • In one embodiment, buffer storage 232 is part of system storage 230, which is conventional disk storage or memory, and each buffer contains sufficient space to hold the largest possible communication that may be received. When communication interface 210 has completed storing the communication to a buffer in buffer storage 232, communication interface 210 places the address or index of the buffer into which the communication was stored into a specified storage location or queue, such as a storage location or queue within the address space of the communication interface 210 itself, and signals an interrupt on interrupt line 212. Processors 250-251 monitor the interrupt line 212, and one of the processors will be chosen to handle the interrupt, using any conventional multiprocessor interrupt processor selection technique, such as are described in U.S. Pat. No. 5,379,434 issued to DiBrino on Jan. 3, 1995. Two processors 250-251 are shown in FIG. 2, however, any number of processors in a multiprocessor system may be used by the present invention.
  • Each processor 250-251 contains a driver 220-221 to handle the interrupt. The processor 250-251 that responds to the interrupt does so by transferring control to the driver 220-221 on that processor. Each processor 250-251 also runs any number of processes 252-258 that receive and process communications, for such processes 252-258 being shown in the figure, two for each processor 250-251, although any number of processes may be used and the number of processes need not be the same for each processor 250-251. The processes 252-258 can be any conventional process, such as application programs and any other process capable of processing a received communication.
  • Communication Identifier Identifies the Entity to which the Communication Should be Assigned
  • Communication, assigner 222 in the driver 220-221 that handles the interrupt, identifies the entity, such as a processor 250, 251, to which the communication should be assigned.
  • In one embodiment communication assigner 222 can not only identify as the entity to which the communication should be assigned as a processor 250 251, but also may identify as the entity a process 252-258 on that processor 250-251, or identifies as the entity a type (corresponding to a type queue described below) of communications to be processed by the identified processor 250-251 as described in more detail below. The identification and subsequent assignment of a communication to a processor 250, 251, and optionally a specific process 252-258 or type, may be performed in any number of ways, some of which will now be described.
  • In one embodiment, to make the identification, communication assigner 222 retrieves from communication interface 210 the address or index of the buffer into which the communication was stored, reads from buffer storage 232 some or all of the header, or other portion, or all, of the communication using the address or index of the buffer it retrieves, and identifies a corresponding processor 250-251 and/or optionally, a process 252-258 or a type of communications to be processed by a processor 250-251, by performing a function on some or all of the bits in the header of the communication. For example, if the communication is a TCP packet, communication assigner 222 may use the least significant bit of the destination IP address from the header of the communication as the most significant bit of a two-bit result and use the least significant bit of the destination port of the header of the communication as the least significant bit of the result, and then identify a process 252-258 to which the communication should be assigned based on the result. For example, if the result is 00, process 252 is identified as the entity to which the communication should be assigned, if the result is 01, process 254 is identified as the entity to which the communication should be assigned, if the result is 10, process 256 is identified as the entity to which the communication should be assigned, and if the result is 11, process 258 is identified as the entity to which the communication should be assigned.
  • A similar technique may be used to assign communications to processors 250-251 if it is not desirable to assign communications directly to processes. This may be because there are multiple processes on the same processor that can process a given communication, and pooling such communications for processing by any capable process can ensure that they are processed in a manner that more closely corresponds to the order in which they are received, while ensuring that any such process has access to the context information in the processor cache from processing prior communications. This can also allow the processes to retrieve communications using conventional operating system calls, provided that the communications identified for each processor are placed into a data structure compatible with the operating system. As an example of the manner in which a processor may be identified as the entity to which the communication is assigned, the two bits in the result described above may be exclusive, and if result of the exclusive or is 1, 20 processor 250 is identified as the entity to which the communication should be assigned and if the result of the exclusive or is 0, processor 251 is identified as the entity to which the communication should be assigned.
  • A similar technique may be used to identify communications as a type of communications to be processed by a given processor. The identification, and subsequent assignment of a communication to a type of communications to be processed by a certain processor allows assignment to processes that can process that type of communication, without assigning the communication to a specific process, so that it may be processed more closely to the order in which it was received. In addition, as described in more detail below, a process on a processor that processes communications of a given type may retrieve such communications directly from the data structure for that type and processor, without an intervening process or operating system to distribute communications to those processes that can process them. In the example above, if the result is 00, the communication is identified as being a first type on processor 250, if the result is 01, the communication is identified as being a second type on processor 250, if the result is 10, the communication is identified as being a first type on processor 251, and if the result is 11, the communication is identified as being a second type on processor 251. As described in more detail below, each type and processor has its own queue, and so the entity identified as the entity to which the communication should be assigned is the queue corresponding to the type and processor.
  • The above were representative functions used to identify as the entity to which the communication should be assigned as a process, processor or queue for a type of communication to be processed by a certain processor.
  • However, in other embodiments, other functions of arbitrary complexity may be used on any portion of the header to assign the communication. For example, a hash function on any or all of the source and destination IP addresses and ports and the protocol may be used in place of assignment of bits as described above. The contents of the message may be used for the function and other information other than the TCP header, such as an IP header, or even the time of day or a random number or pseudo-random number may be used to identify the entity to use for assignment of the communication.
  • In other embodiments of the present invention, lookup tables and the like may be used in place of the function, or in addition to it. In one embodiment, the lookup table may be pre-stored in processor identifier storage 234. Each row in the lookup table may contain a criteria (for example source IP address and port, followed by destination address and port, followed by protocol, with don't care symbols as wildcards) that, can be compared to some or all of the communication or other information (e.g. date and time) to determine whether the communication corresponds to that row in the lookup table. Other information in each row of the lookup table can be used to identify a process, processor or type of communication to be processed by a processor, to which the communication should be assigned when the communication corresponds to the criteria in the row. For example, an identifier of a queue in queue storage (described below) corresponding to the processor, process or type queue in queue storage 236 (described below) to which the communication should be assigned if it corresponds to the criteria of the row may be stored as another column of the table. The lookup table may be supplied prefilled, read into assignment criteria storage 234 from a file at system startup by update manager 240, or may be filled in response to messages received from processes 252-258 or other processes as described in more 20 detail below. Because the drivers 220-221 respond to interrupts, only one driver 220-221 will access the lookup table in assignment criteria storage 234 at a given time, and thus, drivers 220-221 may share a single lookup table, although in other embodiments, each driver 220-221 has its own lookup table, which may be a copy of the others, or may contain differences representing the preference for assigning communications to the processor 250-251 on which the driver 220-221 executes as described below.
  • Resolution Between Conflicting Entities
  • More complex functions may be performed on the communications received than those described above, some of which may not be mutually exclusive, or the criteria in the table entries may overlap. In such embodiment, the communication being assigned in the manner described herein may meet the criteria for any of several rows in the table.
  • In one such embodiment, communication assigner 222 may use an internally stored set of rules, such as to prefer assignment to the processor 250-251 on which the communication assigner 222 making the assignment runs, and to prefer assignment corresponding to a specific process 252-258 ahead of assignment for a type of communication, and to prefer such assignment for a type of communication ahead of assignment for the processor 250-251. To allow such preferences to be expressed, the type of entity to which the communication corresponding to the criteria will be assigned is stored with the criteria in assignment criteria storage 234 or it may be implied from the identifier of the queue to which the communication should be assigned.
  • In one embodiment, ranges of process identifiers capable of being assigned to processes running on each processor 250-251 and identifiers of the processors 250-251 themselves may be stored in assignment criteria storage, and the table rows reference the processor identifiers and/or process identifiers to allow communication assigner 222 (which internally stores the identifier of the processor 250-251 on which it operates as described below) to assign communications in accordance with these internally stored preference rules. Each row in the table in assignment criteria storage 234 may contain a preference field that communication assigner 222 can use to resolve the criteria for multiple rows matching a communication. Remaining ties may be broken at random, round robin, or other conventional ways of breaking ties.
  • Assigning the Communication to a Queue Corresponding to the Entity Identified
  • After the assignment identification is made by 20 communication assigner 222 as described above, in one embodiment, communication assigner 222 assigns the communication to a queue or other storage in queue storage 236 that corresponds to the entity identified. To assign a communication to a processor, a type of communications within a processor, or a process on a processor, the pointer to the communication is provided to the end of a corresponding queue in queue storage 236, which is a part of system storage 230. Queue storage 236, described in more detail below, contains queues for each processor in one embodiment, each process in another embodiment, or for each type of communication for a given processor, in still another embodiment.
  • Another embodiment may employ any combination of these, for example, having one queue per process, and a queue for the processor to handle communications that do not meet the criteria for assignment to a particular process.
  • In one embodiment, queue storage 236 is composed of several queues. The head pointer and tail pointer for each queue is stored in one part of queue storage 236 and the contents of each queue are stored in a different part of queue storage 236. The pointers for queues of each type (e.g. process queues, processor queues and queues for communications designated as being of a certain type to be processed on a certain processor) can be stored together in a logical order such as the order of the identifier of the process, processor or type, so that an offset corresponding to the queue can be identified from the process, processor 17 or type to which the communication should be assigned, identified as described above. The offset from a base address of the queue into which the communication matching the criteria should be stored, is stored in the table entry or may be calculated using the result of the function. The address or offset may be a function of the type of queue (e-g. processes have one base address, processors have another and types of communications assigned to a processor have another base address). In the case of a processor or process, the identifier of the processor and process may be used to calculate the offset (e.g. every queue has two words: a head pointer and a tail. pointer, and therefore, the address of the queue for processor is the base address for processor queues+6 words). In the case of types, a type identifier may be provided by the application with the criteria, and the type identifier is used to calculate the offset in the manner described above for the processor identifier. In other embodiments, pending assignment manager 228 may provide the base address and offset from a base address for an unused queue that corresponds to the criteria received, in response to receipt of the criteria.
  • The address of the queue contains a head pointer and a tail pointer of the queue. Storage for the contents of the queue is also located in queue storage 236 at another location, with sufficient space for each queue based on the expected traffic for the type of queue or the various types of queues. Although the description above describes the identification of the entity to which the communication should be assigned, and then the assignment of the, communication to a queue corresponding to that entity, in one embodiment, the identification of the entity may be performed by identifying the queue corresponding to the entity. In such embodiment, the actual identity of the entity that corresponds to the queue need not be “known”, as the queue acts as a surrogate for an identifier of the entity.
  • Processes can Control the Identification and Assignment Process by Supplying Rows to be Incorporated into the Table
  • In one embodiment, each process 252-258 may instruct pending assignment manager 228 that it desires to handle communications meeting a certain criteria. For example, a process 252-258 may instruct pending assignment manager 228 in the driver 220-221 for the processor 250-251 on which the process 252-258 is running that it wishes to handle communications having a particular destination port and protocol by providing this criteria (for example, using the format of the criteria column of the table described above) and the identifier of the process, and an optional preference value as described above. Alternatively, a representative process 252-258 of a processor 250-251 may provide multiple rows of the table on behalf of other processes 252-258 running on that processor 250-251 to pending assignment manager 228 on the same processor 250-251 as the process supplying the information. Pending assignment manager 228 stores the information at the end of a pending assignment criteria queue for that driver 220 221 in pending assignment storage 238, which contains one such queue for each driver 220-221. Because the processes 252-258 can provide this information at any time, including having one process 252-258 on each different processor 250-251 send such information simultaneously, the use of separate driver queues eliminates the requirement of a locking mechanism that would otherwise be required to prevent the simultaneous use of assignment criteria storage 234.
  • In one embodiment, a separate queue exists in pending assignment storage 238 for each process 252-258 or for each process 252-258 that may provide such information to pending assignment manager 228 to avoid locking requirements that could otherwise be necessary for the per-driver queues described above, to account for scheduling conflicts that could occur if another process interrupts the storage of the information into the per driver queue. A locking mechanism may also be employed on the pending assignment criteria queue on the assumption that such a mechanism will not cause delays too frequently. The information in pending assignment storage 238 may be transferred into assignment criteria storage 234 at a later time, in any of a number of different ways.
  • In one embodiment, update manager 240 periodically halts the operation of drivers 220-221 to add the entries in all of the queues in pending assignment storage 238 to the lookup table in assignment criteria storage 234. At system shutdown, update manager 240 incorporates any pending entries from pending assignment storage 238 into the table or tables in assignment criteria storage 234 and then saves the table or tables into disk storage. At system startup, update manager 240 reads the file and stores the table contained therein into the table or tables in assignment criteria storage 234, and then installs the remainder of the drivers 220-221 to allow them to begin operating.
  • In embodiments in which there are multiple lookup tables in assignment criteria storage 234, update manager 240 may add the information from the entries in pending assignment storage 238 into all of the tables, or some of the tables, or may add one version into one or more tables and another version into one or more different tables (e.g. adding different preference values for each table to be used by the driver 220-221 running on the processor 250-251 corresponding to the queue to which the communication should be assigned so that communication assigner 222 need not use the type of the assignment to determine the preference as described above.
  • In another embodiment, entries from the queue corresponding to the driver (or the queues for the processes that provide information to that driver) in pending assignment storage 238 are incorporated into assignment criteria storage 234, during the operation of 20 that driver. In such embodiment, after communication assigner 222 completes the assignment of a communication as described herein, it signals incorporation manager 224, which scans just the pending assignment queue or queues in pending assignment storage 238 which contains criteria and other information received from processes of the processor on which incorporation manager 224 is being executed, and updates in assignment criteria storage 234 the lookup table or tables used by all drivers 220-221 that share a communication resource with the driver containing that incorporation manager 224, before returning program control to the processor 250-251. Although this process only updates assignment criteria storage 234 with information from a single processor 250-251, as the other drivers 220-221 assign communications, they will use their pending assignment criteria queues to update the table or tables. Because only one driver 220-221 of the drivers that share a communication resource operates at any given time, contention for the table or tables in assignment criteria, storage 234 used by those drivers is avoided, eliminating the need for a locking mechanism to prevent simultaneous access to the table or tables in assignment criteria storage 234. If the processor 250-251 will prioritize the driver ahead of any processes that operate on that processor 250-251, interference involving the pending criteria queues is eliminated, and thus, using this embodiment, updates may occur more frequently than would otherwise be possible if system initialization and periodic updates were the only time the pending criteria were applied to the table or tables.
  • Processes Retrieve Communications from an Operating System or Directly from a Queue, Bypassing the Operating System.
  • As described herein, the assignment of communications to processors, processes or types of communications for a processor are made without use of the operating system of the multiprocessor computer system. In one embodiment, communications are assigned to processor queues as described above.
  • In such embodiment, the operating system (not shown) running on each processor reads the processor queue and provides communications to processes 252-258 as if the processor queue was the queue from the communication interface 210.
  • In such embodiment, communication assigner 222 can provide a software interrupt to the processor corresponding to the processor to which, the communication was assigned, to simulate a communication interface providing such interrupt.
  • In such embodiment, processes 252-258 request communications using conventional operating system calls such as socket calls, and the operating system may process them with little or no change to the code for processing communication's received from a communication interface 210 in the conventional manner.
  • In another embodiment, each process 252-258 may retrieve communications corresponding to the pointers in the various queues in queue storage 236. A process 252-258 may retrieve a communication corresponding to a pointer in a queue corresponding to that process 252-258, without employing a locking capability because no other process will retrieve communications from that queue. A process 252-258 may retrieve a communication corresponding to a pointer in a queue corresponding to the processor 250-251 on which the process 252-258 runs. A process 252-258 may retrieve a communication corresponding to a pointer in a queue corresponding to the processor 250-251 on which the process 252-258 runs that also corresponds to a type of communication processed by that process. A locking mechanism may be used for the last two techniques, or a separate process may handle providing pointers to the communication from each such queue using queued requests for communications. A process 252-258 may retrieve a communication from any combination of the above, in other embodiments of the present invention. This arrangement can bypass the operating system (not shown) under which each of the processes 252-258 run, to receive and to provide communications to the processes 252-258.
  • No Lockins Required
  • Because communication interface 210 provides only a single interrupt at a time, and each driver 220-221 has control of the processor 250-251 on which it resides during the time it is responding to the interrupt, there is no contention for the criteria in assignment criteria storage 234, and if internally stored functions are used in the communication assigners 222, contention for the criteria is eliminated. Because only one communication resource device interrupt will be processed at a time, contention among drivers for the queues in queue storage 236 is avoided as well. Furthermore, because the processes 252-258 (or operating system) retrieve pointers to communications from the head of the queues in queue storage 236, and each driver 220-221 adds pointers to communications to the end of the queues in queue storage 236, there is no contention for the pointers to the queues in queue storage 236, other than a check, using the end of the queue, that the processes 252-258 make to verify that the queue is not empty. If, when a communication pointer is added to the end of a queue, the end of the queue pointer is updated after the pointer, to the communication is written to the queue, and the end of queue pointer is not greater than a single data word, the memory bus contention controls will accommodate the contention issues between the drivers 250-251 and the processes 252-258 and eliminate the need for a locking mechanism dedicated to preventing contention for the queues in queue storage 236. If there are multiple communication interfaces 210, 214 supplying communications to the various drivers 220-221, 214, if all of the communication interfaces 210-214 share a single interrupt, conventional interrupt contention controls will accommodate the contention issues. Alternatively, the communication interfaces 210, 214 may be divided into pools of one or more communication interfaces 210, 214 (each pool referred to as a “communication resource”) and each communication resource may share an interrupt, which is serviced by a set of one or more drivers.
  • In one such embodiment, the drivers in the set assign communications in such a manner that they may only be processed by processes 252-258 operating on processors on which the drivers in the set execute. Thus, unless otherwise noted, the present invention may operate to provide communications without the use of a locking mechanism that is specific to the queues in queue storage 236 or the lookup table or tables in assignment criteria storage 234. A locking mechanism is a mechanism in which processes and/or, drivers check the availability of a shared resource such as queues or other memory resources before using it to ensure that it is not being used by another process and/or driver. In the circumstance in which a locking mechanism indicates the shared resource is in use, the process or driver that checked the availability of the shared resource may have to sit idle and check it again, wasting processor cycles. Even if the shared resource is available, the requirement that the locking mechanism be checked each time can use significant ‘processing resources not required by various embodiments of the present invention, which does not employ such a locking mechanism. As such, communications are stored, assigned and provided to processes or queues by the present invention “sinelockingly”, which means “without the use of a locking mechanism that is dedicated to the use of storage, and/or the assignment, and/or the providing, of communications received by a computer system”. The memory bus contention mechanisms and interrupt contention mechanisms used as described above do not affect whether a communication is stored, assigned or provided to processes sinelockingly because they are not dedicated to such use: they have other uses.
  • Methods
  • Referring now to FIG. 3, a method of assigning communications received is shown according to one embodiment of the present invention. Control is transferred in response to an interrupt received as described above 310. An assignment is identified 312 from some or all of the communication as described above. The assignment may be identified using a calculation, or using a lookup table as described above to identify the entity or queue (corresponding to a process, processor or type of communication to be processed by a processor) to which, the communication should be assigned. The method continues at step 322. At step 322, the assignment identified in step 312 is made to a queue corresponding to a processor, process or type of communication on a processor and the method continues at step 310. Step 322 may include providing an interrupt to the processor corresponding to the queue to which the communication was assigned and other actions to simulate receipt of the communication for processing in a conventional fashion as described above.
  • In one embodiment, illustrated by the dashed lines in the Figure, instead of continuing at step 310, after step 322, a pending assignment criteria queue for the processor on which the method of FIG. 3 is being executed is checked 324. If there are pending assignment criteria in that queue 326, the criteria in that queue are applied to the criteria used to assign communications, the queue is set to empty 328 and the method continues at step 310. Referring now to FIG. 4, a method of receiving criteria from a process describing communications it can process is shown according to one embodiment of the present invention. The criteria, and an indication of the process or processor or a type to which communications meeting the criteria should be assigned is received 410. The information received in step 410 may include an indication 20 that the process should be rescheduled for the processor on which the driver assigning the communication is operating, as described above. The criteria and other information are stored 412 into a pending assignment criteria queue or other storage device, awaiting incorporation into a set of criteria. Storage may be performed by converting the information received into one or more table entries as described above, including adding a preference value to the table entry for each such criteria for use as described I above. Referring now to FIG. 5, a method of incorporating information received from processes into a set of criteria used to assign communications is shown according to one embodiment of the present invention. An update signal is received 510. The update signal may be received as a part of a system initialization or may be periodically performed as described above. If there are pending assignment criteria awaiting incorporation 512, the criteria and related information described above, such as an identifier, f the processor, process, or type of communications assigned to a processor, preference information, and whether the assignment should be made to a process running on a processor on which the assignment is being made, are incorporated into the criteria used to assign communications 514 and the method continues at step 516. Otherwise 512, the method continues at step 516. At step 516, the method terminates.

Claims (13)

  1. 1. In a computer system comprising a plurality of processors separately capable of responding to an interrupt from a communication interface, a method of assigning each of a plurality of communications, the method comprising:
    5 receiving at a first processor a first communication of the plurality; responsive to at least a portion of the communication received, sinelockingly assigning, at the first processor, the first communication to, at least one selected from a 10 first one of the plurality of processors, a first one of the plurality of processes and first one of the plurality of types of communications to be processed by one of the plurality of processors;
    receiving at a second processor a second communication 15 of the plurality; and responsive to at least a portion of the communication received, sinelockingly assigning, at the second processor, the second communication to at least one selected from a second one of the plurality of processors, a second one of 20 the plurality of processes and a second one of the plurality of types of communications to be processed by one of the plurality of processors.
  2. 2. The method of claim 1 wherein each of at least one of the assigning steps is additionally responsive to information received from at least one of the plurality of processes.
  3. 3. The method of claim 1 wherein:
    during and after the receiving the first communication step, and prior to and before and during the assigning the first communication step, the first communication is not 5 provided to, or received from, an operating system;
    and during and after the receiving the second communication step, and prior to and before and during the assigning the second communication step, the second communication is not provided to, or received from, an 10 operating system.
  4. 4. The method of claim 1 wherein at least one selected from: the first one of the plurality of processors comprises the second one of the plurality of processors;
    the first one of the plurality of processes comprises the, second one of the plurality of processes;
    and the first one of the plurality of types of communications to be processed by one of the plurality of processors comprises the second one of the plurality of 10 types of communications to be processed by one of the plurality of processors
  5. 5. The method of claim 1 wherein: the first communication and the second communication comprise TCP packets;
    and the at least the portions of the first communication 5 and the second communication comprise TCP headers of the first communication and the second communication.
  6. 6. The method of claim 1, wherein:
    the assigning the first communication step comprises assigning the first communication to a first one of a plurality of queues;
    5 the assigning the second communication step comprises 1 assigning the second communication to a second one of the plurality of queues;
    and each of the first processor and the second processor is capable of assigning the plurality of communications to 10 the first queue and the second queue.
  7. 7. The method of claim 1 wherein the assigning steps are responsive to at least one function.
  8. 8. The method of claim 1 wherein the assigning steps are responsive to at least one set of criteria.
  9. 9. A system for allocating a plurality of received communications comprising:
    a plurality of processors forming a multiprocessor system that hosts an operating system, each processor equipped with a driver containing a communications assignor and at least one process that receives and processes communications;
    a system storage communicatively coupled with the plurality of processors, the system storage having at least one buffer that is identifiable by an index and adapted to store at least one of the plurality of received communications; and
    a communication interface communicatively coupled with the plurality of processors and the system storage and configured to receive the plurality of communications, the communication interface including an address space having at least one queue adapted to store the index identifying the at least one buffer in the system storage that stores the at least one of the plurality of received communications,
    wherein the at least one process on each processor is adapted to receive and process the received communications cooperatively with the system storage and independently of the operating system and any form of locking mechanism to enable coordinated access to the system storage by the plurality of processors.
  10. 10. The system of claim 9 wherein the system storage is selected from the group consisting of a disk storage and memory.
  11. 11. The system of claim 9 wherein each communication in the plurality of received communications is characterized by a size bounded by a maximal size and the at least one buffer is configured to store at least one of the plurality of received communications having the maximal size.
  12. 12. The system of claim 9 wherein the process on each processor is an application program adapted to process at least one of the plurality of received communications.
  13. 13. The system of claim 9 wherein the plurality of received communications are TCP packets.
US12135774 2003-01-06 2008-06-09 System and method for allocating communications to processors in a multiprocessor system Abandoned US20080301406A1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US10337177 US7386619B1 (en) 2003-01-06 2003-01-06 System and method for allocating communications to processors in a multiprocessor system
US12135774 US20080301406A1 (en) 2003-01-06 2008-06-09 System and method for allocating communications to processors in a multiprocessor system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US12135774 US20080301406A1 (en) 2003-01-06 2008-06-09 System and method for allocating communications to processors in a multiprocessor system

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US10337177 Continuation US7386619B1 (en) 2003-01-06 2003-01-06 System and method for allocating communications to processors in a multiprocessor system

Publications (1)

Publication Number Publication Date
US20080301406A1 true true US20080301406A1 (en) 2008-12-04

Family

ID=39484503

Family Applications (2)

Application Number Title Priority Date Filing Date
US10337177 Expired - Fee Related US7386619B1 (en) 2003-01-06 2003-01-06 System and method for allocating communications to processors in a multiprocessor system
US12135774 Abandoned US20080301406A1 (en) 2003-01-06 2008-06-09 System and method for allocating communications to processors in a multiprocessor system

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US10337177 Expired - Fee Related US7386619B1 (en) 2003-01-06 2003-01-06 System and method for allocating communications to processors in a multiprocessor system

Country Status (1)

Country Link
US (2) US7386619B1 (en)

Cited By (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100049876A1 (en) * 2005-04-27 2010-02-25 Solarflare Communications, Inc. Packet validation in virtual network interface architecture
US20100057932A1 (en) * 2006-07-10 2010-03-04 Solarflare Communications Incorporated Onload network protocol stacks
US20100135324A1 (en) * 2006-11-01 2010-06-03 Solarflare Communications Inc. Driver level segmentation
US20100161847A1 (en) * 2008-12-18 2010-06-24 Solarflare Communications, Inc. Virtualised interface functions
US20110023042A1 (en) * 2008-02-05 2011-01-27 Solarflare Communications Inc. Scalable sockets
US20110087774A1 (en) * 2009-10-08 2011-04-14 Solarflare Communications Inc Switching api
US20110149966A1 (en) * 2009-12-21 2011-06-23 Solarflare Communications Inc Header Processing Engine
US20110173514A1 (en) * 2003-03-03 2011-07-14 Solarflare Communications, Inc. Data protocol
US8533740B2 (en) 2005-03-15 2013-09-10 Solarflare Communications, Inc. Data processing system with intercepting instructions
US8543729B2 (en) 2007-11-29 2013-09-24 Solarflare Communications, Inc. Virtualised receive side scaling
US8612536B2 (en) 2004-04-21 2013-12-17 Solarflare Communications, Inc. User-level stack
US8635353B2 (en) 2005-06-15 2014-01-21 Solarflare Communications, Inc. Reception according to a data transfer protocol of data directed to any of a plurality of destination entities
US8650569B2 (en) 2005-03-10 2014-02-11 Solarflare Communications, Inc. User-level re-initialization instruction interception
US8737431B2 (en) 2004-04-21 2014-05-27 Solarflare Communications, Inc. Checking data integrity
US8763018B2 (en) 2011-08-22 2014-06-24 Solarflare Communications, Inc. Modifying application behaviour
US8782642B2 (en) 2005-03-15 2014-07-15 Solarflare Communications, Inc. Data processing system with data transmit capability
US8817784B2 (en) 2006-02-08 2014-08-26 Solarflare Communications, Inc. Method and apparatus for multicast packet reception
US8855137B2 (en) 2004-03-02 2014-10-07 Solarflare Communications, Inc. Dual-driver interface
US8868780B2 (en) 2005-03-30 2014-10-21 Solarflare Communications, Inc. Data processing system with routing tables
US8954613B2 (en) 2002-09-16 2015-02-10 Solarflare Communications, Inc. Network interface and protocol
US8959095B2 (en) 2005-10-20 2015-02-17 Solarflare Communications, Inc. Hashing algorithm for network receive filtering
US8996644B2 (en) 2010-12-09 2015-03-31 Solarflare Communications, Inc. Encapsulated accelerator
US9003053B2 (en) 2011-09-22 2015-04-07 Solarflare Communications, Inc. Message acceleration
US9008113B2 (en) 2010-12-20 2015-04-14 Solarflare Communications, Inc. Mapped FIFO buffering
US9210140B2 (en) 2009-08-19 2015-12-08 Solarflare Communications, Inc. Remote functionality selection
US9258390B2 (en) 2011-07-29 2016-02-09 Solarflare Communications, Inc. Reducing network latency
US9256560B2 (en) 2009-07-29 2016-02-09 Solarflare Communications, Inc. Controller integration
US9300599B2 (en) 2013-05-30 2016-03-29 Solarflare Communications, Inc. Packet capture
US9384071B2 (en) 2011-03-31 2016-07-05 Solarflare Communications, Inc. Epoll optimisations
US9391841B2 (en) 2012-07-03 2016-07-12 Solarflare Communications, Inc. Fast linkup arbitration
US9391840B2 (en) 2012-05-02 2016-07-12 Solarflare Communications, Inc. Avoiding delayed data
US9426124B2 (en) 2013-04-08 2016-08-23 Solarflare Communications, Inc. Locked down network interface
US9600429B2 (en) 2010-12-09 2017-03-21 Solarflare Communications, Inc. Encapsulated accelerator
US9674318B2 (en) 2010-12-09 2017-06-06 Solarflare Communications, Inc. TCP processing for devices
US9686117B2 (en) 2006-07-10 2017-06-20 Solarflare Communications, Inc. Chimney onload implementation of network protocol stack
US9948533B2 (en) 2006-07-10 2018-04-17 Solarflare Communitations, Inc. Interrupt management
US10015104B2 (en) 2005-12-28 2018-07-03 Solarflare Communications, Inc. Processing received data

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7386619B1 (en) * 2003-01-06 2008-06-10 Slt Logic, Llc System and method for allocating communications to processors in a multiprocessor system
US7543306B2 (en) * 2003-07-02 2009-06-02 Intel Corporation Method, system, and program for handling device interrupts in a multi-processor environment
US8024504B2 (en) * 2008-06-26 2011-09-20 Microsoft Corporation Processor interrupt determination
US20090327556A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Processor Interrupt Selection
US8346975B2 (en) 2009-03-30 2013-01-01 International Business Machines Corporation Serialized access to an I/O adapter through atomic operation
US9703742B2 (en) * 2014-09-26 2017-07-11 Intel Corporation Unified device interface for a multi-bus system

Citations (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4622633A (en) * 1983-12-06 1986-11-11 Tri Sigma Corporation Object building method for self configuring computer network
US4884192A (en) * 1984-08-16 1989-11-28 Sharp Kabushiki Kaisha Information processor capable of data transfer among plural digital data processing units by using an active transmission line having locally controlled storage of data
US5161193A (en) * 1990-06-29 1992-11-03 Digital Equipment Corporation Pipelined cryptography processor and method for its use in communication networks
US5367681A (en) * 1990-12-14 1994-11-22 Sun Microsystems, Inc. Method and apparatus for routing messages to processes in a computer system
US5369749A (en) * 1989-05-17 1994-11-29 Ibm Corporation Method and apparatus for the direct transfer of information between application programs running on distinct processors without utilizing the services of one or both operating systems
US5379434A (en) * 1992-12-18 1995-01-03 International Business Machines Corporation Apparatus and method for managing interrupts in a multiprocessor system
US5406322A (en) * 1992-03-18 1995-04-11 The Whitaker Corporation Packet-switched ring network having direct access to low and high bandwidth memories
US5437031A (en) * 1990-10-10 1995-07-25 Fuji Xerox Co., Ltd. Interprocess communications control system
US5452452A (en) * 1990-06-11 1995-09-19 Cray Research, Inc. System having integrated dispatcher for self scheduling processors to execute multiple types of processes
US5485626A (en) * 1992-11-03 1996-01-16 International Business Machines Corporation Architectural enhancements for parallel computer systems utilizing encapsulation of queuing allowing small grain processing
US5594869A (en) * 1990-06-29 1997-01-14 Digital Equipment Corporation Method and apparatus for end-to-end encryption of a data packet in a computer network
US5657390A (en) * 1995-08-25 1997-08-12 Netscape Communications Corporation Secure socket layer application program apparatus and method
US5761534A (en) * 1996-05-20 1998-06-02 Cray Research, Inc. System for arbitrating packetized data from the network to the peripheral resources and prioritizing the dispatching of packets onto the network
US5922057A (en) * 1997-01-10 1999-07-13 Lsi Logic Corporation Method for multiprocessor system of controlling a dynamically expandable shared queue in which ownership of a queue entry by a processor is indicated by a semaphore
US5940870A (en) * 1996-05-21 1999-08-17 Industrial Technology Research Institute Address translation for shared-memory multiprocessor clustering
US6006264A (en) * 1997-08-01 1999-12-21 Arrowpoint Communications, Inc. Method and system for directing a flow between a client and a server
US6032179A (en) * 1996-08-14 2000-02-29 Mitsubishi Electric Information Technology Center America, Inc. (Ita) Computer system with a network interface which multiplexes a set of registers among several transmit and receive queues
US6094485A (en) * 1997-09-18 2000-07-25 Netscape Communications Corporation SSL step-up
US6094435A (en) * 1997-06-30 2000-07-25 Sun Microsystems, Inc. System and method for a quality of service in a multi-layer network element
US6119230A (en) * 1997-10-01 2000-09-12 Novell, Inc. Distributed dynamic security capabilities
US6131113A (en) * 1998-02-24 2000-10-10 International Business Machines Corporation Managing a shared resource in a multi-processor system
US6189065B1 (en) * 1998-09-28 2001-02-13 International Business Machines Corporation Method and apparatus for interrupt load balancing for powerPC processors
US6223287B1 (en) * 1998-07-24 2001-04-24 International Business Machines Corporation Method for establishing a secured communication channel over the internet
US6246683B1 (en) * 1998-05-01 2001-06-12 3Com Corporation Receive processing with network protocol bypass
US6253250B1 (en) * 1999-06-28 2001-06-26 Telocity, Incorporated Method and apparatus for bridging a plurality of buses and handling of an exception event to provide bus isolation
US20010005883A1 (en) * 1999-12-08 2001-06-28 Michael Wray Security protocol
US6263437B1 (en) * 1998-02-19 2001-07-17 Openware Systems Inc Method and apparatus for conducting crypto-ignition processes between thin client devices and server devices over data networks
US6265885B1 (en) * 1999-09-02 2001-07-24 International Business Machines Corporation Method, apparatus and computer program product for identifying electrostatic discharge damage to a thin film device
US6292900B1 (en) * 1996-12-18 2001-09-18 Sun Microsystems, Inc. Multilevel security attribute passing methods, apparatuses, and computer program products in a stream
US6317831B1 (en) * 1998-09-21 2001-11-13 Openwave Systems Inc. Method and apparatus for establishing a secure connection over a one-way data path
US20010047474A1 (en) * 2000-05-23 2001-11-29 Kabushiki Kaisha Toshiba Communication control scheme using proxy device and security protocol in combination
US20020004898A1 (en) * 2000-05-01 2002-01-10 Droge John C. System and method for highly secure data communications
US6345041B1 (en) * 1996-10-24 2002-02-05 Hewlett-Packard Company Method and apparatus for automatic load-balancing on multisegment devices
US6345327B1 (en) * 1999-02-19 2002-02-05 International Business Machines Corporation Queuing method and apparatus for providing direct data processing access using a queued direct input-output device
US6370657B1 (en) * 1998-11-19 2002-04-09 Compaq Computer Corporation Hot processor swap in a multiprocessor personal computer system
US6377993B1 (en) * 1997-09-26 2002-04-23 Mci Worldcom, Inc. Integrated proxy interface for web based data management reports
US6389462B1 (en) * 1998-12-16 2002-05-14 Lucent Technologies Inc. Method and apparatus for transparently directing requests for web objects to proxy caches
US6412026B1 (en) * 1994-05-05 2002-06-25 Lars Oliver Graf System for managing a group of computers by performing automatic actions based on the identified computer conditions
US20020097717A1 (en) * 2001-01-22 2002-07-25 Vinsel Peter C. Microkernel architecture-based forwarder
US6434153B1 (en) * 1999-02-25 2002-08-13 Hitachi, Ltd. Packet communication system with QoS control function
US6438651B1 (en) * 1999-11-01 2002-08-20 International Business Machines Corporation Method, system, and program for managing requests to a cache using flags to queue and dequeue data in a buffer
US6453366B1 (en) * 1999-02-18 2002-09-17 International Business Machines Corporation Method and apparatus for direct memory access (DMA) with dataflow blocking for users
US6457042B1 (en) * 1999-09-30 2002-09-24 International Business Machines Corporation Dynamic construction of complex execution environments
US20020165896A1 (en) * 2001-05-02 2002-11-07 Kim Jason Seung-Min Multiprocessor communication system and method
US6484224B1 (en) * 1999-11-29 2002-11-19 Cisco Technology Inc. Multi-interface symmetric multiprocessor
US6484257B1 (en) * 1999-02-27 2002-11-19 Alonzo Ellis System and method for maintaining N number of simultaneous cryptographic sessions using a distributed computing environment
US6519686B2 (en) * 1998-01-05 2003-02-11 Intel Corporation Information streaming in a multi-process system using shared memory
US20030046464A1 (en) * 2001-08-31 2003-03-06 Keshav Murty Mechanism for interrupt handling in computer systems that support concurrent execution of multiple threads
US20030163589A1 (en) * 2002-02-25 2003-08-28 International Business Machines Corporation Pipelined packet processing
US20030177292A1 (en) * 1999-04-06 2003-09-18 Serge Smirnov Data format for a streaming information appliance
US6636928B1 (en) * 2000-02-18 2003-10-21 Hewlett-Packard Development Company, L.P. Write posting with global ordering in multi-path systems
US6651131B1 (en) * 2000-09-06 2003-11-18 Sun Microsystems, Inc. High bandwidth network and storage card
US6650640B1 (en) * 1999-03-01 2003-11-18 Sun Microsystems, Inc. Method and apparatus for managing a network flow in a high performance network interface
US20040024946A1 (en) * 2002-07-29 2004-02-05 Naumann Mark W. Scalable on chip network
US6711607B1 (en) * 2000-02-04 2004-03-23 Ensim Corporation Dynamic scheduling of task streams in a multiple-resource system to ensure task stream quality of service
US20040062245A1 (en) * 2002-04-22 2004-04-01 Sharp Colin C. TCP/IP offload device
US6717913B1 (en) * 1999-02-23 2004-04-06 Alcatel Multi-service network switch with modem pool management
US6728256B1 (en) * 1997-11-27 2004-04-27 Alcatel Shared buffer control device
US6738821B1 (en) * 1999-01-26 2004-05-18 Adaptec, Inc. Ethernet storage protocol networks
US20040098510A1 (en) * 2002-11-15 2004-05-20 Ewert Peter M. Communicating between network processors
US6742063B1 (en) * 1999-07-15 2004-05-25 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for efficient transfer of data packets
US20040117598A1 (en) * 2002-12-12 2004-06-17 International Business Machines Corp. Method and data processing system for microprocessor communication in a cluster-based multi-processor wireless network
US6754819B1 (en) * 2000-07-06 2004-06-22 General Dynamics Decision Systems, Inc. Method and system for providing cryptographic services in a distributed application
US6829769B2 (en) * 2000-10-04 2004-12-07 Microsoft Corporation High performance interprocess communication
US6862292B1 (en) * 2000-04-13 2005-03-01 International Business Machines Corporation Method and system for network processor scheduling outputs based on multiple calendars
US6862282B1 (en) * 2000-08-29 2005-03-01 Nortel Networks Limited Method and apparatus for packet ordering in a data processing system
US20050138624A1 (en) * 2001-06-01 2005-06-23 Microsoft Corporation Methods and systems for creating and communicating with computer processes
US6928482B1 (en) * 2000-06-29 2005-08-09 Cisco Technology, Inc. Method and apparatus for scalable process flow load balancing of a multiplicity of parallel packet processors in a digital communication network
US6938085B1 (en) * 1999-09-24 2005-08-30 Sun Microsystems, Inc. Mechanism for enabling session information to be shared across multiple processes
US6941308B1 (en) * 2001-10-05 2005-09-06 Emc Corporation Methods and apparatus for accessing a doubly linked list in a data storage system
US6947425B1 (en) * 1999-12-29 2005-09-20 Intel Corporation Multi-threaded sequenced transmit software for packet forwarding device
US6973521B1 (en) * 2000-05-16 2005-12-06 Cisco Technology, Inc. Lock controller supporting blocking and non-blocking requests
US6993762B1 (en) * 1999-04-07 2006-01-31 Bull S.A. Process for improving the performance of a multiprocessor system comprising a job queue and system architecture for implementing the process
US7012918B2 (en) * 2003-03-24 2006-03-14 Emulex Design & Manufacturing Corporation Direct data placement
US7051108B1 (en) * 2000-12-21 2006-05-23 Emc Corporation Method and system of interprocess communications
US7089404B1 (en) * 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
US7228550B1 (en) * 2002-01-07 2007-06-05 Slt Logic, Llc System and method for making communication streams available to processes executing under control of an operating system but without the intervention of the operating system
US7228375B1 (en) * 2001-01-12 2007-06-05 Slt Logic, Llc System and method for efficient input/output of a computer system
US7254237B1 (en) * 2001-01-12 2007-08-07 Slt Logic, Llc System and method for establishing a secure connection
US7274706B1 (en) * 2001-04-24 2007-09-25 Syrus Ziai Methods and systems for processing network data
US7316017B1 (en) * 2003-01-06 2008-01-01 Slt Logic, Llc System and method for allocatiing communications to processors and rescheduling processes in a multiprocessor system
US20080056494A1 (en) * 2001-01-12 2008-03-06 Van Jacobson System and method for establishing a secure connection
US7386619B1 (en) * 2003-01-06 2008-06-10 Slt Logic, Llc System and method for allocating communications to processors in a multiprocessor system
US20090165003A1 (en) * 2007-12-21 2009-06-25 Van Jacobson System and method for allocating communications to processors and rescheduling processes in a multiprocessor system

Patent Citations (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4622633A (en) * 1983-12-06 1986-11-11 Tri Sigma Corporation Object building method for self configuring computer network
US4884192A (en) * 1984-08-16 1989-11-28 Sharp Kabushiki Kaisha Information processor capable of data transfer among plural digital data processing units by using an active transmission line having locally controlled storage of data
US5369749A (en) * 1989-05-17 1994-11-29 Ibm Corporation Method and apparatus for the direct transfer of information between application programs running on distinct processors without utilizing the services of one or both operating systems
US5452452A (en) * 1990-06-11 1995-09-19 Cray Research, Inc. System having integrated dispatcher for self scheduling processors to execute multiple types of processes
US5594869A (en) * 1990-06-29 1997-01-14 Digital Equipment Corporation Method and apparatus for end-to-end encryption of a data packet in a computer network
US5161193A (en) * 1990-06-29 1992-11-03 Digital Equipment Corporation Pipelined cryptography processor and method for its use in communication networks
US5437031A (en) * 1990-10-10 1995-07-25 Fuji Xerox Co., Ltd. Interprocess communications control system
US5367681A (en) * 1990-12-14 1994-11-22 Sun Microsystems, Inc. Method and apparatus for routing messages to processes in a computer system
US5406322A (en) * 1992-03-18 1995-04-11 The Whitaker Corporation Packet-switched ring network having direct access to low and high bandwidth memories
US5485626A (en) * 1992-11-03 1996-01-16 International Business Machines Corporation Architectural enhancements for parallel computer systems utilizing encapsulation of queuing allowing small grain processing
US5379434A (en) * 1992-12-18 1995-01-03 International Business Machines Corporation Apparatus and method for managing interrupts in a multiprocessor system
US6412026B1 (en) * 1994-05-05 2002-06-25 Lars Oliver Graf System for managing a group of computers by performing automatic actions based on the identified computer conditions
US5657390A (en) * 1995-08-25 1997-08-12 Netscape Communications Corporation Secure socket layer application program apparatus and method
US5761534A (en) * 1996-05-20 1998-06-02 Cray Research, Inc. System for arbitrating packetized data from the network to the peripheral resources and prioritizing the dispatching of packets onto the network
US5940870A (en) * 1996-05-21 1999-08-17 Industrial Technology Research Institute Address translation for shared-memory multiprocessor clustering
US6032179A (en) * 1996-08-14 2000-02-29 Mitsubishi Electric Information Technology Center America, Inc. (Ita) Computer system with a network interface which multiplexes a set of registers among several transmit and receive queues
US6345041B1 (en) * 1996-10-24 2002-02-05 Hewlett-Packard Company Method and apparatus for automatic load-balancing on multisegment devices
US6292900B1 (en) * 1996-12-18 2001-09-18 Sun Microsystems, Inc. Multilevel security attribute passing methods, apparatuses, and computer program products in a stream
US5922057A (en) * 1997-01-10 1999-07-13 Lsi Logic Corporation Method for multiprocessor system of controlling a dynamically expandable shared queue in which ownership of a queue entry by a processor is indicated by a semaphore
US6094435A (en) * 1997-06-30 2000-07-25 Sun Microsystems, Inc. System and method for a quality of service in a multi-layer network element
US6006264A (en) * 1997-08-01 1999-12-21 Arrowpoint Communications, Inc. Method and system for directing a flow between a client and a server
US6449647B1 (en) * 1997-08-01 2002-09-10 Cisco Systems, Inc. Content-aware switching of network packets
US6094485A (en) * 1997-09-18 2000-07-25 Netscape Communications Corporation SSL step-up
US6377993B1 (en) * 1997-09-26 2002-04-23 Mci Worldcom, Inc. Integrated proxy interface for web based data management reports
US6119230A (en) * 1997-10-01 2000-09-12 Novell, Inc. Distributed dynamic security capabilities
US6728256B1 (en) * 1997-11-27 2004-04-27 Alcatel Shared buffer control device
US6519686B2 (en) * 1998-01-05 2003-02-11 Intel Corporation Information streaming in a multi-process system using shared memory
US6263437B1 (en) * 1998-02-19 2001-07-17 Openware Systems Inc Method and apparatus for conducting crypto-ignition processes between thin client devices and server devices over data networks
US6131113A (en) * 1998-02-24 2000-10-10 International Business Machines Corporation Managing a shared resource in a multi-processor system
US6246683B1 (en) * 1998-05-01 2001-06-12 3Com Corporation Receive processing with network protocol bypass
US6223287B1 (en) * 1998-07-24 2001-04-24 International Business Machines Corporation Method for establishing a secured communication channel over the internet
US6317831B1 (en) * 1998-09-21 2001-11-13 Openwave Systems Inc. Method and apparatus for establishing a secure connection over a one-way data path
US6189065B1 (en) * 1998-09-28 2001-02-13 International Business Machines Corporation Method and apparatus for interrupt load balancing for powerPC processors
US6370657B1 (en) * 1998-11-19 2002-04-09 Compaq Computer Corporation Hot processor swap in a multiprocessor personal computer system
US6389462B1 (en) * 1998-12-16 2002-05-14 Lucent Technologies Inc. Method and apparatus for transparently directing requests for web objects to proxy caches
US6738821B1 (en) * 1999-01-26 2004-05-18 Adaptec, Inc. Ethernet storage protocol networks
US6453366B1 (en) * 1999-02-18 2002-09-17 International Business Machines Corporation Method and apparatus for direct memory access (DMA) with dataflow blocking for users
US6345327B1 (en) * 1999-02-19 2002-02-05 International Business Machines Corporation Queuing method and apparatus for providing direct data processing access using a queued direct input-output device
US6717913B1 (en) * 1999-02-23 2004-04-06 Alcatel Multi-service network switch with modem pool management
US6434153B1 (en) * 1999-02-25 2002-08-13 Hitachi, Ltd. Packet communication system with QoS control function
US6484257B1 (en) * 1999-02-27 2002-11-19 Alonzo Ellis System and method for maintaining N number of simultaneous cryptographic sessions using a distributed computing environment
US6650640B1 (en) * 1999-03-01 2003-11-18 Sun Microsystems, Inc. Method and apparatus for managing a network flow in a high performance network interface
US20030177292A1 (en) * 1999-04-06 2003-09-18 Serge Smirnov Data format for a streaming information appliance
US6993762B1 (en) * 1999-04-07 2006-01-31 Bull S.A. Process for improving the performance of a multiprocessor system comprising a job queue and system architecture for implementing the process
US7089404B1 (en) * 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
US6253250B1 (en) * 1999-06-28 2001-06-26 Telocity, Incorporated Method and apparatus for bridging a plurality of buses and handling of an exception event to provide bus isolation
US6742063B1 (en) * 1999-07-15 2004-05-25 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for efficient transfer of data packets
US6265885B1 (en) * 1999-09-02 2001-07-24 International Business Machines Corporation Method, apparatus and computer program product for identifying electrostatic discharge damage to a thin film device
US6938085B1 (en) * 1999-09-24 2005-08-30 Sun Microsystems, Inc. Mechanism for enabling session information to be shared across multiple processes
US6457042B1 (en) * 1999-09-30 2002-09-24 International Business Machines Corporation Dynamic construction of complex execution environments
US6438651B1 (en) * 1999-11-01 2002-08-20 International Business Machines Corporation Method, system, and program for managing requests to a cache using flags to queue and dequeue data in a buffer
US6484224B1 (en) * 1999-11-29 2002-11-19 Cisco Technology Inc. Multi-interface symmetric multiprocessor
US20010005883A1 (en) * 1999-12-08 2001-06-28 Michael Wray Security protocol
US6947425B1 (en) * 1999-12-29 2005-09-20 Intel Corporation Multi-threaded sequenced transmit software for packet forwarding device
US6711607B1 (en) * 2000-02-04 2004-03-23 Ensim Corporation Dynamic scheduling of task streams in a multiple-resource system to ensure task stream quality of service
US6636928B1 (en) * 2000-02-18 2003-10-21 Hewlett-Packard Development Company, L.P. Write posting with global ordering in multi-path systems
US6862292B1 (en) * 2000-04-13 2005-03-01 International Business Machines Corporation Method and system for network processor scheduling outputs based on multiple calendars
US20020004898A1 (en) * 2000-05-01 2002-01-10 Droge John C. System and method for highly secure data communications
US6973521B1 (en) * 2000-05-16 2005-12-06 Cisco Technology, Inc. Lock controller supporting blocking and non-blocking requests
US20010047474A1 (en) * 2000-05-23 2001-11-29 Kabushiki Kaisha Toshiba Communication control scheme using proxy device and security protocol in combination
US6928482B1 (en) * 2000-06-29 2005-08-09 Cisco Technology, Inc. Method and apparatus for scalable process flow load balancing of a multiplicity of parallel packet processors in a digital communication network
US6754819B1 (en) * 2000-07-06 2004-06-22 General Dynamics Decision Systems, Inc. Method and system for providing cryptographic services in a distributed application
US6862282B1 (en) * 2000-08-29 2005-03-01 Nortel Networks Limited Method and apparatus for packet ordering in a data processing system
US6651131B1 (en) * 2000-09-06 2003-11-18 Sun Microsystems, Inc. High bandwidth network and storage card
US6829769B2 (en) * 2000-10-04 2004-12-07 Microsoft Corporation High performance interprocess communication
US7051108B1 (en) * 2000-12-21 2006-05-23 Emc Corporation Method and system of interprocess communications
US7228375B1 (en) * 2001-01-12 2007-06-05 Slt Logic, Llc System and method for efficient input/output of a computer system
US20080056494A1 (en) * 2001-01-12 2008-03-06 Van Jacobson System and method for establishing a secure connection
US7254237B1 (en) * 2001-01-12 2007-08-07 Slt Logic, Llc System and method for establishing a secure connection
US20020097717A1 (en) * 2001-01-22 2002-07-25 Vinsel Peter C. Microkernel architecture-based forwarder
US7274706B1 (en) * 2001-04-24 2007-09-25 Syrus Ziai Methods and systems for processing network data
US20020165896A1 (en) * 2001-05-02 2002-11-07 Kim Jason Seung-Min Multiprocessor communication system and method
US20050138624A1 (en) * 2001-06-01 2005-06-23 Microsoft Corporation Methods and systems for creating and communicating with computer processes
US20030046464A1 (en) * 2001-08-31 2003-03-06 Keshav Murty Mechanism for interrupt handling in computer systems that support concurrent execution of multiple threads
US6941308B1 (en) * 2001-10-05 2005-09-06 Emc Corporation Methods and apparatus for accessing a doubly linked list in a data storage system
US7228550B1 (en) * 2002-01-07 2007-06-05 Slt Logic, Llc System and method for making communication streams available to processes executing under control of an operating system but without the intervention of the operating system
US7240350B1 (en) * 2002-01-07 2007-07-03 Slt Logic, Llc System and method for providing communications to processes
US20030163589A1 (en) * 2002-02-25 2003-08-28 International Business Machines Corporation Pipelined packet processing
US20040062245A1 (en) * 2002-04-22 2004-04-01 Sharp Colin C. TCP/IP offload device
US20040024946A1 (en) * 2002-07-29 2004-02-05 Naumann Mark W. Scalable on chip network
US20040098510A1 (en) * 2002-11-15 2004-05-20 Ewert Peter M. Communicating between network processors
US20040117598A1 (en) * 2002-12-12 2004-06-17 International Business Machines Corp. Method and data processing system for microprocessor communication in a cluster-based multi-processor wireless network
US7386619B1 (en) * 2003-01-06 2008-06-10 Slt Logic, Llc System and method for allocating communications to processors in a multiprocessor system
US7316017B1 (en) * 2003-01-06 2008-01-01 Slt Logic, Llc System and method for allocatiing communications to processors and rescheduling processes in a multiprocessor system
US7012918B2 (en) * 2003-03-24 2006-03-14 Emulex Design & Manufacturing Corporation Direct data placement
US20090165003A1 (en) * 2007-12-21 2009-06-25 Van Jacobson System and method for allocating communications to processors and rescheduling processes in a multiprocessor system

Cited By (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9112752B2 (en) 2002-09-16 2015-08-18 Solarflare Communications, Inc. Network interface and protocol
US8954613B2 (en) 2002-09-16 2015-02-10 Solarflare Communications, Inc. Network interface and protocol
US9043671B2 (en) 2003-03-03 2015-05-26 Solarflare Communications, Inc. Data protocol
US20110173514A1 (en) * 2003-03-03 2011-07-14 Solarflare Communications, Inc. Data protocol
US9690724B2 (en) 2004-03-02 2017-06-27 Solarflare Communications, Inc. Dual-driver interface
US8855137B2 (en) 2004-03-02 2014-10-07 Solarflare Communications, Inc. Dual-driver interface
US8737431B2 (en) 2004-04-21 2014-05-27 Solarflare Communications, Inc. Checking data integrity
US8612536B2 (en) 2004-04-21 2013-12-17 Solarflare Communications, Inc. User-level stack
US8650569B2 (en) 2005-03-10 2014-02-11 Solarflare Communications, Inc. User-level re-initialization instruction interception
US9063771B2 (en) 2005-03-10 2015-06-23 Solarflare Communications, Inc. User-level re-initialization instruction interception
US9552225B2 (en) 2005-03-15 2017-01-24 Solarflare Communications, Inc. Data processing system with data transmit capability
US8533740B2 (en) 2005-03-15 2013-09-10 Solarflare Communications, Inc. Data processing system with intercepting instructions
US8782642B2 (en) 2005-03-15 2014-07-15 Solarflare Communications, Inc. Data processing system with data transmit capability
US9729436B2 (en) 2005-03-30 2017-08-08 Solarflare Communications, Inc. Data processing system with routing tables
US8868780B2 (en) 2005-03-30 2014-10-21 Solarflare Communications, Inc. Data processing system with routing tables
US20100049876A1 (en) * 2005-04-27 2010-02-25 Solarflare Communications, Inc. Packet validation in virtual network interface architecture
US9912665B2 (en) 2005-04-27 2018-03-06 Solarflare Communications, Inc. Packet validation in virtual network interface architecture
US8380882B2 (en) 2005-04-27 2013-02-19 Solarflare Communications, Inc. Packet validation in virtual network interface architecture
US8645558B2 (en) 2005-06-15 2014-02-04 Solarflare Communications, Inc. Reception according to a data transfer protocol of data directed to any of a plurality of destination entities for data extraction
US8635353B2 (en) 2005-06-15 2014-01-21 Solarflare Communications, Inc. Reception according to a data transfer protocol of data directed to any of a plurality of destination entities
US10055264B2 (en) 2005-06-15 2018-08-21 Solarflare Communications, Inc. Reception according to a data transfer protocol of data directed to any of a plurality of destination entities
US9043380B2 (en) 2005-06-15 2015-05-26 Solarflare Communications, Inc. Reception according to a data transfer protocol of data directed to any of a plurality of destination entities
US9594842B2 (en) 2005-10-20 2017-03-14 Solarflare Communications, Inc. Hashing algorithm for network receive filtering
US8959095B2 (en) 2005-10-20 2015-02-17 Solarflare Communications, Inc. Hashing algorithm for network receive filtering
US10015104B2 (en) 2005-12-28 2018-07-03 Solarflare Communications, Inc. Processing received data
US9083539B2 (en) 2006-02-08 2015-07-14 Solarflare Communications, Inc. Method and apparatus for multicast packet reception
US8817784B2 (en) 2006-02-08 2014-08-26 Solarflare Communications, Inc. Method and apparatus for multicast packet reception
US8489761B2 (en) 2006-07-10 2013-07-16 Solarflare Communications, Inc. Onload network protocol stacks
US9948533B2 (en) 2006-07-10 2018-04-17 Solarflare Communitations, Inc. Interrupt management
US20100057932A1 (en) * 2006-07-10 2010-03-04 Solarflare Communications Incorporated Onload network protocol stacks
US9686117B2 (en) 2006-07-10 2017-06-20 Solarflare Communications, Inc. Chimney onload implementation of network protocol stack
US20100135324A1 (en) * 2006-11-01 2010-06-03 Solarflare Communications Inc. Driver level segmentation
US9077751B2 (en) 2006-11-01 2015-07-07 Solarflare Communications, Inc. Driver level segmentation
US8543729B2 (en) 2007-11-29 2013-09-24 Solarflare Communications, Inc. Virtualised receive side scaling
US9304825B2 (en) 2008-02-05 2016-04-05 Solarflare Communications, Inc. Processing, on multiple processors, data flows received through a single socket
US20110023042A1 (en) * 2008-02-05 2011-01-27 Solarflare Communications Inc. Scalable sockets
US8447904B2 (en) 2008-12-18 2013-05-21 Solarflare Communications, Inc. Virtualised interface functions
US20100161847A1 (en) * 2008-12-18 2010-06-24 Solarflare Communications, Inc. Virtualised interface functions
US9256560B2 (en) 2009-07-29 2016-02-09 Solarflare Communications, Inc. Controller integration
US9210140B2 (en) 2009-08-19 2015-12-08 Solarflare Communications, Inc. Remote functionality selection
US20110087774A1 (en) * 2009-10-08 2011-04-14 Solarflare Communications Inc Switching api
US8423639B2 (en) 2009-10-08 2013-04-16 Solarflare Communications, Inc. Switching API
US9124539B2 (en) 2009-12-21 2015-09-01 Solarflare Communications, Inc. Header processing engine
US8743877B2 (en) 2009-12-21 2014-06-03 Steven L. Pope Header processing engine
US20110149966A1 (en) * 2009-12-21 2011-06-23 Solarflare Communications Inc Header Processing Engine
US9880964B2 (en) 2010-12-09 2018-01-30 Solarflare Communications, Inc. Encapsulated accelerator
US8996644B2 (en) 2010-12-09 2015-03-31 Solarflare Communications, Inc. Encapsulated accelerator
US9600429B2 (en) 2010-12-09 2017-03-21 Solarflare Communications, Inc. Encapsulated accelerator
US9674318B2 (en) 2010-12-09 2017-06-06 Solarflare Communications, Inc. TCP processing for devices
US9892082B2 (en) 2010-12-09 2018-02-13 Solarflare Communications Inc. Encapsulated accelerator
US9008113B2 (en) 2010-12-20 2015-04-14 Solarflare Communications, Inc. Mapped FIFO buffering
US9800513B2 (en) 2010-12-20 2017-10-24 Solarflare Communications, Inc. Mapped FIFO buffering
US9384071B2 (en) 2011-03-31 2016-07-05 Solarflare Communications, Inc. Epoll optimisations
US9258390B2 (en) 2011-07-29 2016-02-09 Solarflare Communications, Inc. Reducing network latency
US9456060B2 (en) 2011-07-29 2016-09-27 Solarflare Communications, Inc. Reducing network latency
US10021223B2 (en) 2011-07-29 2018-07-10 Solarflare Communications, Inc. Reducing network latency
US8763018B2 (en) 2011-08-22 2014-06-24 Solarflare Communications, Inc. Modifying application behaviour
US9003053B2 (en) 2011-09-22 2015-04-07 Solarflare Communications, Inc. Message acceleration
US9391840B2 (en) 2012-05-02 2016-07-12 Solarflare Communications, Inc. Avoiding delayed data
US9882781B2 (en) 2012-07-03 2018-01-30 Solarflare Communications, Inc. Fast linkup arbitration
US9391841B2 (en) 2012-07-03 2016-07-12 Solarflare Communications, Inc. Fast linkup arbitration
US9426124B2 (en) 2013-04-08 2016-08-23 Solarflare Communications, Inc. Locked down network interface
US9300599B2 (en) 2013-05-30 2016-03-29 Solarflare Communications, Inc. Packet capture

Also Published As

Publication number Publication date Type
US7386619B1 (en) 2008-06-10 grant

Similar Documents

Publication Publication Date Title
US7047337B2 (en) Concurrent access of shared resources utilizing tracking of request reception and completion order
US5802306A (en) Supporting multiple client-server sessions from a protocol stack associated with a single physical adapter through use of a plurality of logical adapters
US5606493A (en) Distributed applications processing network
US7328294B2 (en) Methods and apparatus for distributing interrupts
US5640394A (en) System and method for running multiple incompatible network protocol stacks
US5526492A (en) System having arbitrary master computer for selecting server and switching server to another server when selected processor malfunctions based upon priority order in connection request
Liu Distributed loop computer networks
US20020103847A1 (en) Efficient mechanism for inter-thread communication within a multi-threaded computer system
US20050060443A1 (en) Method, system, and program for processing packets
US20080109452A1 (en) Queuing model for a plurality of servers
US5444848A (en) Distribution of communications connections over multiple service access points by choosing remote and local access points having lowest number of connections
US7774782B1 (en) Limiting requests by web crawlers to a web host
US20050091654A1 (en) Autonomic method, system and program product for managing processes
US6195682B1 (en) Concurrent server and method of operation having client-server affinity using exchanged client and server keys
US7181744B2 (en) System and method for transferring data between virtual machines or other computer entities
US6138200A (en) System for allocating bus bandwidth by assigning priority for each bus duration time slot to application using bus frame and bus duration
US5606685A (en) Computer workstation having demand-paged virtual memory and enhanced prefaulting
US5291597A (en) Method to provide concurrent execution of distributed application programs by a host computer and an intelligent work station on an SNA network
US20030110166A1 (en) Queue management
US6684259B1 (en) Method for providing user global object name space in a multi-user operating system
US4969092A (en) Method for scheduling execution of distributed application programs at preset times in an SNA LU 6.2 network environment
US5511200A (en) Method and apparatus for providing an enhanced programmable priority interrupt controller
US7299468B2 (en) Management of virtual machines to utilize shared resources
US20060195698A1 (en) Receive side scaling with cryptographically secure hashing
US20040107419A1 (en) Efficient shared memory transport in a distributed data processing environment