On Thu, 2020-05-28 at 13:16 +0900, Damien Le Moal wrote:
> On Wed, 2020-05-27 at 08:22 +0200, Hannes Reinecke wrote:
> > Prefer full zones when selecting the next zone for reclaim.
> > 
> > Signed-off-by: Hannes Reinecke <h...@suse.de>
> > ---
> >  drivers/md/dm-zoned-metadata.c | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
> > index b89b3d3b9ec9..f161ef4e3d3d 100644
> > --- a/drivers/md/dm-zoned-metadata.c
> > +++ b/drivers/md/dm-zoned-metadata.c
> > @@ -1936,7 +1936,7 @@ static struct dm_zone 
> > *dmz_get_rnd_zone_for_reclaim(struct dmz_metadata *zmd,
> >                                                 unsigned int idx, bool idle)
> >  {
> >     struct dm_zone *dzone = NULL;
> > -   struct dm_zone *zone;
> > +   struct dm_zone *zone, *last = NULL;
> >     struct list_head *zone_list;
> >  
> >     /* If we have cache zones select from the cache zone list */
> > @@ -1953,6 +1953,13 @@ static struct dm_zone 
> > *dmz_get_rnd_zone_for_reclaim(struct dmz_metadata *zmd,
> >                     dzone = zone->bzone;
> >                     if (dzone->dev->dev_idx != idx)
> >                             continue;
> > +                   if (!last) {
> > +                           last = dzone;
> > +                           continue;
> > +                   }
> > +                   if (last->weight < dzone->weight)
> > +                           continue;
> > +                   dzone = last;
> >             } else
> >                     dzone = zone;
> >             if (dmz_lock_zone_reclaim(dzone))
> 
> If all random/cache zones are used but none of them satisfy the
> condition last->weight < dzone->weight, we may end up starving reclaim
> and having user IOs accessing a new chunk wait a loooong time, if not
> forever, No ? I agree that aiming at reclaim of full zones first is
> more efficient, but we need a fallback to ensure forward progress.

Ignore... You are simply trying to select the zone with the largest
weight, which makes perfect sense. The commit message mentioning "full"
zones tricked me... Arg. I need more coffee. Slow afternoon :)

Renaming "last" to "max" would make the intent clearer I think.

Anyway, please feel free to add:

Reviewed-by: Damien Le Moal <damien.lem...@wdc.com>

-- 
Damien Le Moal
Western Digital Research

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to