Our approach will be to build off of TAU's dynamic performance mapping features. At the time port bindings are made by the CCA framework, it is possible to inform the port performance wrappers of the connection (i.e., user) identity. This can occur either at the user or provider interface, or both. With this information, a performance mapping can be created to associate measured performance data with the specific service invocation. In this way, it is possible to track performance relative to component bindings. Components using services can gain performance views specific to service instantiation, allowing them, for instance, to evaluate components for performance acceptability. Components providing services can identify heavy component users, perhaps allowing their resources to be better allocated and utilized. Overall observation of component bindings will also be important for component ensemble optimizations.
Another approach is to create a proxy component for each component the user wants to analyze, similar to what is done for monitoring Java Beans . The proxy component shares the same interface as the actual component. When the application is composed and executed, the proxy is placed directly ``in front'' of the actual component. Since the proxy implements the same interface as the component, the proxy intercepts all of the method invocations for the component. In other words, the proxy uses and provides the same types of ports that the actual component provides. In this manner, the proxy is able to snoop the method invocation on the Provides Port, and then forward the method invocation to the component on the Uses Port. In addition, the proxy can use the performance interface to make measurements. If the method is one that the user wants to measure, monitoring is started before the method invocation is forwarded and stopped afterward. The parameters that influence the method's performance can be associated with the observed performance. This performance differentiation would allow for optimizations to be made by someone with knowledge of the algorithm implemented in the component. Creating a proxy from a component's header file is relatively straight-forward. Currently, proxies are created manually with the help of a few scripts, but it is not difficult to envision proxy creation being fully automated.