From: Jens Axboe <axboe@fb.com>
To: Jeff Moyer <jmoyer@redhat.com>
Cc: <linux-fsdevel@vger.kernel.org>, <linux-block@vger.kernel.org>,
<calvinowens@fb.com>, <hch@lst.de>, <adilger@dilger.ca>,
"Martin K. Petersen" <martin.petersen@oracle.com>
Subject: Re: [PATCH 0/11] Update version of write stream ID patchset
Date: Fri, 4 Mar 2016 13:34:09 -0700 [thread overview]
Message-ID: <56D9F141.9070803@fb.com> (raw)
In-Reply-To: <x49a8meni6c.fsf@segfault.boston.devel.redhat.com>
On 03/04/2016 12:42 PM, Jeff Moyer wrote:
> Jens Axboe <axboe@fb.com> writes:
>
>> It's been a while since I last posted the write stream ID patchset, but
>> here is an updated version.
>>
>> The original patchset was centered around the current NVMe streams
>> proposal, but there was a number of issues with that. It's now in a
>> much beter state, and hopefully will make it into 1.3 of the spec
>> soon.
>
> But the spec is still not public. The only documentation I can find on
> this stuff is from t10, dated May of last year.
That is correct, but the important changes are basically in the cover
letter that I wrote for the patchset :-)
>> To quickly re-summarize the intent behind write stream IDs, it's to
>> be able to provide a hint to the underlying storage device on what
>> writes could feasibly be grouped together. If the device is able to
>> group writes of similar life times on media, then we can greatly reduce
>> the amount of data that needs to be copied around at garbage collection
>> time. This gives us a better write amplification factor, which leads
>> to better device life times and better (and more predictable)
>> performance at steady staet.
>>
>> There's been a number of changes to this patchset since it was last
>> posted. In summary:
>>
>> 1) The bio parts have been bumped to carry 16 bits of stream data, up
>> from 8 and 12 in the original series.
>>
>> 2) Since the interface grew some more options, I've moved away from
>> fadvise and instead added a new system call. I don't feel strongly
>> about what interface we use here, another option would be to have a
>> (big) set of fcntl() commands instead.
>>
>> 3) The kernel now manages the ID space, since we have moved to a host
>> assigned model. This is done on a backing_dev_info basis, and the
>> btrfs patch has been updated to show how this can be used for nested
>> devices on btrfs/md/dm/etc. This could be moved to the request queue
>> as well, again I don't feel too strongly aboout this specific part.
>>
>> Those are the big changes.
>
> My main question is why expose this to userspace at all? If we're
> keeping track of write streams per file, then why not implement that in
> the kernel, transparent to the application? That would benefit all
> applications instead of requiring application developers to opt in.
Because lots of different files could be the same write ID. It's not
like we're going to have millions of streams available, you have to
group them more wisely. Unless the policy is one-stream-per-file always,
then we can't put that sort of thing in the kernel. The kernel has no
way of knowing.
> I'm sure your argument will have something to do with how stream id's
> are allocated/freed (expensive/slow, limited resource, whatever), but
> that really just gets back to Martin's original questions about what we
> should expect from the hardware and what the programming model should
> look like (questions that are, afaik, still open).
That's orthogonal, really. The open/close might be expensive, or it
might not be, it has no real bearing on how you assign specific writes
to specific stream IDs.
> I'm not against write streams, I think it's a neat idea. I just think
> it will die on the vine if you require application developers to opt
> in. Not all storage is SSDs, and I don't like that SSDs now have to be
> treated differently by the programmer.
But that's why it's kept really simple. There are people that want to
make this more involved, and tie QoS criteria to streams. My argument
there has been what you are saying, it will never be used or get
adopted. For streams in general, the wins are big enough that
applications will care. And it's not difficult to use at all...
It's not just SSDs, either. Could be used for tiered storage in general.
That would mostly require going a bit further and assigning performance
characteristics to specific stream IDs, but there's nothing preventing
that from being done down the road. For now, this is just a basic
interface with a kernel managed stream ID space attached.
--
Jens Axboe
next prev parent reply other threads:[~2016-03-04 20:34 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-04 16:10 [PATCH 0/11] Update version of write stream ID patchset Jens Axboe
2016-03-04 16:10 ` [PATCH 01/11] idr: make ida_simple_remove() return an error Jens Axboe
2016-03-04 16:10 ` [PATCH 02/11] block: add support for carrying a stream ID in a bio Jens Axboe
2016-03-04 16:10 ` [PATCH 03/11] Add support for per-file/inode stream ID Jens Axboe
[not found] ` <CAJVOszBXU-qQENcOGG8pWeARwoWL2G3gNJ0H2uNPjXkiVa8S+Q@mail.gmail.com>
2016-03-04 20:35 ` Jens Axboe
2016-03-04 16:10 ` [PATCH 04/11] Add system call for setting inode/file write " Jens Axboe
2016-03-04 16:10 ` [PATCH 05/11] wire up system call for x86/x86-64 Jens Axboe
2016-03-04 16:10 ` [PATCH 06/11] Add support for bdi tracking of stream ID Jens Axboe
2016-03-04 16:10 ` [PATCH 07/11] direct-io: add support for write stream IDs Jens Axboe
2016-03-04 16:10 ` [PATCH 08/11] Add stream ID support for buffered mpage/__block_write_full_page() Jens Axboe
2016-03-04 16:10 ` [PATCH 09/11] btrfs: add support for write stream IDs Jens Axboe
2016-03-04 20:44 ` Chris Mason
2016-03-04 20:45 ` Jens Axboe
2016-03-04 16:10 ` [PATCH 10/11] xfs: add support for buffered writeback stream ID Jens Axboe
2016-03-04 16:10 ` [PATCH 11/11] ext4: add support for write stream IDs Jens Axboe
2016-03-04 19:42 ` [PATCH 0/11] Update version of write stream ID patchset Jeff Moyer
2016-03-04 20:34 ` Jens Axboe [this message]
2016-03-04 21:01 ` Jeff Moyer
2016-03-04 21:06 ` Jens Axboe
2016-03-04 22:03 ` Jeff Moyer
2016-03-04 22:13 ` Jens Axboe
2016-03-05 20:48 ` Martin K. Petersen
2016-03-08 21:56 ` Jens Axboe
2016-03-17 23:43 ` Dan Williams
2016-03-18 0:18 ` Jens Axboe
2016-03-18 2:39 ` Martin K. Petersen
2016-03-18 17:37 ` Jens Axboe
2016-03-18 17:56 ` Dan Williams
2016-03-06 6:13 ` Andreas Dilger
2016-03-06 13:03 ` Martin K. Petersen
2016-03-06 16:08 ` Boaz Harrosh
2016-03-06 20:51 ` Shaun Tancheff
2016-03-07 15:41 ` Martin K. Petersen
2016-03-07 15:34 ` Martin K. Petersen
2016-03-06 22:42 ` Andreas Dilger
2016-03-07 15:52 ` Martin K. Petersen
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=56D9F141.9070803@fb.com \
--to=axboe@fb.com \
--cc=adilger@dilger.ca \
--cc=calvinowens@fb.com \
--cc=hch@lst.de \
--cc=jmoyer@redhat.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=martin.petersen@oracle.com \
/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: link
Be 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.