I am beginning to think that the whole concept of performance analysis and performance optimization is becoming a lost art. How many people understand everything from the application to the storage device whether it is a hard drive, tape drive or an SSD. I would think not too many people know the end-to-end information. I learned years ago to approach things from understanding what the application does. What type of I/O calls does it make? What I/O libraries are using it? How does the I/O interact with the operating system. This was before the time of the Unix and the C Library were common. Then we had to understand how the I/O moved to the device.
Devices today are far more complex than the original devices that I worked in in the early 1980s. For example, all of the error recover back then was done in the operating system. Things are different today. You cannot change much to tune I/O in Java except do not user Java for I/O. I think the current state of things where applications cannot really be tuned and the solution to all performance problems is just buy more hardware is going to run out of gas. Almost everything in our industry is cyclical. For many years, tuning applications and the storage for the application used was commonplace by both industry and the staff of most vendors. Today, that is sadly not case. Some of the cause is the recession, and some of the cause is that users have found in at least the short term that buying hardware is cheaper than fixing the applications. I believe that in the long term this will not be the case, but everyone seems to be living for today and not planning for the future.