[ 
https://issues.apache.org/jira/browse/DERBY-2020?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12480432
 ] 

Knut Anders Hatlen commented on DERBY-2020:
-------------------------------------------

I agree that alternative 2 sounds best.

I'll try to explain the details of the JVM bug as I understood it after logging 
it as a bug against FreeBSD's Java 
(http://www.freebsd.org/cgi/query-pr.cgi?pr=java/102888).

If the JVM is compiled on a system which has not defined both O_SYNC and 
O_DSYNC (which is the case for FreeBSD, and probably also other BSDs like Mac 
OS X), the JVM sources define O_SYNC as 0x0800 and O_DSYNC as 0x2000. As far as 
I know, the bit in 0x2000 has no meaning to the open() system call in BSD, so 
"rwd" mode will be identical to "rw" mode. However, 0x0800 is identical to the 
value of O_EXCL, which means "error if create and file exists". Therefore, 
"rws" mode is interpreted as "open in rw mode and fail if the file exists".

So to detect the JVM bug, you would have to
  1) Create a file (for instance with File.createFile() or 
File.createTempFile()).
  2) Open that file in rws mode and see if you get a FileNotFoundException.

> Change file option for syncing log file to disk from rws to rwd
> ---------------------------------------------------------------
>
>                 Key: DERBY-2020
>                 URL: https://issues.apache.org/jira/browse/DERBY-2020
>             Project: Derby
>          Issue Type: Improvement
>          Components: Performance, Store
>    Affects Versions: 10.3.0.0
>            Reporter: Olav Sandstaa
>         Assigned To: Olav Sandstaa
>         Attachments: disk-cache.png, no-disk-cache.png, rwd.diff, rwd.stat
>
>
> For writing the transaction log to disk Derby uses a
> RandomAccessFile. If it is supported by the JVM, the log files are
> opened in "rws" mode making the file system take care of syncing
> writes to disk. "rws" mode will ensure that both the data and the file
> meta-data is updated for every write to the file. On some operating
> systems (e.g. Solaris) this leads to two write operation to the disk
> for every write issued by Derby. This is limiting the throughput of
> update intensive applications.  If we could change the file mode to
> "rwd" this could reduce the number of updates to the disk.
> I have run some simple tests where I have changed mode from "rws" to
> "rwd" for the Derby log file. When running a small numbers of
> concurrent client threads the throughput is almost doubled and the
> response time is almost halved. I will attach some graphs that show
> this when running a given number of concurrent "tpc-b" like clients. These
> graphs show the throughput when running with "rws" and "rwd" mode when the
> disk's write cache has been enabled and disabled.
> I am creating this Jira to have a place where we can collect
> information about issues both for and against changing the default
> mode for writing to log files.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to