What's New in Japex 1.1.4?
More users usually translates into more requests for features. A few more developers have picked up Japex in the last month, and a couple have asked me to provide additional features for their benchmarks. Two new global parameters are supported in Japex 1.1.4: japex.runIterationDelay and japex.singleClassLoader.
Support for japex.runIterationDelay was requested by Vitaliy O. who is using Japex to benchmark a CMS system and needs to introduce a delay between calls to run() in order to simulate multiple users accessing the system. Naturally, any Japex driver can introduce a delay by calling System.sleep() but this will obviously impact the throughput computed by the Japex engine. In other words, the Japex engine needs to be aware of this parameter so that it can adjust the throughput computation accordingly. This is the reason why this new parameter was introduced.
In order to provide isolation between the drivers, the Japex engine creates a new instance of JapexClassLoader for each driver. The value of the driver parameter japex.classPath is used to initialize each class loader. This isolation permits testing multiple versions of the same software (with classed in the same namespaces) and works well in most cases. However, Ken C. reported problems with a micro-benchmark that tests IIOP implementations. In some cases, SPIs in the JDK runtime system can cache implementation classes making it difficult to compare the performance of multiple implementations of the same SPI by only allowing the first driver to be loaded. This can be solved if a single instance of JapexClassLoader is used for the entire benchmark rather than one per driver. That is precisely the purpose of the new boolean parameter japex.singleClassLoader.
I'll report on more Japex adoptions in my next blog entry. In the meantime, happy benchmarking!