[Top] [All Lists]

Re: 12x performance drop on md/linux+sw raid1 due to barriers [xfs]

To: ralf@xxxxxxxx
Subject: Re: 12x performance drop on md/linux+sw raid1 due to barriers [xfs]
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Wed, 18 Feb 2009 17:19:21 -0600
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20090218230958.GA6506@xxxxxxxx>
References: <alpine.DEB.1.10.0812060928030.14215@xxxxxxxxxxxxxxxx> <200812141912.59649.Martin@xxxxxxxxxxxx> <18757.33373.744917.457587@xxxxxxxxxxxxxxxxxx> <200812151948.59870.Martin@xxxxxxxxxxxx> <18758.57121.570007.816329@xxxxxxxxxxxxxxxxxx> <B50173E3-7975-4A71-903A-A76D910CBB3A@xxxxxxxxxxx> <20090218230958.GA6506@xxxxxxxx>
User-agent: Thunderbird (Macintosh/20081209)
Ralf Liebenow wrote:
> Hello !
>> Correct ordering can be proven to be enough to provide transactional
>> correctness, enough to ensure that filesystems can not get corrupted
>> on power down.
> Please beware that caching RAID controllers which are not battery
> backed and the harddisk (when write caching) may decide to 
> re-order writes to the disk, so the ordering imposed by the 
> operating system (filesystem driver) may not be retained. 
> This is usually done by harddisks and
> controllers to minimize seek times and thats what disk
> command queueing is good for. So ordering can only be retained
> if all external caching mechanism and command queueing are
> switched off. 

That's not necessarily true.

The only *requirement* for barriers is preservation of ordering.  It is
*implemented* today by cache flushing, because that's the best we can do
for now (as I understand it).

It is certainly possible that an IO could be flagged which tells the
drive that it may not rearrange the cache destaging across a barrier IO.
 It could cache at will, as long as the critical ordering is maintained.


So even though barriers are be implemented w/ cache flushes today, it
would be a mistake to rely on that implementation.  IOW, don't confuse
cache flushing w/ ordering requirements just because the ordering
problem is solved *today* with cache flushes.


<Prev in Thread] Current Thread [Next in Thread>