On Apr 3, 2010, at 5:47 PM, Ragnar Sundblad wrote:
> On 2 apr 2010, at 22.47, Neil Perrin wrote:
>>> Suppose there is an application which sometimes does sync writes, and
>>> sometimes async writes. In fact, to make it easier, suppose two processes
>>> open two files, one of which always writes asynchronously, and one of which
>>> always writes synchronously. Suppose the ZIL is disabled. Is it possible
>>> for writes to be committed to disk out-of-order? Meaning, can a large block
>>> async write be put into a TXG and committed to disk before a small sync
>>> write to a different file is committed to disk, even though the small sync
>>> write was issued by the application before the large async write? Remember,
>>> the point is: ZIL is disabled. Question is whether the async could
>>> possibly be committed to disk before the sync.
>> Threads can be pre-empted in the OS at any time. So even though thread A
>> W1 before thread B issued W2, the order is not guaranteed to arrive at ZFS
>> as W1, W2.
>> Multi-threaded applications have to handle this.
>> If this was a single thread issuing W1 then W2 then yes the order is
>> regardless of whether W1 or W2 are synchronous or asynchronous.
>> Of course if the system crashes then the async operations might not be there.
> Could you please clarify this last paragraph a little:
> Do you mean that this is in the case that you have ZIL enabled
> and the txg for W1 and W2 hasn't been commited, so that upon reboot
> the ZIL is replayed, and therefore only the sync writes are
> eventually there?
yes. The ZIL needs to be replayed on import after an unclean shutdown.
> If, lets say, W1 is an async small write, W2 is a sync small write,
> W1 arrives to zfs before W2, and W2 arrives before the txg is
> commited, will both writes always be in the txg on disk?
> If so, it would mean that zfs itself never buffer up async writes to
> larger blurbs to write at a later txg, correct?
> I take it that ZIL enabled or not does not make any difference here
> (we pretend the system did _not_ crash), correct?
For import following a clean shutdown, there are no transactions in
the ZIL to apply.
For async-only workloads, there are no transactions in the ZIL to apply.
Do not assume that power outages are the only cause of unclean shutdowns.
ZFS storage and performance consulting at http://www.RichardElling.com
ZFS training on deduplication, NexentaStor, and NAS performance
Las Vegas, April 29-30, 2010 http://nexenta-vegas.eventbrite.com
zfs-discuss mailing list