Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1510515 > unrolled thread
| Started by | Ulf Hansson <ulf.hansson@linaro.org> |
|---|---|
| First post | 2016-10-27 19:40 +0200 |
| Last post | 2016-10-28 14:20 +0200 |
| Articles | 20 on this page of 25 — 8 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Ulf Hansson <ulf.hansson@linaro.org> - 2016-10-27 19:40 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Jens Axboe <axboe@kernel.dk> - 2016-10-27 19:50 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Ulf Hansson <ulf.hansson@linaro.org> - 2016-10-27 20:20 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Jens Axboe <axboe@kernel.dk> - 2016-10-27 20:30 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Ulf Hansson <ulf.hansson@linaro.org> - 2016-10-27 21:40 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Jens Axboe <axboe@kernel.dk> - 2016-10-27 23:10 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Linus Walleij <linus.walleij@linaro.org> - 2016-10-28 00:30 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Linus Walleij <linus.walleij@linaro.org> - 2016-10-28 11:40 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Jens Axboe <axboe@kernel.dk> - 2016-10-28 16:30 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Linus Walleij <linus.walleij@linaro.org> - 2016-10-28 22:40 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Christoph Hellwig <hch@infradead.org> - 2016-10-28 17:30 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Linus Walleij <linus.walleij@linaro.org> - 2016-10-28 23:10 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Jens Axboe <axboe@kernel.dk> - 2016-10-28 17:40 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> - 2016-10-28 18:00 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Arnd Bergmann <arnd@arndb.de> - 2016-10-28 18:10 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Mark Brown <broonie@kernel.org> - 2016-10-28 19:20 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Jens Axboe <axboe@kernel.dk> - 2016-10-28 16:10 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Ulf Hansson <ulf.hansson@linaro.org> - 2016-10-28 08:40 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Jens Axboe <axboe@kernel.dk> - 2016-10-28 16:20 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Mark Brown <broonie@kernel.org> - 2016-10-28 19:20 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Christoph Hellwig <hch@infradead.org> - 2016-10-27 21:50 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Mark Brown <broonie@kernel.org> - 2016-10-28 00:10 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Mark Brown <broonie@kernel.org> - 2016-10-27 21:50 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Arnd Bergmann <arnd@arndb.de> - 2016-10-28 14:10 +0200
Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler Richard Weinberger <richard.weinberger@gmail.com> - 2016-10-28 14:20 +0200
Page 1 of 2 [1] 2 Next page →
| From | Ulf Hansson <ulf.hansson@linaro.org> |
|---|---|
| Date | 2016-10-27 19:40 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <swWOK-4Ur-3@gated-at.bofh.it> |
[...] > > I'm hesistant to add a new scheduler because it's very easy to add, very > difficult to get rid of. If we do add BFQ as a legacy scheduler now, > it'll take us years and years to get rid of it again. We should be > moving towards LESS moving parts in the legacy path, not more. Jens, I think you are wrong here and let me try to elaborate on why. 1) We already have legacy schedulers like CFQ, DEADLINE, etc - and most block device drivers are still using the legacy blk interface. To be able to remove the legacy blk layer, all block device drivers must be converted to blkmq - of course. So to reach that goal, we will not only need to evolve blkmq to allow scheduling (at least for single queue devices), but we also need to convert *all* block device drivers to blkmq. For sure this will take *years* and not months. More important, when the transition to blkmq has been completed, then there is absolutely no difference (from effort point of view) in removing the legacy blk layer - no matter if we have BFQ in there or not. I do understand if you have concern from maintenance point of view, as I assume you would rather focus on evolving blkmq, than care about legacy blk code. So, would it help if Paolo volunteers to maintain the BFQ code in the meantime? 2) While we work on evolving blkmq and convert block device drivers to it, BFQ could as a separate legacy scheduler, help *lots* of Linux users to get a significant improved experience. Should we really prevent them from that? I think you block maintainer guys, really need to consider this fact. 3) While we work on scheduling in blkmq (at least for single queue devices), it's of course important that we set high goals. Having BFQ (and the other schedulers) in the legacy blk, provides a good reference for what we could aim for. > > We can keep having this discussion every few years, but I think we'd > both prefer to make some actual progress here. It's perfectly fine to > add an interface for a single queue interface for an IO scheduler for > blk-mq, since we don't care too much about scalability there. And that > won't take years, that should be a few weeks. Retrofitting BFQ on top of > that should not be hard either. That can co-exist with a real multiqueue > scheduler as well, something that's geared towards some fairness for > faster devices. That's really great news! I hope we get a possibility to meet and discuss the plans for this at Kernel summit/Linux Plumbers the next week! > > -- > Jens Axboe Kind regards Ulf Hansson
[toc] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-10-27 19:50 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <swWYr-4Ya-51@gated-at.bofh.it> |
| In reply to | #1510515 |
On 10/27/2016 11:32 AM, Ulf Hansson wrote: > [...] > >> >> I'm hesistant to add a new scheduler because it's very easy to add, very >> difficult to get rid of. If we do add BFQ as a legacy scheduler now, >> it'll take us years and years to get rid of it again. We should be >> moving towards LESS moving parts in the legacy path, not more. > > Jens, I think you are wrong here and let me try to elaborate on why. > > 1) > We already have legacy schedulers like CFQ, DEADLINE, etc - and most > block device drivers are still using the legacy blk interface. I don't think that's an accurate statement. In terms of coverage, most drivers do support blk-mq. Anything SCSI, nvme, virtio-blk, SATA runs on (or can run on) top of blk-mq. > To be able to remove the legacy blk layer, all block device drivers > must be converted to blkmq - of course. That's a given. > So to reach that goal, we will not only need to evolve blkmq to allow > scheduling (at least for single queue devices), but we also need to > convert *all* block device drivers to blkmq. For sure this will take > *years* and not months. Correct. > More important, when the transition to blkmq has been completed, then > there is absolutely no difference (from effort point of view) in > removing the legacy blk layer - no matter if we have BFQ in there or > not. > > I do understand if you have concern from maintenance point of view, as > I assume you would rather focus on evolving blkmq, than care about > legacy blk code. So, would it help if Paolo volunteers to maintain the > BFQ code in the meantime? We're obviously still maintaining the legacy IO path. But we don't want to actively develop it, and we haven't, for a long time. And Paolo maintaining it is a strict requirement for inclusion, legacy or blk-mq aside. That would go for both. I'd never accept a major feature from an individual or company if they weren't willing and capable of maintaining it. Throwing submissions over the wall is not viable. > 2) > While we work on evolving blkmq and convert block device drivers to > it, BFQ could as a separate legacy scheduler, help *lots* of Linux > users to get a significant improved experience. Should we really > prevent them from that? I think you block maintainer guys, really need > to consider this fact. You still seem to be basing that assumption on the notion that we have to convert tons of drivers for BFQ to make sense under the blk-mq umbrella. That's not the case. > 3) > While we work on scheduling in blkmq (at least for single queue > devices), it's of course important that we set high goals. Having BFQ > (and the other schedulers) in the legacy blk, provides a good > reference for what we could aim for. Sure, but you don't need BFQ to be included in the kernel for that. >> We can keep having this discussion every few years, but I think we'd >> both prefer to make some actual progress here. It's perfectly fine to >> add an interface for a single queue interface for an IO scheduler for >> blk-mq, since we don't care too much about scalability there. And that >> won't take years, that should be a few weeks. Retrofitting BFQ on top of >> that should not be hard either. That can co-exist with a real multiqueue >> scheduler as well, something that's geared towards some fairness for >> faster devices. > > That's really great news! > > I hope we get a possibility to meet and discuss the plans for this at > Kernel summit/Linux Plumbers the next week! I'll be there. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Ulf Hansson <ulf.hansson@linaro.org> |
|---|---|
| Date | 2016-10-27 20:20 +0200 |
| Message-ID | <swXrs-5ri-21@gated-at.bofh.it> |
| In reply to | #1510532 |
On 27 October 2016 at 19:43, Jens Axboe <axboe@kernel.dk> wrote: > On 10/27/2016 11:32 AM, Ulf Hansson wrote: >> >> [...] >> >>> >>> I'm hesistant to add a new scheduler because it's very easy to add, very >>> difficult to get rid of. If we do add BFQ as a legacy scheduler now, >>> it'll take us years and years to get rid of it again. We should be >>> moving towards LESS moving parts in the legacy path, not more. >> >> >> Jens, I think you are wrong here and let me try to elaborate on why. >> >> 1) >> We already have legacy schedulers like CFQ, DEADLINE, etc - and most >> block device drivers are still using the legacy blk interface. > > > I don't think that's an accurate statement. In terms of coverage, most > drivers do support blk-mq. Anything SCSI, nvme, virtio-blk, SATA runs on > (or can run on) top of blk-mq. Well, I just used "git grep" and found that many drivers didn't use blkmq. Apologize if I gave the wrong impressions. > >> To be able to remove the legacy blk layer, all block device drivers >> must be converted to blkmq - of course. > > > That's a given. > >> So to reach that goal, we will not only need to evolve blkmq to allow >> scheduling (at least for single queue devices), but we also need to >> convert *all* block device drivers to blkmq. For sure this will take >> *years* and not months. > > > Correct. > >> More important, when the transition to blkmq has been completed, then >> there is absolutely no difference (from effort point of view) in >> removing the legacy blk layer - no matter if we have BFQ in there or >> not. >> >> I do understand if you have concern from maintenance point of view, as >> I assume you would rather focus on evolving blkmq, than care about >> legacy blk code. So, would it help if Paolo volunteers to maintain the >> BFQ code in the meantime? > > > We're obviously still maintaining the legacy IO path. But we don't want > to actively develop it, and we haven't, for a long time. > > And Paolo maintaining it is a strict requirement for inclusion, legacy > or blk-mq aside. That would go for both. I'd never accept a major > feature from an individual or company if they weren't willing and > capable of maintaining it. Throwing submissions over the wall is not > viable. That seems very reasonable! > >> 2) >> While we work on evolving blkmq and convert block device drivers to >> it, BFQ could as a separate legacy scheduler, help *lots* of Linux >> users to get a significant improved experience. Should we really >> prevent them from that? I think you block maintainer guys, really need >> to consider this fact. > > > You still seem to be basing that assumption on the notion that we have > to convert tons of drivers for BFQ to make sense under the blk-mq > umbrella. That's not the case. Well, let's not argue about how many. It's pretty easy to check that. Instead, what I can tell, as we have been looking into converting mmc (which I maintains) and that is indeed a significant amount of work. We will need to rip out all of the mmc request management, and most likely we also need to extend the blkmq interface - as to be able to do re-implement all the current request optimizations. We are looking into this, but it just takes time. I can imagine, that it's not always a straight forward "convert to blk mq" patch for every block device driver. > >> 3) >> While we work on scheduling in blkmq (at least for single queue >> devices), it's of course important that we set high goals. Having BFQ >> (and the other schedulers) in the legacy blk, provides a good >> reference for what we could aim for. > > > Sure, but you don't need BFQ to be included in the kernel for that. Perhaps not. But does that mean, you expect Paolo to maintain an up to date BFQ tree for you? > >>> We can keep having this discussion every few years, but I think we'd >>> both prefer to make some actual progress here. It's perfectly fine to >>> add an interface for a single queue interface for an IO scheduler for >>> blk-mq, since we don't care too much about scalability there. And that >>> won't take years, that should be a few weeks. Retrofitting BFQ on top of >>> that should not be hard either. That can co-exist with a real multiqueue >>> scheduler as well, something that's geared towards some fairness for >>> faster devices. >> >> >> That's really great news! >> >> I hope we get a possibility to meet and discuss the plans for this at >> Kernel summit/Linux Plumbers the next week! > > > I'll be there. Great! Kind regards Ulf Hansson
[toc] | [prev] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-10-27 20:30 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <swXB7-5us-3@gated-at.bofh.it> |
| In reply to | #1510560 |
On 10/27/2016 12:13 PM, Ulf Hansson wrote: >>> 2) >>> While we work on evolving blkmq and convert block device drivers to >>> it, BFQ could as a separate legacy scheduler, help *lots* of Linux >>> users to get a significant improved experience. Should we really >>> prevent them from that? I think you block maintainer guys, really need >>> to consider this fact. >> >> >> You still seem to be basing that assumption on the notion that we have >> to convert tons of drivers for BFQ to make sense under the blk-mq >> umbrella. That's not the case. > > Well, let's not argue about how many. It's pretty easy to check that. I wasn't arguing - you made a false or misleading statement, I had to correct that. Most of the drivers that haven't been converted yet are themselves for legacy hardware. Some are not, though, and it'd be great to get those converted. But coverage wise, we're in pretty good shape. > Instead, what I can tell, as we have been looking into converting mmc > (which I maintains) and that is indeed a significant amount of work. > We will need to rip out all of the mmc request management, and most > likely we also need to extend the blkmq interface - as to be able to > do re-implement all the current request optimizations. We are looking > into this, but it just takes time. It's usually as much work as you make it into, for most cases it's pretty straight forward and usually removes more code than it adds. Hence the end result is better for it as well - less code in a driver is better. > I can imagine, that it's not always a straight forward "convert to blk > mq" patch for every block device driver. Well, I've actually done a few conversions, and it's not difficult at all. The grunt of the work is usually around converting to using some of the blk-mq features for parts of the driver that it had implemented privately, like timeout handling, etc. I'm always happy to help people with converting drivers. >>> 3) >>> While we work on scheduling in blkmq (at least for single queue >>> devices), it's of course important that we set high goals. Having BFQ >>> (and the other schedulers) in the legacy blk, provides a good >>> reference for what we could aim for. >> >> >> Sure, but you don't need BFQ to be included in the kernel for that. > > Perhaps not. > > But does that mean, you expect Paolo to maintain an up to date BFQ > tree for you? I don't expect anything. If Paolo or others want to compare with BFQ on the legacy IO path, then they can do that however way they want. If you (and others) want to have that reference point, it's up to you how to accomplish that. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Ulf Hansson <ulf.hansson@linaro.org> |
|---|---|
| Date | 2016-10-27 21:40 +0200 |
| Message-ID | <swYGR-66s-5@gated-at.bofh.it> |
| In reply to | #1510561 |
[...] >> Instead, what I can tell, as we have been looking into converting mmc >> (which I maintains) and that is indeed a significant amount of work. >> We will need to rip out all of the mmc request management, and most >> likely we also need to extend the blkmq interface - as to be able to >> do re-implement all the current request optimizations. We are looking >> into this, but it just takes time. > > > It's usually as much work as you make it into, for most cases it's > pretty straight forward and usually removes more code than it adds. > Hence the end result is better for it as well - less code in a driver is > better. From a scalability and maintenance point of view, converting to blkmq makes perfect sense. Although, me personally don't want to sacrifice on performance (at least very little), just for the sake of gaining in scalability/maintainability. I would rather strive to adopt the blkmq framework to also suit my needs. Then it simply do takes more time. For example, in the mmc case we have implemented an asynchronous request path, which greatly improves performance on some systems. > >> I can imagine, that it's not always a straight forward "convert to blk >> mq" patch for every block device driver. > > > Well, I've actually done a few conversions, and it's not difficult at > all. The grunt of the work is usually around converting to using some of > the blk-mq features for parts of the driver that it had implemented > privately, like timeout handling, etc. > > I'm always happy to help people with converting drivers. Great, we ping you if we need some help! Thanks! > >>>> 3) >>>> While we work on scheduling in blkmq (at least for single queue >>>> devices), it's of course important that we set high goals. Having BFQ >>>> (and the other schedulers) in the legacy blk, provides a good >>>> reference for what we could aim for. >>> >>> >>> >>> Sure, but you don't need BFQ to be included in the kernel for that. >> >> >> Perhaps not. >> >> But does that mean, you expect Paolo to maintain an up to date BFQ >> tree for you? > > > I don't expect anything. If Paolo or others want to compare with BFQ on > the legacy IO path, then they can do that however way they want. If you > (and others) want to have that reference point, it's up to you how to > accomplish that. Do I get this right? You personally don't care about using BFQ as reference when evolving blkmq for single queue devices? Paolo and lots of other Linux users certainly do care about this. Moreover, I am still trying to understand what's the big deal to why you say no to BFQ as a legacy scheduler. Ideally it shouldn't cause you any maintenance burden and it doesn't make the removal of the legacy blk layer any more difficult, right? Kind regards Ulf Hansson
[toc] | [prev] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-10-27 23:10 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sx05X-793-15@gated-at.bofh.it> |
| In reply to | #1510600 |
On 10/27/2016 01:34 PM, Ulf Hansson wrote: > [...] > >>> Instead, what I can tell, as we have been looking into converting mmc >>> (which I maintains) and that is indeed a significant amount of work. >>> We will need to rip out all of the mmc request management, and most >>> likely we also need to extend the blkmq interface - as to be able to >>> do re-implement all the current request optimizations. We are looking >>> into this, but it just takes time. >> >> >> It's usually as much work as you make it into, for most cases it's >> pretty straight forward and usually removes more code than it adds. >> Hence the end result is better for it as well - less code in a driver is >> better. > > From a scalability and maintenance point of view, converting to blkmq > makes perfect sense. > > Although, me personally don't want to sacrifice on performance (at > least very little), just for the sake of gaining in > scalability/maintainability. Nobody has said anything about sacrificing performance. And whether you like it or not, maintainability is always the most important aspect. Even performance takes a backseat to maintainability. > I would rather strive to adopt the blkmq framework to also suit my > needs. Then it simply do takes more time. > > For example, in the mmc case we have implemented an asynchronous > request path, which greatly improves performance on some systems. blk-mq has evolved to support a variety of devices, there's nothing special about mmc that can't work well within that framework. >>>>> 3) >>>>> While we work on scheduling in blkmq (at least for single queue >>>>> devices), it's of course important that we set high goals. Having BFQ >>>>> (and the other schedulers) in the legacy blk, provides a good >>>>> reference for what we could aim for. >>>> >>>> >>>> >>>> Sure, but you don't need BFQ to be included in the kernel for that. >>> >>> >>> Perhaps not. >>> >>> But does that mean, you expect Paolo to maintain an up to date BFQ >>> tree for you? >> >> >> I don't expect anything. If Paolo or others want to compare with BFQ on >> the legacy IO path, then they can do that however way they want. If you >> (and others) want to have that reference point, it's up to you how to >> accomplish that. > > Do I get this right? You personally don't care about using BFQ as > reference when evolving blkmq for single queue devices? > > Paolo and lots of other Linux users certainly do care about this. I'm getting a little tired of this putting words in my mouth... That is not what I'm saying at all. What I'm saying is that the people working on BFQ can do what they need to do to have a reference implementation to compare against. You don't need BFQ in the kernel for that. I said it's up to YOU, with the you here meaning the people that want to work on it, how that goes down. > Moreover, I am still trying to understand what's the big deal to why > you say no to BFQ as a legacy scheduler. Ideally it shouldn't cause > you any maintenance burden and it doesn't make the removal of the > legacy blk layer any more difficult, right? Not sure I can state it much clearer. It's a new scheduler, and a complicated one at that. It WILL carry a maintenance burden. And I'm really not that interested in adding such a burden for something that will be defunct as soon as the single queue blk-mq version is done. Additionally, if we put BFQ in right now, the motivation to do the real work will be gone. The path forward is clear. It'd be a lot better to put some work behind that, rather than continue this email thread. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Linus Walleij <linus.walleij@linaro.org> |
|---|---|
| Date | 2016-10-28 00:30 +0200 |
| Message-ID | <sx1lo-7TN-17@gated-at.bofh.it> |
| In reply to | #1510673 |
On Thu, Oct 27, 2016 at 11:08 PM, Jens Axboe <axboe@kernel.dk> wrote: > blk-mq has evolved to support a variety of devices, there's nothing > special about mmc that can't work well within that framework. There is. Read mmc_queue_thread() in drivers/mmc/card/queue.c This repeatedly calls req = blk_fetch_request(q);, starting one request and then getting the next one off the queue, including reading a few NULL requests off the end of the queue (to satisfy the semantics of its state machine. It then preprocess each request by esstially calling .pre() and .post() hooks all the way down to the driver, flushing its mapped sglist from CPU to DMA device memory (not a problem on x86 and other DMA-coherent archs, but a big win on the incoherent ones). In the attempt that was posted recently this is achieved by lying and saying the HW queue is two items deep and eating requests off that queue calling pre/post on them. But as there actually exist MMC cards with command queueing, this would become hopeless to handle, the hw queue depth has to reflect the real depth. What we need is for the block core to call pre/post hooks on each request. The "only" thing that doesn't work well after that is that CFQ is no longer in action, which will have interesting effects on MMC throughput in any fio-like stress test as it is mostly single-hw-queue. Yours, Linus Walleij
[toc] | [prev] | [next] | [standalone]
| From | Linus Walleij <linus.walleij@linaro.org> |
|---|---|
| Date | 2016-10-28 11:40 +0200 |
| Message-ID | <sxbNL-6sc-17@gated-at.bofh.it> |
| In reply to | #1510738 |
On Fri, Oct 28, 2016 at 12:27 AM, Linus Walleij
<linus.walleij@linaro.org> wrote:
> On Thu, Oct 27, 2016 at 11:08 PM, Jens Axboe <axboe@kernel.dk> wrote:
>
>> blk-mq has evolved to support a variety of devices, there's nothing
>> special about mmc that can't work well within that framework.
>
> There is. Read mmc_queue_thread() in drivers/mmc/card/queue.c
So I'm not just complaining by the way, I'm trying to fix this. Also
Bartlomiej from Samsung has done some stabs at switching MMC/SD
to blk-mq. I just rebased my latest stab at a naïve switch to blk-mq
to v4.9-rc2 with these results.
The patch to enable MQ looks like this:
https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-stericsson.git/commit/?h=mmc-mq&id=8f79b527e2e854071d8da019451da68d4753f71d
I run these tests directly after boot with cold caches. The results
are consistent: I ran the same commands 10 times in a row.
BEFORE switching to BLK-MQ (clean v4.9-rc2):
time dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.0GB) copied, 47.781464 seconds, 21.4MB/s
real 0m 47.79s
user 0m 0.02s
sys 0m 9.35s
mount /dev/mmcblk0p1 /mnt/
cd /mnt/
time find . > /dev/null
real 0m 3.60s
user 0m 0.25s
sys 0m 1.58s
mount /dev/mmcblk0p1 /mnt/
iozone -az -i0 -i1 -i2 -s 20m -I -f /mnt/foo.test
(kBytes/second)
random random
kB reclen write rewrite read reread read write
20480 4 2112 2157 6052 6060 6025 40
20480 8 4820 5074 9163 9121 9125 81
20480 16 5755 5242 12317 12320 12280 165
20480 32 6176 6261 14981 14987 14962 336
20480 64 6547 5875 16826 16828 16810 692
20480 128 6762 6828 17899 17896 17896 1408
20480 256 6802 6871 16960 17513 18373 3048
20480 512 7220 7252 18675 18746 18741 7228
20480 1024 7222 7304 18436 17858 18246 7322
20480 2048 7316 7398 18744 18751 18526 7419
20480 4096 7520 7636 20774 20995 20703 7609
20480 8192 7519 7704 21850 21489 21467 7663
20480 16384 7395 7782 22399 22210 22215 7781
AFTER switching to BLK-MQ:
time dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.0GB) copied, 60.551117 seconds, 16.9MB/s
real 1m 0.56s
user 0m 0.02s
sys 0m 9.81s
mount /dev/mmcblk0p1 /mnt/
cd /mnt/
time find . > /dev/null
real 0m 4.42s
user 0m 0.24s
sys 0m 1.81s
mount /dev/mmcblk0p1 /mnt/
iozone -az -i0 -i1 -i2 -s 20m -I -f /mnt/foo.test
(kBytes/second)
random random
kB reclen write rewrite read reread read write
20480 4 2086 2201 6024 6036 6006 40
20480 8 4812 5036 8014 9121 9090 82
20480 16 5432 5633 12267 9776 12212 168
20480 32 6180 6233 14870 14891 14852 340
20480 64 6382 5454 16744 16771 16746 702
20480 128 6761 6776 17816 17846 17836 1394
20480 256 6828 6842 17789 17895 17094 3084
20480 512 7158 7222 17957 17681 17698 7232
20480 1024 7215 7274 18642 17679 18031 7300
20480 2048 7229 7269 17943 18642 17732 7358
20480 4096 7212 7360 18272 18157 18889 7371
20480 8192 7008 7271 18632 18707 18225 7282
20480 16384 6889 7211 18243 18429 18018 7246
A simple dd readtest of 1 GB is always consistently 10+
seconds slower with MQ. find in the rootfs is a second slower.
iozone results are consistently lower throughput or the same.
This is without using Bartlomiej's clever hack to pretend we have
2 elements in the HW queue though. His early tests indicate that
it doesn't help much: the performance regression we see is due to
lack of block scheduling.
I try to find a way forward with this, and also massage the MMC/SD
code to be more MQ friendly to begin with (like only pick requests
when we get a request notification and stop pulling NULL requests
off the queue) but it's really a messy piece of code.
Yours,
Linus Walleij
[toc] | [prev] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-10-28 16:30 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxgkq-12P-13@gated-at.bofh.it> |
| In reply to | #1510995 |
On 10/28/2016 03:32 AM, Linus Walleij wrote: > On Fri, Oct 28, 2016 at 12:27 AM, Linus Walleij > <linus.walleij@linaro.org> wrote: >> On Thu, Oct 27, 2016 at 11:08 PM, Jens Axboe <axboe@kernel.dk> wrote: >> >>> blk-mq has evolved to support a variety of devices, there's nothing >>> special about mmc that can't work well within that framework. >> >> There is. Read mmc_queue_thread() in drivers/mmc/card/queue.c > > So I'm not just complaining by the way, I'm trying to fix this. Also > Bartlomiej from Samsung has done some stabs at switching MMC/SD > to blk-mq. I just rebased my latest stab at a naïve switch to blk-mq > to v4.9-rc2 with these results. > > The patch to enable MQ looks like this: > https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-stericsson.git/commit/?h=mmc-mq&id=8f79b527e2e854071d8da019451da68d4753f71d > > I run these tests directly after boot with cold caches. The results > are consistent: I ran the same commands 10 times in a row. > > > BEFORE switching to BLK-MQ (clean v4.9-rc2): > > time dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 > 1024+0 records in > 1024+0 records out > 1073741824 bytes (1.0GB) copied, 47.781464 seconds, 21.4MB/s > real 0m 47.79s > user 0m 0.02s > sys 0m 9.35s > > mount /dev/mmcblk0p1 /mnt/ > cd /mnt/ > time find . > /dev/null > real 0m 3.60s > user 0m 0.25s > sys 0m 1.58s > > mount /dev/mmcblk0p1 /mnt/ > iozone -az -i0 -i1 -i2 -s 20m -I -f /mnt/foo.test > (kBytes/second) > random random > kB reclen write rewrite read reread read write > 20480 4 2112 2157 6052 6060 6025 40 > 20480 8 4820 5074 9163 9121 9125 81 > 20480 16 5755 5242 12317 12320 12280 165 > 20480 32 6176 6261 14981 14987 14962 336 > 20480 64 6547 5875 16826 16828 16810 692 > 20480 128 6762 6828 17899 17896 17896 1408 > 20480 256 6802 6871 16960 17513 18373 3048 > 20480 512 7220 7252 18675 18746 18741 7228 > 20480 1024 7222 7304 18436 17858 18246 7322 > 20480 2048 7316 7398 18744 18751 18526 7419 > 20480 4096 7520 7636 20774 20995 20703 7609 > 20480 8192 7519 7704 21850 21489 21467 7663 > 20480 16384 7395 7782 22399 22210 22215 7781 > > > AFTER switching to BLK-MQ: > > time dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 > 1024+0 records in > 1024+0 records out > 1073741824 bytes (1.0GB) copied, 60.551117 seconds, 16.9MB/s > real 1m 0.56s > user 0m 0.02s > sys 0m 9.81s > > mount /dev/mmcblk0p1 /mnt/ > cd /mnt/ > time find . > /dev/null > real 0m 4.42s > user 0m 0.24s > sys 0m 1.81s > > mount /dev/mmcblk0p1 /mnt/ > iozone -az -i0 -i1 -i2 -s 20m -I -f /mnt/foo.test > (kBytes/second) > random random > kB reclen write rewrite read reread read write > 20480 4 2086 2201 6024 6036 6006 40 > 20480 8 4812 5036 8014 9121 9090 82 > 20480 16 5432 5633 12267 9776 12212 168 > 20480 32 6180 6233 14870 14891 14852 340 > 20480 64 6382 5454 16744 16771 16746 702 > 20480 128 6761 6776 17816 17846 17836 1394 > 20480 256 6828 6842 17789 17895 17094 3084 > 20480 512 7158 7222 17957 17681 17698 7232 > 20480 1024 7215 7274 18642 17679 18031 7300 > 20480 2048 7229 7269 17943 18642 17732 7358 > 20480 4096 7212 7360 18272 18157 18889 7371 > 20480 8192 7008 7271 18632 18707 18225 7282 > 20480 16384 6889 7211 18243 18429 18018 7246 > > > A simple dd readtest of 1 GB is always consistently 10+ > seconds slower with MQ. find in the rootfs is a second slower. > iozone results are consistently lower throughput or the same. > > This is without using Bartlomiej's clever hack to pretend we have > 2 elements in the HW queue though. His early tests indicate that > it doesn't help much: the performance regression we see is due to > lack of block scheduling. A simple dd test, I don't see how that can be slower due to lack of scheduling. There's nothing to schedule there, just issue them in order? So that would probably be where I would start looking. A blktrace of the in-kernel code and the blk-mq enabled code would perhaps be enlightening. I don't think it's worth looking at the more complex test cases until the dd test case is at least as fast as the non-mq version. Was that with CFQ, btw, or what scheduler did it run? It'd be nice to NOT have to rely on that fake QD=2 setup, since it will mess with the IO scheduling as well. > I try to find a way forward with this, and also massage the MMC/SD > code to be more MQ friendly to begin with (like only pick requests > when we get a request notification and stop pulling NULL requests > off the queue) but it's really a messy piece of code. Yeah, it does look pretty messy... I'd be happy to help out with that, and particularly in figuring out why the direct conversion is slower for a basic 'dd' test case. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Linus Walleij <linus.walleij@linaro.org> |
|---|---|
| Date | 2016-10-28 22:40 +0200 |
| Message-ID | <sxm6t-4Kj-5@gated-at.bofh.it> |
| In reply to | #1511156 |
On Fri, Oct 28, 2016 at 4:22 PM, Jens Axboe <axboe@kernel.dk> wrote: > On 10/28/2016 03:32 AM, Linus Walleij wrote: >> >> This is without using Bartlomiej's clever hack to pretend we have >> 2 elements in the HW queue though. His early tests indicate that >> it doesn't help much: the performance regression we see is due to >> lack of block scheduling. > > A simple dd test, I don't see how that can be slower due to lack of > scheduling. There's nothing to schedule there, just issue them in order? Yeah I guess you're right, I guess it could be in part to not having activated front- and back-end merges properly as Christoph pointed out, I'll look closer at this. > So that would probably be where I would start looking. A blktrace of the > in-kernel code and the blk-mq enabled code would perhaps be > enlightening. I don't think it's worth looking at the more complex test > cases until the dd test case is at least as fast as the non-mq version. Yeah. > Was that with CFQ, btw, or what scheduler did it run? CFQ, just plain defconfig. > It'd be nice to NOT have to rely on that fake QD=2 setup, since it will > mess with the IO scheduling as well. I agree. >> I try to find a way forward with this, and also massage the MMC/SD >> code to be more MQ friendly to begin with (like only pick requests >> when we get a request notification and stop pulling NULL requests >> off the queue) but it's really a messy piece of code. > > Yeah, it does look pretty messy... I'd be happy to help out with that, > and particularly in figuring out why the direct conversion is slower for > a basic 'dd' test case. I'm looking into it. Yours, Linus Walleij
[toc] | [prev] | [next] | [standalone]
| From | Christoph Hellwig <hch@infradead.org> |
|---|---|
| Date | 2016-10-28 17:30 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxhgu-1Bp-17@gated-at.bofh.it> |
| In reply to | #1510995 |
On Fri, Oct 28, 2016 at 11:32:21AM +0200, Linus Walleij wrote: > So I'm not just complaining by the way, I'm trying to fix this. Also > Bartlomiej from Samsung has done some stabs at switching MMC/SD > to blk-mq. I just rebased my latest stab at a naïve switch to blk-mq > to v4.9-rc2 with these results. > > The patch to enable MQ looks like this: > https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-stericsson.git/commit/?h=mmc-mq&id=8f79b527e2e854071d8da019451da68d4753f71d > > I run these tests directly after boot with cold caches. The results > are consistent: I ran the same commands 10 times in a row. A couple comments from a quick look over the patch: In the changelog you complain: ". Lack of front- and back-end merging in the MQ block layer creating several small requests instead of a few large ones." In blk-mq merging is controller by the BLK_MQ_F_SHOULD_MERGE and BLK_MQ_F_SG_MERGE flags. You set the former, but not the latter. BLK_MQ_F_SG_MERGE controls wether multiple physical contiguous pages get merged into a single segment. For a dd after a fresh boot that is probably very common. Except for the polarity of the merge flags the basic merge functionality between the legacy and blk-mq path should be the same, and if they aren't you've found a bug we need to address. You also say that you disable the pipelining. How much of a performance gain did this feature give when added? How much does just removing that on it's own cost you? While I think that features is rather messy and should be avoided if possible I don't see how it's impossible to implement in blk-mq. If you just increase your queue depth and use the old scheme you should get it - if you currently can't handle the second command for some reason (i.e. the special request magic) you can just return BLK_MQ_RQ_QUEUE_BUSY from the queue_rq function.
[toc] | [prev] | [next] | [standalone]
| From | Linus Walleij <linus.walleij@linaro.org> |
|---|---|
| Date | 2016-10-28 23:10 +0200 |
| Message-ID | <sxmzv-59w-1@gated-at.bofh.it> |
| In reply to | #1511174 |
On Fri, Oct 28, 2016 at 5:29 PM, Christoph Hellwig <hch@infradead.org> wrote: > On Fri, Oct 28, 2016 at 11:32:21AM +0200, Linus Walleij wrote: >> So I'm not just complaining by the way, I'm trying to fix this. Also >> Bartlomiej from Samsung has done some stabs at switching MMC/SD >> to blk-mq. I just rebased my latest stab at a naīve switch to blk-mq >> to v4.9-rc2 with these results. >> >> The patch to enable MQ looks like this: >> https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-stericsson.git/commit/?h=mmc-mq&id=8f79b527e2e854071d8da019451da68d4753f71d >> >> I run these tests directly after boot with cold caches. The results >> are consistent: I ran the same commands 10 times in a row. > > A couple comments from a quick look over the patch: > > In the changelog you complain: > > ". Lack of front- and back-end merging in the MQ block layer creating > several small requests instead of a few large ones." > > In blk-mq merging is controller by the BLK_MQ_F_SHOULD_MERGE and > BLK_MQ_F_SG_MERGE flags. You set the former, but not the latter. > BLK_MQ_F_SG_MERGE controls wether multiple physical contiguous pages get > merged into a single segment. For a dd after a fresh boot that is > probably very common. Except for the polarity of the merge flags the > basic merge functionality between the legacy and blk-mq path should be > the same, and if they aren't you've found a bug we need to address. Aha OK I will make sure to set both flags next time. (I will also stop guessing about that as a cause since that part probably works.) > You also say that you disable the pipelining. How much of a performance > gain did this feature give when added? How much does just removing that > on it's own cost you? Interestingly, the original commit doesn't say. http://marc.info/?l=linaro-dev&m=137645684811479&w=2 It however dependends the cache architecture of the machine how much is won. The heavier the cache flushes, the more it gains. I guess I need to make a patch removing that mechanism to bench it. It's pretty hard to get rid of because it goes really deep into the MMC subsystem. It's massaged in like a schampoo. > While I think that features is rather messy and > should be avoided if possible I don't see how it's impossible to > implement in blk-mq. It's probably possible. What I discussed with Arnd was to let the blk-mq core call out to these pre-request and post-request hooks on new requests in parallel with processing a request or a queue of requests. I.e. add .prep_request() and .unprep_request() callbacks to struct blk_mq_ops. I tried to understand if the existing .init_request and .exit_request callbacks could be used. But as I understand it they are only used to allocate and prepare the extra per-request-associated memory and state, and does not have access to the request per se, so it doesn't know anything about the actual request when .init_request() is called. So we're looking for something called whenever the contents of a request are done, right before queueing it, and right after dequeueing it after being served. > If you just increase your queue depth and use > the old scheme you should get it - if you currently can't handle the > second command for some reason (i.e. the special request magic) you > can just return BLK_MQ_RQ_QUEUE_BUSY from the queue_rq function. Bartlomiejs patch set did that, but I haven't been able to reproduce it. I will try to make a clean patch in the spirit of his. Yours, Linus Walleij
[toc] | [prev] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-10-28 17:40 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxhqa-1EL-23@gated-at.bofh.it> |
| In reply to | #1510995 |
On 10/28/2016 03:32 AM, Linus Walleij wrote: > The patch to enable MQ looks like this: > https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-stericsson.git/commit/?h=mmc-mq&id=8f79b527e2e854071d8da019451da68d4753f71d BTW, another viable "hack" for the depth issue would be to expose more than one hardware queue. It's meant to map to a distinct submission region in the hardware, but there's nothing stopping the driver from using it differently. Might not be cleaner than just increasing the queue depth on a single queue, though. That still won't solve the issue of lying about it and causing IO scheduler confusion, of course. Also, 4.8 and newer have support for BLK_MQ_F_BLOCKING, if you need to block in ->queue_rq(). That could eliminate the need to offload to a kthread manually. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> |
|---|---|
| Date | 2016-10-28 18:00 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxhJv-1LS-13@gated-at.bofh.it> |
| In reply to | #1511179 |
Hi, On Friday, October 28, 2016 09:30:07 AM Jens Axboe wrote: > On 10/28/2016 03:32 AM, Linus Walleij wrote: > > The patch to enable MQ looks like this: > > https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-stericsson.git/commit/?h=mmc-mq&id=8f79b527e2e854071d8da019451da68d4753f71d > > BTW, another viable "hack" for the depth issue would be to expose more > than one hardware queue. It's meant to map to a distinct submission > region in the hardware, but there's nothing stopping the driver from > using it differently. Might not be cleaner than just increasing the > queue depth on a single queue, though. Yes, I'm already considering this for rewritten version of my patch set as it may also help with performance when compared to non blk-mq case. Significant amount of time is spent on DMA map/unmap operations on ARM MMC hosts and I would like to do these DMA (un)mapping-s in parallel for two (or more) requests to check whether it helps the performance (hopefully the cache controller doesn't serialize these operations). BTW I'm following the discussion and still would like to help with getting blk-mq work for MMC. I'm just quite busy with other things at the moment. > That still won't solve the issue of lying about it and causing IO > scheduler confusion, of course. > > Also, 4.8 and newer have support for BLK_MQ_F_BLOCKING, if you need to > block in ->queue_rq(). That could eliminate the need to offload to a > kthread manually. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics
[toc] | [prev] | [next] | [standalone]
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2016-10-28 18:10 +0200 |
| Message-ID | <sxhTb-25n-5@gated-at.bofh.it> |
| In reply to | #1511179 |
On Friday, October 28, 2016 9:30:07 AM CEST Jens Axboe wrote: > On 10/28/2016 03:32 AM, Linus Walleij wrote: > > The patch to enable MQ looks like this: > > https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-stericsson.git/commit/?h=mmc-mq&id=8f79b527e2e854071d8da019451da68d4753f71d > > BTW, another viable "hack" for the depth issue would be to expose more > than one hardware queue. It's meant to map to a distinct submission > region in the hardware, but there's nothing stopping the driver from > using it differently. Might not be cleaner than just increasing the > queue depth on a single queue, though. > > That still won't solve the issue of lying about it and causing IO > scheduler confusion, of course. > > Also, 4.8 and newer have support for BLK_MQ_F_BLOCKING, if you need to > block in ->queue_rq(). That could eliminate the need to offload to a > kthread manually. I think the main reason for the kthread is that on ARM and other architectures, the dma mapping operations are fairly slow (for cache flushes or bounce buffering) and we want to minimize the time between subsequent requests being handled by the hardware. This is not unique to MMC in any way, MMC just happens to be common on ARM and it is limited by its lack of hardware command queuing. It would be nice to do a similar trick for SCSI disks, especially USB mass storage, maybe also SATA, which are the next most common storage devices on non-coherent ARM systems (SATA nowadays often comes with NCQ, so it's less of an issue) It may be reasonable to tie this in with the I/O scheduler: if you don't have a scheduler, the access to the device is probably rather direct and you want to avoid any complexity in the kernel, but if preparing a request is expensive and the hardware has no queuing, you probably also want to use a scheduler. We should probably also try to understand how this could work out with USB mass storage, if there is a solution at all, and then do it for MMC in a way that would work on both. I don't think the USB core can currently split the dma_map_sg() operation from the USB command submission, so this may require some deeper surgery there. Arnd
[toc] | [prev] | [next] | [standalone]
| From | Mark Brown <broonie@kernel.org> |
|---|---|
| Date | 2016-10-28 19:20 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxiYW-2LI-13@gated-at.bofh.it> |
| In reply to | #1511205 |
[Multipart message — attachments visible in raw view] — view raw
On Fri, Oct 28, 2016 at 06:05:35PM +0200, Arnd Bergmann wrote: > On Friday, October 28, 2016 9:30:07 AM CEST Jens Axboe wrote: > > Also, 4.8 and newer have support for BLK_MQ_F_BLOCKING, if you need to > > block in ->queue_rq(). That could eliminate the need to offload to a > > kthread manually. > I think the main reason for the kthread is that on ARM and other > architectures, the dma mapping operations are fairly slow (for > cache flushes or bounce buffering) and we want to minimize the > time between subsequent requests being handled by the hardware. > This is not unique to MMC in any way, MMC just happens to be > common on ARM and it is limited by its lack of hardware > command queuing. Plus the fact that MMC (and SD) have some *relatively* high performance implementations which amplify the effects of desaturating the hardware - the faster the hardware is the more noticable the overhead of stalling it becomes.
[toc] | [prev] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-10-28 16:10 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxg13-Tz-9@gated-at.bofh.it> |
| In reply to | #1510738 |
On 10/27/2016 04:27 PM, Linus Walleij wrote: > On Thu, Oct 27, 2016 at 11:08 PM, Jens Axboe <axboe@kernel.dk> wrote: > >> blk-mq has evolved to support a variety of devices, there's nothing >> special about mmc that can't work well within that framework. > > There is. Read mmc_queue_thread() in drivers/mmc/card/queue.c > > This repeatedly calls req = blk_fetch_request(q);, starting one request > and then getting the next one off the queue, including reading > a few NULL requests off the end of the queue (to satisfy the > semantics of its state machine. > > It then preprocess each request by esstially calling .pre() and .post() > hooks all the way down to the driver, flushing its mapped > sglist from CPU to DMA device memory (not a problem on x86 and > other DMA-coherent archs, but a big win on the incoherent ones). > > In the attempt that was posted recently this is achieved by lying > and saying the HW queue is two items deep and eating requests > off that queue calling pre/post on them. > > But as there actually exist MMC cards with command queueing, this > would become hopeless to handle, the hw queue depth has to reflect > the real depth. What we need is for the block core to call pre/post > hooks on each request. > > The "only" thing that doesn't work well after that is that CFQ is no > longer in action, which will have interesting effects on MMC throughput > in any fio-like stress test as it is mostly single-hw-queue. That will cause you pain with any IO scheduler that has more complex state, like CFQ and BFQ... I looked at the code but I don't quite get why it is handling requests like that. Care to expand? Is it a performance optimization? It looks fairly convoluted for some reason. I would imagine that latency would be one of the more important aspects for mmc, yet the driver has a context switch for each sync IO. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Ulf Hansson <ulf.hansson@linaro.org> |
|---|---|
| Date | 2016-10-28 08:40 +0200 |
| Message-ID | <sx8Zz-4FH-1@gated-at.bofh.it> |
| In reply to | #1510673 |
[...] > >> Moreover, I am still trying to understand what's the big deal to why >> you say no to BFQ as a legacy scheduler. Ideally it shouldn't cause >> you any maintenance burden and it doesn't make the removal of the >> legacy blk layer any more difficult, right? > > > Not sure I can state it much clearer. It's a new scheduler, and a > complicated one at that. It WILL carry a maintenance burden. And I'm Really? Either you maintain the code or not. And if Paolo would do it, then your are off the hook! > really not that interested in adding such a burden for something that > will be defunct as soon as the single queue blk-mq version is done. > Additionally, if we put BFQ in right now, the motivation to do the real > work will be gone. You have been pushing Paolo in different directions throughout the years with his work in BFQ, wasting lots of his time/effort. You have not given him any credibility for his work in BFQ and now you point him yet in another direction. I understand Paolo is a very persistent hard working guy, most likely because he is really confident about his work in BFQ and he should be! But, regarding motivation, if you continue to push him in different directions and without giving him any credibility - then at some point, you probably knows what will happen. > > The path forward is clear. It'd be a lot better to put some work behind > that, rather than continue this email thread. Yes, it seems so! Kind regards Ulf Hansson
[toc] | [prev] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-10-28 16:20 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxgaK-ZQ-15@gated-at.bofh.it> |
| In reply to | #1510871 |
On 10/28/2016 12:36 AM, Ulf Hansson wrote: > [...] > >> >>> Moreover, I am still trying to understand what's the big deal to why >>> you say no to BFQ as a legacy scheduler. Ideally it shouldn't cause >>> you any maintenance burden and it doesn't make the removal of the >>> legacy blk layer any more difficult, right? >> >> >> Not sure I can state it much clearer. It's a new scheduler, and a >> complicated one at that. It WILL carry a maintenance burden. And I'm > > Really? Either you maintain the code or not. And if Paolo would do it, > then your are off the hook! Are you trying to be deliberately obtuse? If so, good job. I'd advise you to look into how code in the kernel is maintained in general. A maintenance burden exists for code A, but it also carries over to the subsystem it is under, and the kernel in general. Adding code is never free. >> really not that interested in adding such a burden for something that >> will be defunct as soon as the single queue blk-mq version is done. >> Additionally, if we put BFQ in right now, the motivation to do the real >> work will be gone. > > You have been pushing Paolo in different directions throughout the > years with his work in BFQ, wasting lots of his time/effort. I have not. Various entities have advised Paolo approach it in various ways. We've had blk-mq for 3 years now, my position should have been pretty clear on that. > You have not given him any credibility for his work in BFQ and now you > point him yet in another direction. I don't even know what that means. But I'm not pointing him in a new direction. Ulf, I'm done discussing with you. I've made my position clear, yet you continue to beat on a dead horse. As far as I'm concerned, there's nothing further to discuss here. I'll be happy to discuss when there's some meat on the bone (ie code). Until then, EOD. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Mark Brown <broonie@kernel.org> |
|---|---|
| Date | 2016-10-28 19:20 +0200 |
| Subject | Re: [PATCH 00/14] introduce the BFQ-v0 I/O scheduler as an extra scheduler |
| Message-ID | <sxiYW-2LI-31@gated-at.bofh.it> |
| In reply to | #1511154 |
[Multipart message — attachments visible in raw view] — view raw
On Fri, Oct 28, 2016 at 08:17:01AM -0600, Jens Axboe wrote: > On 10/28/2016 12:36 AM, Ulf Hansson wrote: > > You have been pushing Paolo in different directions throughout the > > years with his work in BFQ, wasting lots of his time/effort. > I have not. Various entities have advised Paolo approach it in various ways. > We've had blk-mq for 3 years now, my position should have been pretty clear > on that. Having come to this somewhat late I have to say that that hasn't been 100% clear as a set opinion from everyone - in the time I've been following things there's been engagement about the meat of the code which gave the impression the patches were being seriously considered. But like I said in a previous mail this is all in the past anyway, we need to focus on the present situation.
[toc] | [prev] | [next] | [standalone]
Page 1 of 2 [1] 2 Next page →
Back to top | Article view | linux.kernel
csiph-web