Online performance monitoring builds on runtime performance measurement mechanisms to provide support for accessing performance data during execution. This is important to provide feedback for runtime optimizations and performance steering. Our focus is on building the needed infrastructure to allow the performance data ``producers'' in component applications to connect to and communicate with performance data ``consumers'' wherever they may be in the component system. The key work here is to implement this infrastructure to be CCA-compatible and, indeed, to leverage the CCA framework and services so that the monitoring system can be configured in a flexible and robust manner.
The CCA performance monitoring system builds on the performance component described in Section 4.1. Performance components are instantiated to make measurements on behalf of other CCA components. The performance component also supports a service to access the current performance information. (Note, this can be a challenge if the component is running in parallel.) Depending on the execution relationship of the components in an application (e.g., components are executed as separate processes), which is related to the CCA framework used to create the application, there may be one or more performance components. Thus, performance information for the whole CCA application will be distributed across the various performance components in operation.
The CCA performance components can be used by one component for measurements and by another for performance data access. This scenario is made possible by the CCA ports mechanism and CCA framework. While the performance component design and operation is enough to provide application-wide monitoring capabilities, we believe it is important to consider a hierarchical monitoring architecture that can adjust to the range of CCA application types to be expected. Such an architecture for monitoring component composition (see Figure 3) will allow efficiencies in how performance data is communicated, analyzed, and filtered in the system.
Our approach is to develop a performance monitor component that can interface with performance measurement components to access their performance data, merge performance data from different streams, conduct various analysis functions on the data (including filtering and reduction), and make results available to other monitor or application components. The functionality of these monitor components is controllable by application developers. With such monitor components, it will be possible to construct a monitoring system best matched to the needs of the application. Also, it will make it possible to build online performance analysis and visualization tools that can interface easily with the monitoring infrastructure. Ultimately, we will want to link the monitoring system with a composition performance model, so as to allow global optimization of component applications.