Milliseconds, Terabytes, Microjoules: energy aware performance tuning for modern times

It's tempting to think about software performance in vacuum, disconnected from any inputs and outputs, abstracted down to optimizing latency or throughput. This way the problem becomes much simpler to deal with, it's easier to convince others of its importance -- after all everyone wants to do more with less. It's also a quite dangerous approach, which has less and less place in the modern world.…