On Fri, 30 May 2025 12:00:28 GMT, Darragh Clarke <dcla...@openjdk.org> wrote:

> This PR aims to Panamize the Java Kqueue implementation, This is based on the 
> work that was previously shared in https://github.com/openjdk/jdk/pull/22307 
> , The main change since then is that this branch takes advantage of the 
> changes made in https://github.com/openjdk/jdk/pull/25043 to allow for better 
> performance during errno handling.
> 
> These changes feature a lot of Jextract generated files, though alterations 
> have been made in relation to Errno handling and performance improvements.
> 
> I will update this description soon to include performance metrics on a few 
> microbenchmarks, though currently it's roughly 2% to 3% slower with the 
> changes, which is somewhat expected, though there are still a few ideas of 
> possible performance improvements that could be tried. Any suggestions or 
> comments in that area are more than welcome however.

Some of the files are missing a blank line at the end.

src/java.base/macosx/classes/jdk/internal/ffi/generated/BindingUtils.java line 
45:

> 43:     public static final AddressLayout C_POINTER = ValueLayout.ADDRESS
> 44:             .withTargetLayout(MemoryLayout.sequenceLayout(Long.MAX_VALUE, 
> JAVA_BYTE));
> 45:     public static final ValueLayout.OfLong C_LONG = ValueLayout.JAVA_LONG;

This is `int` on Windows. So, we could perhaps use 
`Linker.nativeLinker().canonicalLayouts().get("long")` here? "size_t" and 
"wchar_t" are other canonical layouts that may differ across platforms.

src/java.base/macosx/classes/jdk/internal/ffi/generated/kqueue/kqueue_h.java 
line 260:

> 258:      * }
> 259:      */
> 260:     public static int kevent64(int kq, MemorySegment changelist, int 
> nchanges, MemorySegment eventlist, int nevents, int flags, MemorySegment 
> timeout) {

Is this method ever used?

src/java.base/macosx/classes/jdk/internal/ffi/generated/kqueue/kqueue_h.java 
line 261:

> 259:      */
> 260:     public static int kevent64(int kq, MemorySegment changelist, int 
> nchanges, MemorySegment eventlist, int nevents, int flags, MemorySegment 
> timeout) {
> 261:         var adapted$ = kevent64.ADAPTED;

Why do we do this intermediary step? What is the reason for bringing 
`kevent64.ADAPTED` on the stack, as it is only used once? I know this is a 
pattern of jextract's.

src/java.base/macosx/classes/jdk/internal/ffi/generated/kqueue/kqueue_h.java 
line 263:

> 261:         var adapted$ = kevent64.ADAPTED;
> 262:         try {
> 263:             if (FFMUtils.TRACE_DOWNCALLS) {

I wonder what the price of this `if` branch might be (if any)? The javac 
compiler probably sees the 

`public static final boolean TRACE_DOWNCALLS = false;` as constant foldable and 
can eliminate the code at compile time.

src/java.base/macosx/classes/sun/nio/ch/KQueue.java line 44:

> 42:  */
> 43: 
> 44: class KQueue {

This class could be `final`

src/java.base/macosx/classes/sun/nio/ch/KQueue.java line 63:

> 61: 
> 62:     // filters
> 63:     static final int EVFILT_READ  = kqueue_h.EVFILT_READ();

Could we remove these constants and use `kqueue_h` constants directly?

src/java.base/macosx/classes/sun/nio/ch/KQueue.java line 121:

> 119:                             kqfd, keventMS, 1, NULL,
> 120:                             0, NULL);
> 121:                 } while ((result == -1));

Is there a constant for this magic `-1`?

src/java.base/macosx/classes/sun/nio/ch/KQueue.java line 147:

> 145:                     nevents, tsp);
> 146:             if (result < 0) {
> 147:                 if (result == errno_h.EINTR()) {

Shouldn't this be `result == -errno_h.EINTR()` instead?

-------------

PR Comment: https://git.openjdk.org/jdk/pull/25546#issuecomment-2987207196
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2156432012
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2121817152
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2121808733
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2121802519
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2121817810
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2156409376
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2121812502
PR Review Comment: https://git.openjdk.org/jdk/pull/25546#discussion_r2121782927

Reply via email to