On Mon, 5 Jan 2026 20:19:43 GMT, Jonas Norlinder <[email protected]> wrote:

>> # Background
>> 
>> When Java applications uses APIs like java.io.FileOutputStream it will hook 
>> into native implementations in e.g. io_util_md.c for Unix/Linux. Java does 
>> not allow reading a directory and the implementation reflect this fact. For 
>> Unix there are three access modes O_RDONLY, O_WRONLY, O_RDWR. Moreover, on 
>> Unix it is possible to read a directory and an extra check has been added in 
>> the code to ensure that the user is trying to read a file (with O_RDONLY) 
>> and not a directory. This extra check results in an additional syscall.
>> 
>> This check is actually redundant in case user are using access mode O_WRONLY 
>> or O_RDWR. If one is trying to call open on a directory with these modes the 
>> specification in Unix and Linux specifies that EISDIR shall be returned. For 
>> the case of Unix standard it has been part of the standard at least since 
>> 1997 (https://pubs.opengroup.org/onlinepubs/007908799/xsh/open.html) and 
>> Linux since at least 2004 (see v 2.0 
>> https://www.kernel.org/pub/linux/docs/man-pages/Archive/ ) to return error 
>> if user is trying to write to an directory. In OpenJDK we also include AIX 
>> and they are certified to follow the Unix standard 
>> (https://www.opengroup.org/openbrand/register/ibm.htm). I believe that it is 
>> therefore safe to assume that this is a well implemented aspect of the Unix 
>> standard by now and that this technical debt can be eliminated (assuming 
>> that this check was indeed needed at some point).
>> 
>> # Performance Improvements
>> 
>> A stress-test that opens a huge amount of files to trigger a syscall storm 
>> reveals that a removal of this redundant syscall may also improve 
>> performance during high load:
>> 
>> 
>> JDK 27 baseline
>> Benchmark            Mode   Cnt     Score    Error   Units
>> FileWriteStress.test sample 8438452 3722.451 ± 2.402 ns/op
>> 
>> JDK 27 patched
>> Benchmark            Mode   Cnt     Score    Error   Units
>> FileWriteStress.test sample 4952304 3191.912 ± 4.011 ns/op
>> 
>> 
>> ~17% performance boost.
>
> Jonas Norlinder has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Fixes from review

Marked as reviewed by alanb (Reviewer).

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

PR Review: https://git.openjdk.org/jdk/pull/28823#pullrequestreview-3629926450

Reply via email to