Re: 4.4-final: 28 bioset threads on small notebook

From: Pavel Machek
Date: Tue Feb 23 2016 - 15:45:40 EST


On Mon 2016-02-22 13:58:18, Kent Overstreet wrote:
> On Sun, Feb 21, 2016 at 05:40:59PM +0800, Ming Lei wrote:
> > On Sun, Feb 21, 2016 at 2:43 PM, Ming Lin-SSI <ming.l@xxxxxxxxxxxxxxx> wrote:
> > >>-----Original Message-----
> > >
> > > So it's almost already "per request_queue"
> >
> > Yes, that is because of the following line:
> >
> > q->bio_split = bioset_create(BIO_POOL_SIZE, 0);
> >
> > in blk_alloc_queue_node().
> >
> > Looks like this bio_set doesn't need to be per-request_queue, and
> > now it is only used for fast-cloning bio for splitting, and one global
> > split bio_set should be enough.
>
> It does have to be per request queue for stacking block devices (which includes
> loopback).

Could we only allocate request queues for devices that are not even
opened? I have these in my system:

loop0 loop2 loop4 loop6 md0 nbd1 nbd11 nbd13 nbd15 nbd3 nbd5 nbd7 nbd9 sda1 sda3
loop1 loop3 loop5 loop7 nbd0 nbd10 nbd12 nbd14 nbd2 nbd4 nbd6 nbd8 sda sda2 sda4

...but nbd is never used, loop1+ is never used, and loop0 is only used
once in a blue moon. Each process takes 8K+...

Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html