Re: [PATCH 06/20] xfs: don't use REQ_PREFLUSH for split log writes

Brian Foster
2019-06-05T15:47:28Z

On Wed, Jun 05, 2019 at 05:14:51PM +0200, Christoph Hellwig wrote:
> On Wed, Jun 05, 2019 at 06:51:12AM -0400, Brian Foster wrote:
> > Yep. Another thing that briefly crossed my mind is whether we could in
> > theory optimize flushes out if the tail hasn't moved since the last
> > flush. We'd still have to FUA the log records, but we haven't introduced
> > any such integrity/ordering requirements if the tail hasn't changed,
> > right?
> >
> > It's debatable whether that would provide any value, but it might at
> > least apply to certain scenarios like if the tail happens to be pinned
> > by a single object across several iclog writes, or if fsyncs or some
> > other pattern result in smaller/frequent checkpoints relative to
> > metadata writeback, etc.
>
> Well, for the fsync we require the data device to be flushed for
> the fsync semantics anyway. So we'd now need to treat that special,
> simiar to that old log_flushed return parameter hack.

Yeah, good point. It looks like the current fsync code already relies on
the flush associated with the log force if the log and data devices are
the same (otherwise we explicitly flush the data dev between data
writeback and the log force). Any optimization there probably wouldn't
buy anything for fsync callers that have to write file data. It would
just shift responsibility of the flush to the fsync and perhaps
complicate that current log_flushed thing since it also kind of assumes
an unconditional flush based on iclog state.

Brian