On Thu, 7 Feb 2008 17:40:57 -0800 (PST) [email protected] wrote:
> Summary: fsync blocks concurrent writes to file
> Product: File System
> Version: 2.5
> KernelVersion: 22.214.171.124
> Platform: All
> OS/Version: Linux
> Tree: Mainline
> Status: NEW
> Severity: normal
> Priority: P1
> Component: ext3
> AssignedTo: [email protected]
> ReportedBy: [email protected]
> Latest working kernel version: none
> Earliest failing kernel version: 2.6.18
> Distribution: RHEL 4 & Fedora 8
> Hardware Environment: Dual Xeon & dual-core Athlon
> Software Environment: Java 1.5.0_14
> Problem Description: Multiple threads append transactions to a single file.
> When fsyncs are issued, no writes complete until the fsync completes. This has
> the effect of yielding the same write rate regardless of how many threads are
> writing to the file. Solaris 10 does not exhibit this problem and scales well
> as additional threads are added.
> I have confirmed this by running strace and witnessing that writes block until
> immediately after the fsync completes.
> When using truss on Solaris I have witnessed multiple writes completing while
> an fsync was in progress.
> Steps to reproduce:
> Open a file for writing.
> Launch multiple threads with each one writing data and followed by an fsync,
> but only if data has been written since the last fsync.
> I have googled this issue substantially and have found no answers.
I supposing teaching java about sync_file_range() would be all too hard.