JDK-8005436 : TEST_BUG: speed up RMI tests
  • Type: Enhancement
  • Component: core-libs
  • Sub-Component: java.rmi
  • Priority: P4
  • Status: Open
  • Resolution: Unresolved
  • Submitted: 2012-12-22
  • Updated: 2018-04-25
Related Reports
Relates :  
Relates :  
Relates :  
Sub Tasks
JDK-8030057 :  
Description
There are currently 133 RMI tests, and they take around 14 minutes to run. They need to be sped up. Timings for each test (in seconds) are as follows:

 80.2 java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java
 57.5 java/rmi/transport/dgcDeadLock/DGCDeadLock.java
 53.3 java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java
 52.1 java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java
 35.0 java/rmi/reliability/juicer/AppleUserImpl.java
 33.5 java/rmi/reliability/benchmark/runSerialBench.sh
 30.8 java/rmi/activation/CommandEnvironment/SetChildEnv.java
 21.9 java/rmi/dgc/retryDirtyCalls/RetryDirtyCalls.java
 18.1 java/rmi/registry/classPathCodebase/ClassPathCodebase.java
 16.6 java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java
 16.0 sun/rmi/transport/tcp/DeadCachedConnection.java
 14.2 java/rmi/dgc/dgcAckFailure/DGCAckFailure.java
 13.4 java/rmi/transport/readTimeout/ReadTimeoutTest.java
 13.2 java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java
 13.0 java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java
 12.5 java/rmi/server/Unreferenced/leaseCheckInterval/LeaseCheckInterval.java
 12.0 java/rmi/registry/readTest/readTest.sh
 11.9 sun/rmi/rmic/newrmic/equivalence/run.sh
 11.0 java/rmi/activation/Activatable/restartService/RestartService.java
 10.2 java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java
 10.1 java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java
  9.9 java/rmi/dgc/dgcImplInsulation/DGCImplInsulation.java
  9.9 java/rmi/server/RMISocketFactory/useSocketFactory/unicast/UseCustomSocketFactory.java
  9.4 java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java
  9.1 java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java
  8.9 java/rmi/registry/checkusage/CheckUsage.java
  8.9 java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java
  8.6 java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java
  8.2 java/rmi/registry/reexport/Reexport.java
  8.0 java/rmi/server/UnicastRemoteObject/exportObject/GcDuringExport.java
  7.8 java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java
  7.5 javax/rmi/ssl/SSLSocketParametersTest.sh
  7.2 java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java
  6.8 sun/rmi/rmic/manifestClassPath/run.sh
  6.6 java/rmi/transport/handshakeTimeout/HandshakeTimeout.java
  6.3 java/rmi/activation/ActivationSystem/modifyDescriptor/ModifyDescriptor.java
  5.7 java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java
  5.5 java/rmi/transport/runtimeThreadInheritanceLeak/RuntimeThreadInheritanceLeak.java
  5.0 sun/rmi/rmic/minimizeWrapperInstances/run.sh
  4.9 java/rmi/server/UnicastRemoteObject/unexportObject/UnexportLeak.java
  4.9 java/rmi/transport/checkFQDN/CheckFQDN.java
  4.7 java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/KeepAliveDuringCall.java
  4.6 java/rmi/activation/Activatable/nestedActivate/NestedActivate.java
  4.4 java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java
  4.3 java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java
  4.0 java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java
  4.0 java/rmi/server/RMIClassLoader/downloadArrayClass/DownloadArrayClass.java
  3.8 java/rmi/activation/Activatable/extLoadedImpl/ext.sh
  3.8 java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java
  3.6 java/rmi/server/RMIClassLoader/useCodebaseOnly/UseCodebaseOnly.java
  3.6 sun/rmi/transport/tcp/blockAccept/BlockAcceptTest.java
  3.5 java/rmi/server/Unreferenced/unreferencedContext/UnreferencedContext.java
  3.4 java/rmi/server/RMIClassLoader/spi/ContextInsulation.java
  3.4 java/rmi/server/Unreferenced/marshalledObjectGet/MarshalledObjectGet.java
  3.4 sun/rmi/server/MarshalOutputStream/marshalForeignStub/MarshalForeignStub.java
  3.3 java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java
  3.3 java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java
  3.3 java/rmi/registry/interfaceHash/InterfaceHash.java
  3.3 java/rmi/server/RMIClassLoader/loadProxyClasses/LoadProxyClasses.java
  3.3 java/rmi/server/UnicastRemoteObject/useDynamicProxies/UseDynamicProxies.java
  3.3 java/rmi/server/Unmarshal/checkUnmarshalOnStopThread/CheckUnmarshalOnStopThread.java
  3.2 java/rmi/activation/ActivationGroup/downloadActivationGroup/DownloadActivationGroup.java
  3.2 java/rmi/server/ObjID/randomIDs/RandomIDs.java
  3.2 java/rmi/server/RemoteObject/notExtending/NotExtending.java
  3.2 sun/rmi/transport/tcp/disableMultiplexing/DisableMultiplexing.java
  3.1 java/rmi/server/RMIClassLoader/delegateBeforePermissionCheck/DelegateBeforePermissionCheck.java
  3.1 java/rmi/server/RMIClassLoader/useGetURLs/UseGetURLs.java
  3.0 java/rmi/server/RMISocketFactory/useSocketFactory/registry/UseCustomSocketFactory.java
  2.9 java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java
  2.9 java/rmi/server/RMIClassLoader/getClassLoader/GetClassLoader.java
  2.8 java/rmi/registry/altSecurityManager/AltSecurityManager.java
  2.8 java/rmi/server/RMIClassLoader/delegateToContextLoader/DelegateToContextLoader.java
  2.8 java/rmi/server/RMIClassLoader/noSecurityManager/NoSecurityManager.java
  2.7 java/rmi/activation/ActivationSystem/activeGroup/IdempotentActiveGroup.java
  2.7 java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java
  2.7 java/rmi/server/RMIClassLoader/spi/DefaultProperty.java
  2.7 sun/rmi/rmic/RMIGenerator/RmicDefault.java
  2.6 java/rmi/server/RemoteObject/toStub/ToStub.java
  2.6 sun/rmi/runtime/Log/6409194/NoConsoleOutput.java
  2.5 java/rmi/Naming/UnderscoreHost.java
  2.5 java/rmi/server/useCustomRef/UseCustomRef.java
  2.4 java/rmi/server/serverStackTrace/SuppressStackTraces.java
  2.4 javax/rmi/ssl/SocketFactoryTest.java
  2.4 sun/rmi/runtime/Log/checkLogging/CheckLogging.java
  2.3 java/rmi/Naming/RmiIsNoScheme.java
  2.3 java/rmi/server/UnicastRemoteObject/changeHostName/ChangeHostName.java
  2.3 java/rmi/server/UnicastRemoteObject/marshalAfterUnexport/MarshalAfterUnexport2.java
  2.3 sun/rmi/rmic/covariantReturns/run.sh
  2.3 sun/rmi/rmic/defaultStubVersion/run.sh
  2.3 sun/rmi/runtime/Log/checkLogging/CheckLogStreams.java
  2.2 java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java
  2.2 java/rmi/server/RemoteObject/unrecognizedRefType/UnrecognizedRefType.java
  2.2 java/rmi/server/RemoteObject/verifyRemoteEquals/VerifyRemoteEquals.java
  2.2 java/rmi/server/serverStackTrace/ServerStackTrace.java
  2.2 java/rmi/transport/acceptLoop/CloseServerSocketOnTermination.java
  2.2 java/rmi/transport/httpSocket/HttpSocketTest.java
  2.2 sun/rmi/runtime/Log/4504153/Test4504153.java
  2.1 java/rmi/transport/closeServerSocket/CloseServerSocket.java
  2.1 java/rmi/transport/handshakeFailure/HandshakeFailure.java
  2.1 java/rmi/transport/pinLastArguments/PinLastArguments.java
  2.1 java/rmi/transport/reuseDefaultPort/ReuseDefaultPort.java
  2.0 java/rmi/server/UnicastRemoteObject/marshalAfterUnexport/MarshalAfterUnexport.java
  2.0 sun/rmi/log/ReliableLog/LogAlignmentTest.java
  1.9 java/rmi/registry/multipleRegistries/MultipleRegistries.java
  1.8 java/rmi/activation/log/LogTest.java
  1.8 java/rmi/Naming/DefaultRegistryPort.java
  1.8 java/rmi/Naming/LookupNameWithColon.java
  1.8 java/rmi/server/RemoteServer/setLogPermission/SetLogPermission.java
  1.8 java/rmi/server/Unmarshal/PrimitiveClasses.java
  1.8 sun/rmi/rmic/classFileVersion/run.sh
  1.7 java/rmi/activation/Activatable/notSerializable/NotSerializable.java
  1.7 java/rmi/invalidName/InvalidName.java
  1.7 java/rmi/server/clientStackTrace/ClientStackTrace.java
  1.7 java/rmi/server/RemoteServer/AddrInUse.java
  1.7 java/rmi/server/RMIClassLoader/spi/Property.java
  1.6 java/rmi/Naming/LookupIPv6.java
  1.6 java/rmi/server/RMIClassLoader/spi/Installed.java
  1.6 java/rmi/server/RMIClassLoader/spi/InvalidProperty.java
  1.6 sun/rmi/log/ReliableLog/SnapshotSize.java
  1.6 sun/rmi/rmic/classpath/RMICClassPathTest.java
  1.5 java/rmi/registry/emptyName/EmptyName.java
  1.5 java/rmi/RemoteException/chaining/Chaining.java
  1.5 java/rmi/server/RemoteServer/SetLogNull.java
  1.5 java/rmi/server/RMIClassLoader/getClassAnnotation/NullClass.java
  1.4 java/rmi/dgc/VMID/CheckVMID.java
  1.4 java/rmi/server/getRemoteClass/GetRemoteClass.java
  1.3 java/rmi/activation/ActivationGroupDesc/checkDefaultGroupName/CheckDefaultGroupName.java
  1.3 java/rmi/activation/CommandEnvironment/NullOptions.java
  1.3 java/rmi/MarshalledObject/compare/Compare.java
  1.3 java/rmi/MarshalledObject/compare/HashCode.java
  1.3 java/rmi/RMISecurityManager/checkPackageAccess/CheckPackageAccess.java
  1.1 java/rmi/MarshalledObject/compare/NullReference.java
  0.2 sun/rmi/rmic/extraCompilation/run.sh

Timings are accumulated from jtreg output such as the following:

TEST: java/rmi/activation/Activatable/nestedActivate/NestedActivate.java
  build: 0.547 seconds
  compile: 0.547 seconds
  build: 0.653 seconds
  compile: 0.652 seconds
  main: 2.212 seconds
TEST RESULT: Passed. Execution successful

I think the "build" and "compile" times are actually double-counting (they're almost always identical) so these timing are actually an overstatement of the actual times. Still, the timings should give an idea of which tests are the ones that need to be sped up.
Comments
Concurrency works! A single-threaded test has about 33% CPU utilization on my system (2-core Linux VM on a Mac), so I tried cd TOP/jdk/test make CONCURRENCY=6 jdk_rmi and the tests ran in a bit over 4 minutes! What's more, they all passed!
09-01-2013

There has already been good work done in this area (see JDK-7144861) but further work is possible. One easy way to speed up the test runs on machines with sufficient memory is to run with the jtreg -concurrency option.
24-12-2012