@@ -172,16 +172,13 @@ def parserNames(self):
172172 return super (TemporaryWorkdirMixin , self ).parserNames () + ["temporary_workdir_parser" ]
173173
174174
175- class BaseMicroserviceBenchmarkSuite (object ):
175+ class BaseMicroserviceBenchmarkSuite (mx_benchmark . BenchmarkSuite ):
176176 def group (self ):
177177 return "Graal"
178178
179179 def subgroup (self ):
180180 return "graal-compiler"
181181
182- def version (self ):
183- raise NotImplementedError ()
184-
185182 def validateReturnCode (self , retcode ):
186183 return retcode == 143
187184
@@ -238,6 +235,7 @@ def mainClass(self):
238235 def createCommandLineArgs (self , benchmarks , bmSuiteArgs ):
239236 lib = self .applicationDist ()
240237 classpath = os .path .join (lib , "BOOT-INF/classes" )
238+ classpath += ':' + os .path .join (lib , "classes" )
241239 for filename in os .listdir (os .path .join (lib , "BOOT-INF/lib" )):
242240 if filename .endswith (".jar" ):
243241 classpath = classpath + ":" + os .path .join (lib , "BOOT-INF/lib" , filename )
@@ -258,8 +256,16 @@ def default_stages(self):
258256
259257
260258class BasePetClinicBenchmarkSuite (BaseSpringBenchmarkSuite ):
261- def version (self ):
262- return "0.1.6"
259+ """
260+ Version 0.1.7 MIGHT NOT be fully functional. So far, it was used only to collect image build time metrics.
261+ """
262+ def availableSuiteVersions (self ):
263+ # 0.1.6 is still based on org.springframework.experimental
264+ # 0.1.7 is based on Spring 3, hence with official GraalVM NI support, requires Java 17 or newer
265+ return ["0.1.6" , "0.1.7" ]
266+
267+ def defaultSuiteVersion (self ):
268+ return self .availableSuiteVersions ()[0 ]
263269
264270 def applicationDist (self ):
265271 return mx .library ("PETCLINIC_" + self .version (), True ).get_path (True )
@@ -477,6 +483,111 @@ def extra_image_build_argument(self, benchmark, args):
477483 def default_stages (self ):
478484 return ['instrument-image' , 'instrument-run' , 'image' , 'run' ]
479485
486+ class BaseQuarkusRegistryBenchmark (BaseQuarkusBenchmarkSuite , mx_sdk_benchmark .BaseMicroserviceBenchmarkSuite ):
487+ """
488+ This benchmark is NOT yet fully functional - there is not load for measuring its runtime performance.
489+ It is only useful to collect image build time metrics.
490+ """
491+
492+ def version (self ):
493+ return "0.0.1"
494+
495+ def name (self ):
496+ return "quarkus"
497+
498+ def benchmarkList (self , bmSuiteArgs ):
499+ return ["registry" ]
500+
501+ def default_stages (self ):
502+ return ['image' ]
503+
504+ def createCommandLineArgs (self , benchmarks , bmSuiteArgs ):
505+ if benchmarks is None :
506+ mx .abort ("Suite can only run a single benchmark per VM instance." )
507+ elif len (benchmarks ) != 1 :
508+ mx .abort ("Must specify exactly one benchmark." )
509+ else :
510+ benchmark = benchmarks [0 ]
511+ return self .vmArgs (bmSuiteArgs ) + ["-jar" , os .path .join (self .applicationDist (), benchmark + ".jar" )]
512+
513+ def applicationDist (self ):
514+ return mx .library ("QUARKUS_REGISTRY_" + self .version (), True ).get_path (True )
515+
516+ def extra_image_build_argument (self , benchmark , args ):
517+ return ['-J-Dsun.nio.ch.maxUpdateArraySize=100' ,
518+ '-J-Djava.util.logging.manager=org.jboss.logmanager.LogManager' ,
519+ '-J-DCoordinatorEnvironmentBean.transactionStatusManagerEnable=false' ,
520+ '-J-Dio.quarkus.caffeine.graalvm.recordStats=true' ,
521+ '-J-Dlogging.initial-configurator.min-level=500' ,
522+ '-J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory' ,
523+ '-J-Dvertx.disableDnsResolver=true' ,
524+ '-J-Dio.netty.noUnsafe=true' ,
525+ '-J-Dio.netty.leakDetection.level=DISABLED' ,
526+ '-J-Dio.netty.allocator.maxOrder=3' ,
527+ '-J-Duser.language=en' ,
528+ '-J-Duser.country=GB' ,
529+ '-J-Dfile.encoding=UTF-8' ,
530+ '--features=org.hibernate.graalvm.internal.GraalVMStaticFeature,io.quarkus.hibernate.orm.runtime.graal.DisableLoggingFeature,io.quarkus.caffeine.runtime.graal.CacheConstructorsFeature,org.hibernate.graalvm.internal.QueryParsingSupport,io.quarkus.jdbc.postgresql.runtime.graal.SQLXMLFeature,io.quarkus.runner.Feature,io.quarkus.runtime.graal.ResourcesFeature,io.quarkus.runtime.graal.DisableLoggingFeature,io.quarkus.hibernate.validator.runtime.DisableLoggingFeature' ,
531+ '-J--add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED' ,
532+ '-J--add-opens=java.base/java.text=ALL-UNNAMED' ,
533+ '-J--add-opens=java.base/java.io=ALL-UNNAMED' ,
534+ '-J--add-opens=java.base/java.lang.invoke=ALL-UNNAMED' ,
535+ '-J--add-opens=java.base/java.util=ALL-UNNAMED' ,
536+ '-H:+AllowFoldMethods' ,
537+ '-J-Djava.awt.headless=true' ,
538+ '--no-fallback' ,
539+ '-H:+ReportExceptionStackTraces' ,
540+ '-H:-AddAllCharsets' ,
541+ '--enable-url-protocols=http,https' ,
542+ '-H:-UseServiceLoaderFeature' ,
543+ '-H:+StackTrace' ,
544+ '-J--add-exports=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED' ,
545+ '-J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk=ALL-UNNAMED' ,
546+ '--exclude-config' ,
547+ 'io\.netty\.netty-codec' ,
548+ '/META-INF/native-image/io\.netty/netty-codec/generated/handlers/reflect-config\.json' ,
549+ '--exclude-config' ,
550+ 'io\.netty\.netty-handler' ,
551+ '/META-INF/native-image/io\.netty/netty-handler/generated/handlers/reflect-config\.json'
552+ ] + super (BaseQuarkusBenchmarkSuite ,self ).extra_image_build_argument (benchmark , args )
553+
554+ mx_benchmark .add_bm_suite (BaseQuarkusRegistryBenchmark ())
555+
556+ class BaseMicronautMuShopBenchmark (BaseMicronautBenchmarkSuite , mx_sdk_benchmark .BaseMicroserviceBenchmarkSuite ):
557+ """
558+ This benchmark suite is NOT yet fully functional - there is not load for measuring its runtime performance.
559+ It is only useful to collect image build time metrics.
560+ """
561+
562+ def version (self ):
563+ return "0.0.1"
564+
565+ def name (self ):
566+ return "mushop"
567+
568+ def benchmarkList (self , bmSuiteArgs ):
569+ return ["user" , "order" , "payment" ]
570+
571+ def createCommandLineArgs (self , benchmarks , bmSuiteArgs ):
572+ if benchmarks is None :
573+ mx .abort ("Suite can only run a single benchmark per VM instance." )
574+ elif len (benchmarks ) != 1 :
575+ mx .abort ("Must specify exactly one benchmark." )
576+ else :
577+ benchmark = benchmarks [0 ]
578+ return self .vmArgs (bmSuiteArgs ) + ["-jar" , os .path .join (self .applicationDist (), benchmark + ".jar" )]
579+
580+ def applicationDist (self ):
581+ return mx .library ("MICRONAUT_MUSHOP_" + self .version (), True ).get_path (True )
582+
583+ def extra_image_build_argument (self , benchmark , args ):
584+ return [
585+ '--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk=ALL-UNNAMED' ,
586+ '--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.configure=ALL-UNNAMED' ,
587+ '--add-exports=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED'
588+ ] + super (BaseMicronautBenchmarkSuite ,self ).extra_image_build_argument (benchmark , args )
589+
590+ mx_benchmark .add_bm_suite (BaseMicronautMuShopBenchmark ())
480591
481592class BaseShopCartBenchmarkSuite (BaseMicronautBenchmarkSuite ):
482593 def version (self ):
0 commit comments