210 likes | 350 Views
Integration of QoS-Enabled Distributed Object Computing Middleware for Developing Next-Generation Distributed Applications. BBN Technologies Washington University
E N D
Integration of QoS-Enabled Distributed Object Computing Middleware for Developing Next-Generation Distributed Applications BBN Technologies Washington University Cambridge, MA St. Louis, MO Craig Rodrigues, David A. Karr Yamuna Krishnamurthy Joseph P. Loyall, Richard Schantz Vishal Kachroo University of California Irvine, CA Douglas C. Schmidt • ACM SIGPLAN Workshop on • Optimization of Middleware and Distributed Systems (OM 2001) • June 18, 2001
uav.navair.navy.mil/home.htm Unmanned Air Vehicle
1 2 3 Prototype Architecture • Video feed from off-board source (UAV) • Distributor sends video to hosts on ship’s network • Users’ hosts receive video and display it • Users send commands to UAV to control it
Why is Adaptation Necessary? • Limited resources • CPU and network bandwidth are shared by many applications, not just video • Some applications are of higher priority than others, so it becomes necessary to adapt in response to scheduling and resource management decisions
NETWORK RESERVATION • Under excessive Network load - Use IntServ/DiffServ to reserve bandwidth I P B I P B I B B B B B B P B B B B B B B B B B B B B B B I I B B P B P IBBPBBPBBPBBPBBPBBIBBPB B P B P B P B I P B I P P P P P P P B B P P P I I B B B B B B B B B B B B B B B B B B B B B B B B B B B B P P B B B B B B B B B B B B B B B B B B B B B B B B B • LOAD BALANCING • Excessive CPU load - Move distributor to more lightly loaded host ...PBBPBBPBBI II I • DATA FILTERING • Excessive network or CPU load - Drop frames UAV adaptive tactics
Why use a Framework? • Quality Objects (QuO) • provides higher level programming model for specifying application-level QoS • CORBA Audio/Video Service • abstracts away network programming concerns such as connection management • ACE QoS API (AQoSA) • uniform API for QoS (RSVP, GQoS)
Video Display VIDEO DISPLAY HOST N VIDEO DISPLAY HOST 2 UAV application design CORBA A/V Streaming Service + AQoSA Resource Reservation (IntServ) CORBA A/V Streaming Service Video DIstributor Video Display Proxy Video Source Process Reservation requests Observed throughput Frame filtering commands VIDEO DISPLAY HOST 1 QuO Contract UAV Video File VIDEO DISTRIBUTION HOST UAV SIMULATION HOST • Common middleware services • TAO CORBA A/V Service • QuO • AQoSA • TAO Naming Service • Reused Off the Shelf Software • DVDView video player
Video Source Process Video Distributor Process Display Proxy Process Video Display Process • Functionality • Read bytes from a file • Convert into frames • Send out pipe • Base Functionality • Receive frames • Send frames to registered receivers • Base Functionality • Receive frames • Display frames on the screen Other intertwined aspects Other intertwined aspects • Functional: • Frame filtering (i.e., frame dropping) • QoS: • Measuring frame rate • Other inter-twined aspects • Timing: periodic delivery of frames VIDEO DISPLAY HOST 2 VIDEO DISPLAY HOST N • QoS: • Measuring frame rate • Measuring resource usage and availability (CPU and network) • Adapting to performance degradation (e.g., frame dropping, load balancing) • Real Time: • Removing time stamp • Removing sequencing • Discarding frame if late or out of sequence VIDEO DISPLAY HOST 1 • Real Time: • Time stamping • Sequencing UAV SIMULATION HOST VIDEO DISTRIBUTION HOST Functionality of the UAV architecture
Quality Objects (QuO) • Provides a higher level programming model for specifying application QoS • operating regions specified in QuO Contracts • transitions between regions trigger adaptive behaviors • Support for different middleware architectures • CORBA (Java and C++) • Java RMI
VIDEO DISPLAY HOST 2 VIDEO DISPLAY HOST N Specifying QoS behaviors with QuO C++ Application Code behavior Timestamp () { void distributor::send_frame(ACE_Message_Block *frame) { inplaceof METHODCALL { ACE_Message_Block *timed_msg = add_timestamp(frame); remoteObj->send_frame(timed_msg); } } void displayproxy::send_frame(ACE_Message_Block *frame) {extern long last_time_processed; inplaceof METHODCALL { ACE_Message_Block *timed_msg = remove_timestamp(frame, tsp); if (tsp >= last_time_processed) { // is this a late frame remoteObj->send_frame(timed_msg); last_time_processed = tsp; } // else drop frame, a more recent frame has already been delivered }; class Sender { public: /// Constructor Sender (void); /// Method to initialize the various data components. int init (int argc, char **argv, CORBA::Environment&); /// Method to pace and send data from a file. int pace_data (CORBA::Environment &); /// Accessor to the connection manager. Connection_Manager &connection_manager (void); /// Amount of debugging info to print out: 0 = none, 10 = lots int debug_level_; private: /// Method to parse the command line arguments. ... }; ... class Distributor { public: /// Constructor Distributor (void); /// Destructor. ~Distributor (void); /// Initialize data components. int init (int argc, char **argv, CORBA::Environment &); /// Parse args. int parse_args (int argc, char **argv); // Flag to know when we are done. int done (void) const; void done (int); /// Accessor to connection manager. Connection_Manager &connection_manager (void); /// Amount of debugging output to print out; 0 = none, 10 = lots int debug_level_; protected: /// Connection manager. ... }; ... class Sender { public: /// Constructor Sender (void); /// Method to initialize the various data components. int init (int argc, char **argv, CORBA::Environment&); /// Method to pace and send data from a file. int pace_data (CORBA::Environment &); /// Accessor to the connection manager. Connection_Manager &connection_manager (void); /// Amount of debugging info to print out: 0 = none, 10 = lots int debug_level_; private: /// Method to parse the command line arguments. ... }; ... class Distributor { public: /// Constructor Distributor (void); /// Destructor. ~Distributor (void); /// Initialize data components. int init (int argc, char **argv, CORBA::Environment &); /// Parse args. int parse_args (int argc, char **argv); // Flag to know when we are done. int done (void) const; void done (int); /// Accessor to connection manager. Connection_Manager &connection_manager (void); /// Amount of debugging output to print out; 0 = none, 10 = lots int debug_level_; protected: /// Connection manager. ... }; ... class Sender { public: /// Constructor Sender (void); /// Method to initialize the various data components. int init (int argc, char **argv, CORBA::Environment&); /// Method to pace and send data from a file. int pace_data (CORBA::Environment &); /// Accessor to the connection manager. Connection_Manager &connection_manager (void); /// Amount of debugging info to print out: 0 = none, 10 = lots int debug_level_; private: /// Method to parse the command line arguments. ... }; ... class Distributor { public: /// Constructor Distributor (void); /// Destructor. ~Distributor (void); /// Initialize data components. int init (int argc, char **argv, CORBA::Environment &); /// Parse args. int parse_args (int argc, char **argv); // Flag to know when we are done. int done (void) const; void done (int); /// Accessor to connection manager. Connection_Manager &connection_manager (void); /// Amount of debugging output to print out; 0 = none, 10 = lots int debug_level_; protected: /// Connection manager. ... }; ... behavior Sequence () { int sequence_number = 1; void distributor::send_frame(ACE_Message_Block *frame) { inplaceof METHODCALL { // insert sequence number ACE_Message_Block *seq_msg = add_sequence_number(frame, sequence_number); remoteObj->send_frame(seq_msg); seq_number++; } } }; behavior Filter () { void distributor::send_frame(ACE_Message_Block *frame) { inplaceof METHODCALL { // examine contract and drop B or P frames if necessary ... } }; Video Source Process Video Distributor Process Filter? Insert Seq. No. Display Proxy Process Video Display Process Periodic Delivery Remove Timestamp Remove Seq. No. Insert Timestamp Filter? Insert Seq. No. VIDEO DISPLAY HOST 1 UAV SIMULATION HOST VIDEO DISTRIBUTION HOST
CORBA Audio/Video Streaming Service • Goals of OMG CORBA A/V Service Specification • Define standard mechanisms for: • Stream Establishment • Stream Control • Multiple Flows • Multiple Protocols • QoS • Goals of TAO A/V Streaming Service Project • Implement OMG CORBA A/V Service Specification using TAO
CORBA A/V Service Overview Stream EndPoint (Sink) Stream Interface Control Object Stream Interface Control Object Stream EndPoint (Source) Control and Management Objects Stream Adaptor POA POA Stream Adaptor ORB Multimedia Stream
CORBA A/V Service Overview • StreamCtrl • controlling the stream • MMDevice • interface for logical or physical device • StreamEndPoint • network specific aspects of a stream • Vdev • properties of the stream
QoS Enabled TAO A/V Service • TAO AV QoS Framework • AQoSA • QoS Mapping • QoS Monitoring • QoS Adaptation • ACE QoS API (AQoSA) • RAPI • GQoS
AQoSA API • Binds flows to reservations in a uniform and portable way • Encapsulates application’s notion of the underlying network QoS • Separates QoS properties of its sessions from low-level socketdata transfer aspects • Allows the application to specify and request QoS. Be notified if the QoS was not available • Updates itself based on QoS notifications • Portably wraps the QoS parameters • Implementation targets (RSVP) Resource reSerVation Protocol • RAPI & GQoS
Connection Establishment bind_devs (aMMDevice, bMMDevice) StreamCtrl create_B create_A (with QoS) A_Endpoint, A_VDev B_Endpoint, B_VDev connect QoS Monitor QoS Mapper aMMDevice bMMDevice app qos register session qos events network qos and callback A_Endpoint AQoSA B_Endpoint session create request_connection reserve path bVDev aVDev configure
Change in QoS adapt Adaptor Adaptor QoS Monitor adapt configure change Shaping Filter Selection Filter AV_Adaptor qos events modify X X AQoSA
More flexible than ad-hoc socket code • Facilitated additional features: • Multiple Viewers • Multiple receivers • Movable distributors • Network level QoS (with AQoSA) • Host name and port info • Migration of the processes across different hosts was cumbersome • Poor scalability and flow management • Not flexible to design changes and addition of components. Integrating TAO A/V in the UAV Application Video Source Process Video Distributor Process Display Proxy Process Video Display Process Instrumentation Video Forwarding Code A/V Stream A/V Stream + AQoSA Video Forwarding Code Adhoc TCP Connection Adhoc TCP Connection Video Display Code Video Forwarding Code Throughput CPU load Output Rate Control Queue Size Bandwidth Output Rate Control Throughput Contract CPU load UAV Video File Contract QuO Adaptive Control Process QuO Adaptive Control Process VIDEO DISTRIBUTION HOST VIDEO DISPLAY HOST
Flexible Configuration • Distributor Switching • Sender Switching • Multiple Receivers • Multiple Distributors • Sender Restarting Sender X Distributor X X Receiver Sender X Distributor X Receiver-1 Distributor-1 Receiver-2
Further References and Obtaining Software • http://www.dist-systems.bbn.com/tech/QuO/ • information about QuO framework • to obtain QuO, send e-mail to quo-help@bbn.com • http://www.cs.wustl.edu/~schmidt/TAO.html • source code for TAO ORB, CORBA A/V service, and AQoSA • UAV application uses TAO 1.1.15 or higher (TAO 1.2 major release is imminent) • further information can be obtained via e-mail from av@oomworks.com • Contact information: • Craig Rodrigues, crodrigu@bbn.com, 1-617-873-4725 • Yamuna Krishnamurthy, yamuna@oomworks.com, 1-314-726-1368