Document Type

Technical Report


Computer Science and Engineering

Publication Date






Technical Report Number



Real-time upcalls (RTUs) are an operating systems mechanism to provide quality-of-service (QoS) guarantees to network applications, and to efficiently implement protocols in user space with (QoS) guarantees. Traditionally, threads (and real-time extensions to threads) have been used to structure concurrent activities in user space protocol implementations. However, preemptive scheduling required for real-time threads leads to excessive context switching, and introduces the need for expensive concurrency control mechanisms such as locking. The RTU mechanism exploits the iterative nature of protocol processing to eliminate the need for locking, and reduce asynchronous preemption, while ensuring real-time operation. In addition to efficiency, eliminating the need for concurrency control considerably simplifies protocol code. RTUs have been implemented in the NetBSD OS on the Sparc and Pentium platforms. We used the RTU mechanism to implement a sender and a receiver program that communicate using UDP sockets over 155Mbps ATM, and compared the throughput with that obtained when RTUs are not used. Our results show that the RTU based programs maintain the same throughput regardless of other system activities. Without the RTU mechanism, background load reduces throughput by as much as 80%. Using the RTU mechanism, total network bandwidth can be partitioned among different UDP streams, and delivered to user programs even with background system load. We have also implemented the TCP protocol in user space using the RTU mechanism. For each TCP connection, RTUs are setup for performing TCP output, input, and timer processing functions. The use of RTUs, in conjunction with shared memory between kernel and user processes for data movement, and the ability of the ATM adaptor driver to separate headers and data, makes our user level TCP implementations the most efficient one that we know of for providing QoS guarantees within the endsystem.


Permanent URL: