claeis / ilivalidator

INTERLIS validator
14 stars 21 forks source link

native image performance #364

Open edigonzales opened 2 years ago

edigonzales commented 2 years ago

Die Performance des native images ist signifikant schlechter im Vergleich zur "puren" Java-Variante. Die Fruchtfolgeflächen https://s3.eu-central-1.amazonaws.com/ch.so.agi.geodata/ch.so.alw.fruchtfolgeflaechen_latest_xtf.zip dauern circa 8 Minuten mit der Java-Variante und 16 Minuten mit dem native image.

Da das native image in der Community Edition Variante nur SerialGC unterstützt, habe ich diesen auch für die JVM-Variante verwendet.

So wie ichs verstehe, ist leider der GC-Output des native image nicht identisch mit dem GC-Output der JVM-Variante und mir ist somit nicht klar, wie man diesen GC-Output analysieren könnte. Native image kennt -XX:+PrintGC -XX:+VerboseGC aber kann ich keine File schreiben. JVM kennt -Xlog:gc*:file=<PATH_TO_GC_LOG_FILE> (ab Java 9).

Vielleicht ist von der Charakteristik her die Aufgabe nicht wirklich native image geeignet? Long running und high throughput?

JVM:

Screenshot 2022-10-29 at 19 03 36

Native image:

Screenshot 2022-10-29 at 19 22 29
edigonzales commented 1 year ago

Mit --singlePass getestet. Gleicher Datensatz wie im Eingangsticket.

JVM: Info: End date 2022-11-21 21:13 validation took 00h:00m:28s.0168ms JVM -Xcomp: Info: End date 2022-11-21 21:12 validation took 00h:01m:05s.0936ms Native Image: Info: End date 2022-11-21 21:15 validation took 00h:01m:18s.0097ms

Mit -Xcomp ist man nahe an der "schlechten" Native Image Performance. -Xcomp kompiliert die Sache gleich zu Beginn runter und macht entsprechend keine Optimierungen zur Laufzeit. So habe ich es jedenfalls verstanden. Darum finde ich es "ähnlich" vom Verhalten wie AOT. Ob die ähnliche Performance aber auf das zurückzuführen ist, weiss ich nicht.

@claeis Was machen?

edigonzales commented 1 year ago

Seit GraalVM 23.0 ist die Enterprise-Edition als Oracle GraalVM "frei" verfügbar. D.h. es gibt profile guided optimizations und für Linux auch G1GC. Das sieht damit schon viel besser aus:

Ilivalidator 1.13.3 und Solothurner Furchtfolgeflächen (mins:secs):