jextract looses type safety in generated bindings

Michael Böckling michael at boeckling.net
Wed Apr 7 14:35:53 UTC 2021


This is great, thanks! I had seen that benchmark before and wondered what
the numbers would be for the current version. Maybe you can publish those
numbers somewhere? "Scientific" or not, the general trend is surely
correct. I'm not yet sure how important the per-call overhead will be for
my use case, good to know that Panama is a high-performance candidate.

Am Mi., 7. Apr. 2021 um 15:43 Uhr schrieb Maurizio Cimadamore <
maurizio.cimadamore at oracle.com>:

>
> On 07/04/2021 11:57, Maurizio Cimadamore wrote:
> > If the latter, we had an API similar to that in an earlier iteration
> > of the Panama project (another Pointer-like API); while this API was
> > enough, from an expressiveness perspective, to support jextract use
> > cases, it also added noticeable overhead to basic operation like
> > pointer dereference.
>
> To give a better ideas of the numbers involved - there is a nice native
> interop shootout here:
>
> https://github.com/zakgof/java-native-benchmark
>
> This was ran against the old Panama API, the one featuring the
> high-level Pointer API. As you can see Panama doesn't come out too well
> in that benchmark.
>
> For fun, I've ported the benchmark using the API we have released in
> Java 16, and here are the results I have:
>
> ```
> Benchmark                                   Mode  Cnt Score     Error
> Units
> JmhCallOnly.bridj                           avgt   50   279.563 ▒
> 4.312  ns/op
> JmhCallOnly.jna                             avgt   50   826.049 ▒
> 11.840  ns/op
> JmhCallOnly.jna_direct                      avgt   50   934.675 ▒
> 13.662  ns/op
> JmhCallOnly.jni_javacpp                     avgt   50    36.899 ▒
> 0.618  ns/op
> JmhCallOnly.jnr                             avgt   50   233.757 ▒
> 3.090  ns/op
> JmhCallOnly.panama                          avgt   50    30.332 ▒
> 0.386  ns/op
> JmhGetSystemTimeSeconds.bridj               avgt   50  1306.806 ▒
> 131.925  ns/op
> JmhGetSystemTimeSeconds.java_calendar       avgt   50   136.437 ▒
> 3.949  ns/op
> JmhGetSystemTimeSeconds.java_date           avgt   50    50.450 ▒
> 0.750  ns/op
> JmhGetSystemTimeSeconds.java_localdatetime  avgt   50    58.232 ▒
> 1.456  ns/op
> JmhGetSystemTimeSeconds.jna                 avgt   50  3194.622 ▒
> 216.633  ns/op
> JmhGetSystemTimeSeconds.jnaDirect           avgt   50  3227.971 ▒
> 193.953  ns/op
> JmhGetSystemTimeSeconds.jni_javacpp         avgt   50   418.683 ▒
> 5.789  ns/op
> JmhGetSystemTimeSeconds.jnr                 avgt   50   327.486 ▒
> 7.548  ns/op
> JmhGetSystemTimeSeconds.panama              avgt   50   390.615 ▒
> 3.987  ns/op
> ```
>
> (all this has been ran unscientifically, using a VirtualBox instance :-) )
>
>
> As you can see, the API we have in 16 are pretty competitive with JNI -
> only JNR does better, but I believe that's due to differences in how
> memory is allocated - e.g. the memory segment API does a malloc and a
> free, and it also zeroes memory (as well as keeping track of how much
> memory has been allocated in the JDK as a whole, which is a need for
> us). I'm pretty sure that (a) JNR doesn't bother with any of this
> (rightfully so!) and (b) if we started playing with custom segment
> allocators (which the latest API allows you to do) we can obtain numbers
> which surpass everything seen here (as we can amortize the allocation
> cost).
>
> When it comes to overhead for a single native call (e.g. ignoring memory
> allocation overhead), you can see that the Linker API in 16 comes out
> the best of the bunch.
>
> So, every interop solution in this space picks a different compromise
> when it comes to expressiveness vs. performance. You can see how our
> APIs have benefited by going lower level - we started off being the
> slowest and ended up there with the best (there is some 10x gain in
> there). Of course users are free to pick the solution they prefer,
> depending on the particular use cases they are facing.
>
> Maurizio
>
>
>


More information about the panama-dev mailing list