Check out the new USENIX Web site. next up previous
Next: 3.2.2 Lock Serialization (ConnP-L) Up: 3.2 Connection-based Parallelism (ConnP) Previous: 3.2 Connection-based Parallelism (ConnP)


3.2.1 Thread Serialization (ConnP-T)

Connection-based parallelism using threads utilizes several kernel threads dedicated to protocol processing, each of which is assigned a subset of the system's connections. At each entry point into the TCP/IP protocol stack, a request for service is enqueued for the appropriate protocol thread based on the TCP connection. Later, the protocol threads, which only carry out TCP/IP processing and are bound to a specific CPU, dequeue requests and process them appropriately. Because connections are uniquely and persistently assigned to a specific protocol thread, no per-connection state locking is required. These protocol threads implement both synchronous operations, for applications that require a return code, and asynchronous operations, for drivers that simply enqueue packets and then continue servicing the NIC.

The connection-based parallel stack uniquely maps a packet or socket request to a specific protocol thread by hashing the 4-tuple of remote IP address, remote port number, local IP address, and local port number. When the entire tuple is not yet defined (e.g., prior to port assignment during a listen() call), the corresponding operation executes on protocol thread 0 and may later migrate to another thread when the tuple becomes fully defined.


next up previous
Next: 3.2.2 Lock Serialization (ConnP-L) Up: 3.2 Connection-based Parallelism (ConnP) Previous: 3.2 Connection-based Parallelism (ConnP)