xfs
[Top] [All Lists]

Re: [PATCH v2 2/2] dax: move writeback calls into the filesystems

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: [PATCH v2 2/2] dax: move writeback calls into the filesystems
From: Dan Williams <dan.j.williams@xxxxxxxxx>
Date: Thu, 11 Feb 2016 12:58:38 -0800
Cc: Jan Kara <jack@xxxxxxx>, Ross Zwisler <ross.zwisler@xxxxxxxxxxxxxxx>, "linux-kernel@xxxxxxxxxxxxxxx" <linux-kernel@xxxxxxxxxxxxxxx>, "Theodore Ts'o" <tytso@xxxxxxx>, Alexander Viro <viro@xxxxxxxxxxxxxxxxxx>, Andreas Dilger <adilger.kernel@xxxxxxxxx>, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, Jan Kara <jack@xxxxxxxx>, Matthew Wilcox <willy@xxxxxxxxxxxxxxx>, linux-ext4 <linux-ext4@xxxxxxxxxxxxxxx>, linux-fsdevel <linux-fsdevel@xxxxxxxxxxxxxxx>, Linux MM <linux-mm@xxxxxxxxx>, "linux-nvdimm@xxxxxxxxxxxx" <linux-nvdimm@xxxxxxxxxxxx>, XFS Developers <xfs@xxxxxxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=mYKAAskfwNuOOv/XBblSu6oxzm1xEQajzN90PWPbBjk=; b=zHQFU4oRfolDcTWVqpo5uLz2dJl7RQUEmm8tFrbyYQ+gfT18KpgyyxGelIXyrGo9T9 2I0tffw3794dpeNeFeDRWNsRwiboJR0zH4Veq7cx5K/vQwnJEo50l5Zauh8zBs5E2XL4 I+aZ9+9FOIMkS4Eoe4IlC+ICbHe46UfX+EZD6u3pTxoNFrMDLyumaY+pmwx/kIJAbf2q PSmbzagmWo29v7WZcSgWK+K+gfjhLDLfI4QcwrhMFJzdlLZ0PGIrcXQ9QOxJUmZeOIUz kcyBXvyJTlKi22MoxqBi9fMQ4kqvDw1Z1pApzm66aZyrSeei/d4ihuXWXDLITM5MKE07 aQAA==
In-reply-to: <20160211204635.GI19486@dastard>
References: <1455137336-28720-1-git-send-email-ross.zwisler@xxxxxxxxxxxxxxx> <1455137336-28720-3-git-send-email-ross.zwisler@xxxxxxxxxxxxxxx> <20160210220312.GP14668@dastard> <20160210224340.GA30938@xxxxxxxxxxxxxxx> <20160211125044.GJ21760@xxxxxxxxxxxxx> <CAPcyv4g60iOTd-ShBCfsK+B7xArcc5pWXWktNop53otDbUW-3g@xxxxxxxxxxxxxx> <20160211204635.GI19486@dastard>
On Thu, Feb 11, 2016 at 12:46 PM, Dave Chinner <david@xxxxxxxxxxxxx> wrote:
[..]
>> It seems to me we need to modify the
>> metadata i/o paths to bypass the page cache,
>
> XFS doesn't use the block device page cache for it's metadata - it
> has it's own internal metadata cache structures and uses get_pages
> or heap memory to back it's metadata. But that doesn't make mixing
> DAX and pages in the block device mapping tree sane.
>
> What you are missing here is that the underlying architecture of
> journalling filesystems mean they can't use DAX for their metadata.
> Modifications have to be buffered, because they have to be written
> to the journal first before they are written back in place. IOWs, we
> need to buffer changes in volatile memory for some time, and that
> means we can't use DAX during transactional modifications.
>
> And to put the final nail in that coffin, metadata in XFS can be
> discontiguous multi-block objects - in those situations we vmap the
> underlying pages so they appear to the code to be a contiguous
> buffer, and that's something we can't do with DAX....

Sorry, I wasn't clear when I said "bypass page cache" I meant a
solution similar to commit d1a5f2b4d8a1 "block: use DAX for partition
table reads".  However, I suspect that is broken if the filesystem is
not ready to see a new page allocated for every I/O.  I assume one
thread will want to insert a page in the radix for another thread to
find/manipulate before metadata gets written back to storage.

>> or teach the fsync code
>> how to flush populated data pages out of the radix.
>
> That doesn't solve the problem. Filesystems free and reallocate
> filesystem blocks without intermediate block device mapping
> invalidation calls, so what is one minute a data block accessed by
> DAX may become a metadata block that accessed via buffered IO.  It
> all goes to crap very quickly....
>
> However, I'd say fsync is not the place to address this. This block
> device cache aliasing issue is supposed to be what
> unmap_underlying_metadata() solves, right?

I'll take a look at this.  Right now I'm trying to implement the
"clear block-device-inode S_DAX on fs mount" approach.  My concern
though is that  we need to disable block device mmap while a
filesystem is mounted...

Maybe I don't need to worry because it's already the case that a mmap
of the raw device may not see the most up to date data for a file that
has dirty fs-page-cache data.

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