[Vdo-devel] Trying to test thin provisioned LVM on VDO
Mike Snitzer
snitzer at redhat.com
Wed Jul 11 13:54:48 UTC 2018
That's fine.
On Wed, Jul 11 2018 at 9:38am -0400,
Nikhil Kshirsagar <nkshirsa at redhat.com> wrote:
> Hello,
> Would it be a good idea to document this in a kcs and also raise a bz
> preemptively?
> Regards,
> Nikhil.
> On Wed 11 Jul, 2018, 7:05 PM Mike Snitzer, <[1]snitzer at redhat.com> wrote:
>
> On Wed, Jul 11 2018 at 6:48am -0400,
> James Hogarth <[2]james.hogarth at gmail.com> wrote:
>
> > On 11 July 2018 at 11:26, James Hogarth <[3]james.hogarth at gmail.com>
> wrote:
> > > On 11 July 2018 at 10:40, Michael Sclafani <[4]sclafani at redhat.com>
> wrote:
> > >> Based on the error message and a quick scan of the code, it appears
> dm-thin
> > >> disables discards because VDO's max_discard_sectors = 4KB is
> smaller than
> > >> dm-thin's 64KB+ block size. I have no idea why it does that, but if
> it
> > >> neither discards nor zeros out blocks it has written to VDO, that
> space will
> > >> not be reclaimed.
> > >>
> > >
> > > Thanks for confirming the line of thought I was following ...
> > >
> > > Annoyingly this makes the RHEL documentation pretty useless to
> follow
> > > for carrying out thin provisioned volumes...
> > >
> > > Unfortunately I don't have a support account to hand to raise this
> as
> > > a RHEL7.5 issue to resolve ...
> > >
> > > Looking at the lvcreate man page it's not possible to set a block
> size
> > > for a thin pool below 64K
> > >
> > > -c|--chunksize Size[k|UNIT]
> > > The size of chunks in a snapshot, cache pool or thin
> > > pool. For snapshots, the value
> > > must be a power of 2 between 4KiB and 512KiB and the
> > > default value is 4. For a cache
> > > pool the value must be between 32KiB and 1GiB and the
> > > default value is 64. For a thin
> > > pool the value must be between 64KiB and 1GiB and the
> > > default value starts with 64 and
> > > scales up to fit the pool metadata size within 128MiB,
> > > if the pool metadata size is not
> > > specified. The value must be a multiple of 64KiB.
> See
> > > lvmthin(7) and lvmcache(7) for
> > > more information.
> > >
> > > What's going to be the best approach to resolve this so that thin
> > > provisioning works as expected? It's obviously not advisable to use
> in
> > > this configuration due to the inevitable disk exhaustion issue that
> > > will arise.
> >
> >
> > Mike you wrote the relevant patch that appears to be causing the
> > conflict and prevents dm-thin passing the discard to VDO here:
> >
> > [5]https://www.redhat.com/archives/dm-devel/2012-August/msg00381.html
> >
> > I know it was a while back but do you recall what the reason for the
> > max_discard_sector and sectors_per_block comparison was for?
>
> DM thinp cannot make use of a discard that only cover part of a dm-thinp
> block. SO its internal accounting wouldn't work.
>
> Now in the VDO case, you still _really_ want the discard (that DM thinp
> cannot use, and as such will not reclaim and reuse the associated block)
> to get passed down -- so VDO can recover space, etc.
>
> > From the VDO code it appears untenable to increase maxDiscardSector
> > without major performance impact - to the extent of I/O stalls.
>
> That needs to be explored further. Only allowing 4K discards is also a
> serious source of performance loss (by forcing the block core's
> bldev_issue_discard to iterate on such a small granularity).
>
> Pretty sure Zdenek found that VDO's discard performance was _very_
> slow.
>
> > So it looks like the only way to make this work is a change to dm-thin
> > to ensure the discards are still passed to the VDO layer below it.
>
> Not opposed to adding that. Think it'll require a new feature though,
> e.g. "discard_passdown". We already have "no_discard_passdown" -- which
> is safe, whereas "discard_passdown" could be unsafe (if device simply
> doesn't support diacrds at all).. so the constraint for the
> "discard_passdown" override must be that the pool's underlying data
> device does actually support discard.
>
> But all said, discard passdown happens as a side-effect at the end of
> dm-thinp's discard processing (that is all done in terms of
> dm-bio-prison locking that occurs at a thinp blocksize granularity). As
> such it could become quite complex to update dm-thinp's discard
> code-path to process discards that don't cover an entire thinp block.
> Might not be awful, but just letting you know as an upfront disclaimer.
>
> Another option might be to see what shit hits the fan if we were to
> relax the DM thinp blocksize all the way down to 4K. It'll definitely
> put pressure on the thinp metadata, etc. Could result in serious
> performance hit, and more side-effects I cannot devine at the moment.
> But it is a "cheap" way forward.. but in general we'd probably want to
> gate the use of such a small a blocksize on some sort of
> i-know-what-i'm-doing feature.
>
> Mike
>
> References
>
> Visible links
> 1. mailto:snitzer at redhat.com
> 2. mailto:james.hogarth at gmail.com
> 3. mailto:james.hogarth at gmail.com
> 4. mailto:sclafani at redhat.com
> 5. https://www.redhat.com/archives/dm-devel/2012-August/msg00381.html
More information about the vdo-devel
mailing list