parallel IO anomaly with windows REFS formatted drive

Bernd Eckenfels ecki at zusammenkunft.net
Mon Oct 30 00:34:48 UTC 2017


Just a FYI, I would not worry too much about this, Microsoft removed the ability to create ReFS volumes in Win 10 1710 as they seem to only want to support it with Servers and the new Workstation SKUs. Wouldn't it be enough to put a warning into the release notes?

However it is again and again interesting to see just how problematic the NIO2 implementations in some areas are...

Gruss
Bernd

Gruss
Bernd
--
http://bernd.eckenfels.net
________________________________
From: core-libs-dev <core-libs-dev-bounces at openjdk.java.net> on behalf of Michael Skells <mike.skells1 at gmail.com>
Sent: Sunday, October 29, 2017 11:09:23 PM
To: core-libs-dev at openjdk.java.net
Subject: parallel IO anomaly with windows REFS formatted drive

Hi
It seems to me that some NIO based file creates don't scale work well with
REFS formatted drives
REFS is an alternative (to NTFS) drive format for Windows 8 and above

When working with NTFS on my test system, as we use more threads the
performance improves so some degree, (1000 files creates take 5-600 ms with
one thread and 2-300 ms with 4 threads)
when using REFS the single threaded times are roughly the same for 1 and 2
threads, but get much worse for 3 and 4 threads (1200 - 1600 ms)

this showdown is only when using FileChanel.open and synchronous IO, for
the AsynchronousFileChannel it seems roughly the to scale as expected

CSV attached for the test results, and some test code. The test code is in
scala, and I can convert if needed, but it just really 3 calls, to open
write and close the files

My test system is an I7 4 core window 10 pro with Norton installed, but an
exclusion for the specified drives, and indexing disabled. All writes are
to an M.2 SSD with write-though cache

Some background

I am working on the back end code generation of the scala compiler which
generates many thousand  small .class files, and part of that is to tune
the IO. For windows where the IO cost is significant, so I had a few test
app to simulate and measure the relative performance of the different
alternatives

Any ideas for a bulk file creation alternative welcome. I know we could
write to a JAR but that requires other re-tooling

Regards
Mike


More information about the core-libs-dev mailing list