RFR: 8314569: (fs) Improve normalization of UnixPath for directories [v5]
Alan Bateman
alanb at openjdk.org
Mon Aug 28 16:09:12 UTC 2023
On Mon, 28 Aug 2023 08:13:38 GMT, Sergey Tsypanov <stsypanov at openjdk.org> wrote:
>> Avoiding `String.substring()` call in `UnixPath.normalize()` can significantly reduce normalization costs for directories on Linux:
>>
>> @BenchmarkMode(Mode.AverageTime)
>> @OutputTimeUnit(TimeUnit.NANOSECONDS)
>> @Warmup(time = 2, iterations = 5)
>> @Measurement(time = 2, iterations = 5)
>> @Fork(value = 4, jvmArgs = "-Xmx1g")
>> public class FileToPathBenchmark {
>>
>> @Benchmark
>> public Path toDirectoryPath(Data data) {
>> return FileSystems.getDefault().getPath(data.directoryPath);
>> }
>>
>> @State(Scope.Thread)
>> public static class Data {
>> private String directoryPath = "/tmp/tmp/tmp/";
>> }
>> }
>>
>> Results:
>>
>> baseline
>>
>> Benchmark Mode Cnt Score Error Units
>> FileToPathBenchmark.toDirectoryPath avgt 50 40.524 ± 0.940 ns/op
>> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate avgt 50 3269.167 ± 101.018 MB/sec
>> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate.norm avgt 50 175.213 ± 1.200 B/op
>> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space avgt 50 3279.401 ± 104.252 MB/sec
>> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space.norm avgt 50 175.756 ± 1.681 B/op
>> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Survivor_Space avgt 50 0.006 ± 0.001 MB/sec
>> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Survivor_Space.norm avgt 50 ≈ 10⁻³ B/op
>> FileToPathBenchmark.toDirectoryPath:·gc.count avgt 50 1412.000 counts
>> FileToPathBenchmark.toDirectoryPath:·gc.time avgt 50 4144.000 ms
>>
>> patched
>>
>> Benchmark Mode Cnt Score Error Units
>> FileToPathBenchmark.toDirectoryPath avgt 50 33.134 ± 2.313 ns/op
>> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate avgt 50 2652.997 ± 152.758 MB/sec
>> FileToPathBenchmark.toDirectoryPath:·gc.alloc.rate.norm avgt 50 115.210 ± 1.960 B/op
>> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space avgt 50 2654.258 ± 157.862 MB/sec
>> FileToPathBenchmark.toDirectoryPath:·gc.churn.G1_Eden_Space.norm avgt 50 115.200 ± 1.960 B/op
>> FileToPathBenchmark.toDirectoryPath:·gc.churn.G...
>
> Sergey Tsypanov has updated the pull request incrementally with one additional commit since the last revision:
>
> Style clean-up
Marked as reviewed by alanb (Reviewer).
-------------
PR Review: https://git.openjdk.org/jdk/pull/15342#pullrequestreview-1598616701
More information about the nio-dev
mailing list