Our goal is to allow the application to make adaptation decisions in response to fluctuations in QoS seen by a flow, but the adaptation process should be under the control of the user.
2.1. Interactions between the user and the application
We do not consider in detail the mechanisms for interactions with the user but we discuss the requirements of the user in allowing the application to make adaptation decisions dynamically.
There may be many instances of an application used by many different users. Each of the users will have their own preferences for the application. Any decision-making process for adaptation must allow the application to apply user preferences to the information about QoS being experienced by the flow. For example, with an audio tool with numerous encoding schemes, one user may specify that the tool “always uses the best audio quality possible” while another user may specify that the tool aims to “retain stability” in the face of network QoS fluctuations. The application may interpret these preferences as meaning the “encoding with the highest data rate requirement whenever possible” and “do not change flow-state too often”, respectively. So the adaptation decision is not only application specific but also application instance specific, and controlled by user preferences.
Typically, we would like user preferences to reflect the fact that users may have minimum technical knowledge. User QoS preferences may be expressed as an application-specific enumeration such as “high”, “medium” or “low” quality. As the application will be making flow-state changes, the user may wish to specify QoS stability criterion, e.g. “do not change flow-state more than once every minute”. Note that the this last criterion is the user's request for the application not to change to a “better” quality flow-state too often (i.e. avoid state-flapping), but if the QoS degrades, then we would expect the application to adapt as required.
Such heterogeneity means that the adaptation decision information reflects a per-instance view. So the information used by the application to make adaptation decisions should:
•
Not unduly constrain the QoS mapping from user requirements to application capabilities.
•
Be amenable to the mapping of the user QoS preferences and QoS stability criterion on a per application instance basis.
2.2. Interactions between the application and the network
Before an application instance can make decisions about any changes in its behaviour, it needs to know what is “sensible” for its flows, i.e. what its current network connectivity can support. This requires some information from the network. Information about the network is typically expressed as values of QoS parameters such as delay, jitter, available capacity, loss, etc. This information may be received in a number of ways:
•
Via local mechanisms, e.g. from the communication stack on the host.
•
Via application-specific mechanisms, e.g. via proprietary signalling.
•
As control messages from the remote receivers of the flow, e.g. using RTP/RTCP [8].
•
From network management tools, e.g. using SNMP [9].
If we consider that “the application knows best”, then we must appreciate that there is likely to be no single “best” ubiquitous solution for getting information about the resources within the network. The “best” mechanism may depend on the network environment or the application's function or both, but only the application (application designer) is in a position to make that assessment.
The application must also have some way of expressing its functional capability in terms of the construction of its flows, i.e. which flow-states its flows can use. Typically, these will be performance bounds defined in terms of QoS parameter values for the flow-states, e.g. minimum data rate required, maximum delay, etc. Note that as a definition of a flow is application-specific, so is the timescale over which measurements of such performance bounds are measured. This means that our model must be capable of working in whatever timescales are specified by the application.