  Shared resource interference is observed by applications as dynamic
performance asymmetry. Prior art has developed approaches to reduce the impact
of performance asymmetry mainly at the operating system and architectural
levels. In this work, we study how application-level scheduling techniques can
leverage moldability (i.e. flexibility to work as either single-threaded or
multithreaded task) and explicit knowledge on task criticality to handle
scenarios in which system performance is not only unknown but also changing
over time. Our proposed task scheduler dynamically learns the performance
characteristics of the underlying platform and uses this knowledge to devise
better schedules aware of dynamic performance asymmetry, hence reducing the
impact of interference. Our evaluation shows that both criticality-aware
scheduling and parallelism tuning are effective schemes to address interference
in both shared and distributed memory applications
