linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC v2] Support for write stream IDs
@ 2015-03-25 15:07 Jens Axboe
  2015-03-25 15:07 ` [PATCH 1/7] block: add support for carrying a stream ID in a bio Jens Axboe
                   ` (7 more replies)
  0 siblings, 8 replies; 23+ messages in thread
From: Jens Axboe @ 2015-03-25 15:07 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel; +Cc: ming.l, david

One of the things that exacerbates write amplification on flash
based devices is that fact that data with different lifetimes get
grouped together on media. Currently we have no interface that
applications can use to separate different types of writes. This
patch set adds support for that.

The kernel has no knowledge of what stream ID is what. The idea is
that writes with identical stream IDs have similar life times, not
that stream ID 'X' has a shorter lifetime than stream ID 'X+1'.

There are basically two interfaces that could be used for this. One
is fcntl, the other is fadvise. This patchset uses fadvise, with a
new POSIX_FADV_STREAMID hint. The 'offset' field is used to pass
the relevant stream ID. Switching to fcntl (with a SET/GET_STREAMID)
would be trivial.

The patchset wires up the block parts, adds buffered and O_DIRECT
support, and modifies btrfs/xfs too. It should be trivial to extend
this to all other file systems, I just used xfs and btrfs for testing.

No block drivers are wired up yet. Patches are against current -git.

Changes since v1:

- Don't add streamid to struct writeback_control, always use the one
  in the inode for buffered writeback
- Add file_streamid() helper. Returns file streamid, if set, otherwise
  it returns the inode streamid.
- Update btrfs/xfs for wbc->streamid change.
- Add streamid to ext4.
- Bump stream bits from 3 to 8, 255 streams are now supported.

^ permalink raw reply	[flat|nested] 23+ messages in thread
* [PATCH v2] Support for write stream IDs
@ 2015-04-18 20:03 Jens Axboe
  2015-04-18 20:03 ` [PATCH 5/7] btrfs: add support " Jens Axboe
  0 siblings, 1 reply; 23+ messages in thread
From: Jens Axboe @ 2015-04-18 20:03 UTC (permalink / raw)
  To: axboe, linux-kernel, linux-fsdevel; +Cc: ming.l, adilger, david

Hi,

v2 of this posting. Changes since v1:

- Rebased on top of current master.

- Fix EINVAL -> -EINVAL typo.

- Cleanup up BIO_STREAM_OFFSET definition.

- Pack i_streamid and f_streamid better into struct file and struct
  inode.

- Add a separate per-file hint, FADV_FILE_STREAMID. This only sets
  the write stream on the file, not the inode. FADV_STREAMID sets
  the hint both in the file and the inode.

 block/bio.c                  |    2 ++
 block/blk-core.c             |    3 +++
 fs/btrfs/extent_io.c         |    1 +
 fs/btrfs/inode.c             |    1 +
 fs/buffer.c                  |    4 ++--
 fs/direct-io.c               |    4 ++++
 fs/ext4/page-io.c            |    1 +
 fs/inode.c                   |    1 +
 fs/mpage.c                   |    1 +
 fs/open.c                    |    1 +
 fs/xfs/xfs_aops.c            |    1 +
 include/linux/blk_types.h    |   28 +++++++++++++++++++++++++++-
 include/linux/fs.h           |   22 ++++++++++++++++++++++
 include/uapi/linux/fadvise.h |    3 +++
 mm/fadvise.c                 |   25 +++++++++++++++++++++++++
 15 files changed, 95 insertions(+), 3 deletions(-)

^ permalink raw reply	[flat|nested] 23+ messages in thread
* [PATCH v2] Support for write stream IDs
@ 2015-05-05 20:02 Jens Axboe
  2015-05-05 20:02 ` [PATCH 5/7] btrfs: add support " Jens Axboe
  0 siblings, 1 reply; 23+ messages in thread
From: Jens Axboe @ 2015-05-05 20:02 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel; +Cc: adilger, david

Hi,

Changes since the last posting:

- Added a specific per-file fadvise setting. POSIX_FADV_STREAMID sets
  the inode and file stream ID, POSIX_FADV_STREAMID_FILE sets just the
  file stream ID.

- Addressed review comments.

I've since run some testing with write streams. Test case was a RocksDB
overwrite benchmark, using 3 billion keys of 400B in size (numbers set
use the full size of the device). WAL/LOG was assigned to stream 1, and
each RocksDB compaction level used a separate stream. With streams
enabled, user write to device writes (write amplification) was at 2.33.
Without streams, the write amplification was 3.05. That is roughly 20%
less written NAND, and the streams test subsequently also had 20%
higher throughput.

Unless there are any grave concerns here, I'd like to merge this for
4.2.

-- 
Jens Axboe

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2015-05-05 20:02 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-25 15:07 [PATCH RFC v2] Support for write stream IDs Jens Axboe
2015-03-25 15:07 ` [PATCH 1/7] block: add support for carrying a stream ID in a bio Jens Axboe
2015-04-09 22:46   ` Andreas Dilger
2015-04-18 19:53     ` Jens Axboe
2015-03-25 15:07 ` [PATCH 2/7] Add support for per-file stream ID Jens Axboe
2015-04-09  9:30   ` Dmitry Monakhov
2015-04-09 16:28     ` Jens Axboe
2015-04-09 23:22   ` Andreas Dilger
2015-04-18 19:51     ` Jens Axboe
2015-03-25 15:07 ` [PATCH 3/7] direct-io: add support for write stream IDs Jens Axboe
2015-03-25 15:07 ` [PATCH 4/7] Add stream ID support for buffered mpage/__block_write_full_page() Jens Axboe
2015-03-25 22:42   ` Ming Lin-SSI
2015-03-25 23:08     ` Jens Axboe
2015-03-25 15:07 ` [PATCH 5/7] btrfs: add support for write stream IDs Jens Axboe
2015-03-25 16:00   ` Chris Mason
2015-03-25 15:07 ` [PATCH 6/7] xfs: add support for buffered writeback stream ID Jens Axboe
2015-03-25 15:07 ` [PATCH 7/7] ext4: add support for write stream IDs Jens Axboe
2015-03-26 20:34   ` Ming Lin-SSI
2015-03-26 20:39     ` Jens Axboe
2015-03-25 16:05 ` [PATCH RFC v2] Support " Jeff Moyer
2015-03-25 16:46   ` Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2015-04-18 20:03 [PATCH " Jens Axboe
2015-04-18 20:03 ` [PATCH 5/7] btrfs: add support " Jens Axboe
2015-05-05 20:02 [PATCH v2] Support " Jens Axboe
2015-05-05 20:02 ` [PATCH 5/7] btrfs: add support " Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).