[dm-devel] dm: reduce the number of processes per dm device

Mikulas Patocka mpatocka at redhat.com
Thu Oct 8 19:59:31 UTC 2015



On Thu, 8 Oct 2015, Mike Snitzer wrote:

> On Thu, Oct 08 2015 at 12:15pm -0400,
> Mikulas Patocka <mpatocka at redhat.com> wrote:
> 
> > The patch 54efd50bfd873e2dbf784e0b21a8027ba4299a3e ("block: make
> > generic_make_request handle arbitrarily sized bios") makes it possible for
> > block devices to process large bios. The patch allocates a new bio set
> > queue->bio_split for each device, this bio set is used for allocating bios
> > when the driver needs to split large bios.
> > 
> > Each bio_set allocates a workqueue process, thus the above patch increases
> > the number of processes allocated per block device.
> > 
> > Device mapper doesn't need the queue->bio_split bio_set, thus we can
> > deallocate it. This reduces the number of allocated processes per
> > dm-device from 3 to 2.
> 
> This header needs more context added, specifically we need to tell the
> reader the answer to: why doesn't DM need queue->bio_split?

Dm doesn't need queue->bio_split because it has its own bioset md->bs. We 
can't use queue->bio_split instead of md->bs because md->bs has non-zero 
front pad depending on targets loaded in the table.

> Is this a resource that only the lowest layer's request_queue would 
> need? And given DM's stacking nature it doesn't need it simply because 
> it'll never be the lowest layer?

All request-based drivers need queue->bio_split, but some non-dm bio-based 
drivers need it too.

I thought about removing bio_split for for all bio-based devices, but 
declined that because it could generate regressions in drivers that we are 
not able to test.

Mikulas




More information about the dm-devel mailing list