Performance analysis and tuning is an area that is less proper science and more black art as any developer who has done performance work realizes. The difference that proper tuning can make in extracting the full value of a system cannot be understated. Not only do the tools play a big role in doing performance work, but also the various knobs and levers available to tune a particular application in the environment it is running in need to be understood. Tuning done on an Intel system may not apply to a Power system, tuning done on AIX may not apply to Linux, tuning done in a cloud environment may not apply when running on bare metal, and the list goes on and on.
Understanding the effect of a tuning knob of course comes after the developer even becomes aware of the existence of the tuning knob to begin with and it is in this area that information sharing is particularly crucial. We thought we would share some of our insights gained through tuning Java/Liberty applications on the Power9 platform since the relative youth of the Power9 hardware line means that there may not be much information available online.
We wrote an article that discusses both the best practices for running Java/Liberty applications on Power9 systems as well as explains some of the underlying technical concepts in a way for the user to understand why the tuning helps improve performance. Particularly notable recommendations for running Java/Liberty applications running on Power9:
- Run Java/Liberty workloads in SMT8 mode on Power9 (we show the significant performance gains that we have seen because of this setting).
- Run with default Liberty executor thread pool settings and rely on the autonomics within Liberty to decide how many threads to use for a particular workload especially if there is a variety of deployment environments for the workload.
- Enable huge pages support for Java but be careful with using huge pages system-wide if there are other non-Java applications running on the same system
- Tune the JDK options in use for Java heap size, number of GC threads etc. to obtain maximum performance from the JVM layer
- Tune hardware features such as the hardware prefetcher and network adapter to ensure that they are not causing performance bottlenecks (sometimes what may be working well for other languages may not work well for Java).
We hope that this blog post and the linked article help Power9 users running Java workloads both on bare metal and in an IBM Cloud Private environment.
By Vijay Sundaresan, Neil Graham, Julian Wang, and Mel Bakhshi