The ever-increasing complexity of software systems makes them hard to
comprehend, predict and tune due to emergent properties and non-deterministic
behaviour. Complexity arises from the size of software systems and the wide
variety of possible operating environments: the increasing choice of platforms
and communication policies leads to ever more complex performance
characteristics. In addition, software systems exhibit different behaviour
under different workloads.