From: Christoph Hellwig <hch@lst.de> To: Matthew Wilcox <willy@infradead.org> Cc: Dave Chinner <david@fromorbit.com>, Christoph Hellwig <hch@lst.de>, Goldwyn Rodrigues <rgoldwyn@suse.de>, linux-fsdevel@vger.kernel.org, linux-btrfs@vger.kernel.org, fdmanana@gmail.com, dsterba@suse.cz, darrick.wong@oracle.com, cluster-devel@redhat.com, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org Subject: Re: always fall back to buffered I/O after invalidation failures, was: Re: [PATCH 2/6] iomap: IOMAP_DIO_RWF_NO_STALE_PAGECACHE return if page invalidation fails Date: Wed, 8 Jul 2020 18:54:12 +0200 [thread overview] Message-ID: <20200708165412.GA637@lst.de> (raw) In-Reply-To: <20200708135437.GP25523@casper.infradead.org> On Wed, Jul 08, 2020 at 02:54:37PM +0100, Matthew Wilcox wrote: > Direct I/O isn't deterministic though. If the file isn't shared, then > it works great, but as soon as you get mixed buffered and direct I/O, > everything is already terrible. Direct I/Os perform pagecache lookups > already, but instead of using the data that we found in the cache, we > (if it's dirty) write it back, wait for the write to complete, remove > the page from the pagecache and then perform another I/O to get the data > that we just wrote out! And then the app that's using buffered I/O has > to read it back in again. Mostly agreed. That being said I suspect invalidating clean cache might still be a good idea. The original idea was mostly on how to deal with invalidation failures of any kind, but falling back for any kind of dirty cache also makes at least some sense. > I have had an objection raised off-list. In a scenario with a block > device shared between two systems and an application which does direct > I/O, everything is normally fine. If one of the systems uses tar to > back up the contents of the block device then the application on that > system will no longer see the writes from the other system because > there's nothing to invalidate the pagecache on the first system. Err, WTF? If someone access shared block devices with random applications all bets are off anyway. > > Unfortunately, this is in direct conflict with the performance > problem caused by some little arsewipe deciding to do: > > $ while true; do dd if=/lib/x86_64-linux-gnu/libc-2.30.so iflag=direct of=/dev/null; done > > ... doesn't hurt me because my root filesystem is on ext4 which doesn't > purge the cache. But anything using iomap gets all the pages for libc > kicked out of the cache, and that's a lot of fun. ext4 uses iomap..
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de> To: cluster-devel.redhat.com Subject: [Cluster-devel] always fall back to buffered I/O after invalidation failures, was: Re: [PATCH 2/6] iomap: IOMAP_DIO_RWF_NO_STALE_PAGECACHE return if page invalidation fails Date: Wed, 8 Jul 2020 18:54:12 +0200 [thread overview] Message-ID: <20200708165412.GA637@lst.de> (raw) In-Reply-To: <20200708135437.GP25523@casper.infradead.org> On Wed, Jul 08, 2020 at 02:54:37PM +0100, Matthew Wilcox wrote: > Direct I/O isn't deterministic though. If the file isn't shared, then > it works great, but as soon as you get mixed buffered and direct I/O, > everything is already terrible. Direct I/Os perform pagecache lookups > already, but instead of using the data that we found in the cache, we > (if it's dirty) write it back, wait for the write to complete, remove > the page from the pagecache and then perform another I/O to get the data > that we just wrote out! And then the app that's using buffered I/O has > to read it back in again. Mostly agreed. That being said I suspect invalidating clean cache might still be a good idea. The original idea was mostly on how to deal with invalidation failures of any kind, but falling back for any kind of dirty cache also makes at least some sense. > I have had an objection raised off-list. In a scenario with a block > device shared between two systems and an application which does direct > I/O, everything is normally fine. If one of the systems uses tar to > back up the contents of the block device then the application on that > system will no longer see the writes from the other system because > there's nothing to invalidate the pagecache on the first system. Err, WTF? If someone access shared block devices with random applications all bets are off anyway. > > Unfortunately, this is in direct conflict with the performance > problem caused by some little arsewipe deciding to do: > > $ while true; do dd if=/lib/x86_64-linux-gnu/libc-2.30.so iflag=direct of=/dev/null; done > > ... doesn't hurt me because my root filesystem is on ext4 which doesn't > purge the cache. But anything using iomap gets all the pages for libc > kicked out of the cache, and that's a lot of fun. ext4 uses iomap..
next prev parent reply other threads:[~2020-07-08 16:54 UTC|newest] Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-29 19:23 [PATCH 0/6 v10] btrfs direct-io using iomap Goldwyn Rodrigues 2020-06-29 19:23 ` [PATCH 1/6] iomap: Convert wait_for_completion to flags Goldwyn Rodrigues 2020-06-29 23:03 ` David Sterba 2020-06-30 16:35 ` David Sterba 2020-07-01 7:34 ` Johannes Thumshirn 2020-07-01 7:50 ` Christoph Hellwig 2020-06-29 19:23 ` [PATCH 2/6] iomap: IOMAP_DIO_RWF_NO_STALE_PAGECACHE return if page invalidation fails Goldwyn Rodrigues 2020-07-01 7:53 ` always fall back to buffered I/O after invalidation failures, was: " Christoph Hellwig 2020-07-01 7:53 ` [Cluster-devel] " Christoph Hellwig 2020-07-07 12:43 ` Goldwyn Rodrigues 2020-07-07 12:43 ` [Cluster-devel] " Goldwyn Rodrigues 2020-07-07 12:57 ` Matthew Wilcox 2020-07-07 12:57 ` [Cluster-devel] " Matthew Wilcox 2020-07-07 13:00 ` Christoph Hellwig 2020-07-07 13:00 ` [Cluster-devel] " Christoph Hellwig 2020-07-08 6:51 ` Dave Chinner 2020-07-08 6:51 ` [Cluster-devel] " Dave Chinner 2020-07-08 13:54 ` Matthew Wilcox 2020-07-08 13:54 ` [Cluster-devel] " Matthew Wilcox 2020-07-08 16:54 ` Christoph Hellwig [this message] 2020-07-08 16:54 ` Christoph Hellwig 2020-07-08 17:11 ` Matthew Wilcox 2020-07-08 17:11 ` [Cluster-devel] " Matthew Wilcox 2020-07-09 8:26 ` Steven Whitehouse 2020-07-09 8:26 ` Steven Whitehouse 2020-07-09 2:25 ` Dave Chinner 2020-07-09 2:25 ` [Cluster-devel] " Dave Chinner 2020-07-09 16:09 ` Darrick J. Wong 2020-07-09 16:09 ` [Cluster-devel] " Darrick J. Wong 2020-07-09 17:05 ` Matthew Wilcox 2020-07-09 17:05 ` [Cluster-devel] " Matthew Wilcox 2020-07-09 17:10 ` Darrick J. Wong 2020-07-09 17:10 ` [Cluster-devel] " Darrick J. Wong 2020-07-09 22:59 ` Dave Chinner 2020-07-09 22:59 ` [Cluster-devel] " Dave Chinner 2020-07-10 16:03 ` Christoph Hellwig 2020-07-10 16:03 ` [Cluster-devel] " Christoph Hellwig 2020-07-12 11:36 ` Avi Kivity 2020-07-12 11:36 ` [Cluster-devel] " Avi Kivity 2020-07-07 13:49 ` Goldwyn Rodrigues 2020-07-07 13:49 ` [Cluster-devel] " Goldwyn Rodrigues 2020-07-07 14:01 ` Darrick J. Wong 2020-07-07 14:01 ` [Cluster-devel] " Darrick J. Wong 2020-07-07 14:30 ` Goldwyn Rodrigues 2020-07-07 14:30 ` [Cluster-devel] " Goldwyn Rodrigues 2020-06-29 19:23 ` [PATCH 3/6] btrfs: switch to iomap_dio_rw() for dio Goldwyn Rodrigues 2020-06-29 19:23 ` [PATCH 4/6] fs: remove dio_end_io() Goldwyn Rodrigues 2020-06-29 19:23 ` [PATCH 5/6] btrfs: remove BTRFS_INODE_READDIO_NEED_LOCK Goldwyn Rodrigues 2020-06-29 19:23 ` [PATCH 6/6] btrfs: split btrfs_direct_IO to read and write part Goldwyn Rodrigues
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200708165412.GA637@lst.de \ --to=hch@lst.de \ --cc=cluster-devel@redhat.com \ --cc=darrick.wong@oracle.com \ --cc=david@fromorbit.com \ --cc=dsterba@suse.cz \ --cc=fdmanana@gmail.com \ --cc=linux-btrfs@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-xfs@vger.kernel.org \ --cc=rgoldwyn@suse.de \ --cc=willy@infradead.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.