I always like to know things about performance. In the beginning, I thought it’s an interesting thing to know something in depth. The reasons of this is that :
- You have to be good at design. [1]
- Know how low-level things work.
Suddenly, I realized the reasons are not only those. I found out when you work with performance engineering, you always have to conduct benchmark and gather the data from benchmarks. The points are:
- Data don’t lie.
- There is no ambiguity in data.
There is one of my favorite quotes:
Trust no one, bench everything.
from sbt-jmh by Konrad Malawski
However, is it that easy? There is a prerequisite for this. We have to benchmark or measure correctly. It means we have to use right methodologies to do it. For instance, when we benchmark CPU intensive application in Intel CPU, we have to turn off hyper-threading. Or we would get a wasteful result. Aleksey Shipilëv told about this in one of his talks.
Last but not least, anyone is interested in performance engineering. There are stuffs I would suggest to read.
- Systems Performance: Enterprise and the Cloud
- Some of RFCs. For example, rfc2544.
- Java Microbenchmark Harness: The Lesser of Two Evils
Reference:
- Good design usually coincides with good performance by Joshua Bloch
- Systems Performance: Enterprise and the Cloud by Brendan Gregg, Netflix Senior Performance Architect
- Benchmarking Methodology for Network Interconnect Devices